![]() |
Модераторы: gambit |
![]() ![]() ![]() |
|
mrSomeoneelse |
|
|||
neZavisimii Профиль Группа: Участник Сообщений: 9 Регистрация: 20.1.2009 Репутация: нет Всего: нет |
Есть база ms sql, dataadapter, dataset, datagridview. И куча пользователей, которые постоянно дополняют и меняют базу данных. Есть у адаптера свойство fill которое обновляет содержимое dataset и соответственно dataGridView. при этом курсор есть был на какой-то n-ой строку перескакивает на первую, а хотелось бы чтобы он остался на выбранной строке.
Как это сделать? |
|||
|
||||
Gluttton |
|
|||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: нет Всего: 54 |
Метод грубой силы
![]() Поскользу порядок записей в БД не детерминирован, то можно перед каждым вызовом fill'а запоминать первичный ключ (ПК) записи на которой стоит курсор, а после выполнения fill'а устанавливать его (курсор) обратно по ключу... Просто проблема, наверное в том, что ПК не отображается?.. Тогда можно попробовать воспользоваться потенциальным ключом (если такие есть)... -------------------- Слава Україні! |
|||
|
||||
mrSomeoneelse |
|
|||
neZavisimii Профиль Группа: Участник Сообщений: 9 Регистрация: 20.1.2009 Репутация: нет Всего: нет |
Методом грубой силы не получается, ибо ни dataGridView ни DataSet не имеют прямого метода типа "поставь курсор(номер строки)" есть способ поставить на первую строку и перебирать методом NextRow пока не дойдем до нужной... но представте что это обновление происходит раз в 2 секунды, и при таком обновлении кто-то нажимает кнопку "редактировать запись" и выбирается одна из записей до которой успел дойти nextRow при очередном заполнении....
Очень это не хорошо. Есть ли другой, более разумный метод? |
|||
|
||||
branday |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 2.2.2009 Репутация: нет Всего: нет |
У меня реализовано вот так:
//получаем номер строки int i = dGVSpecifikaciya.SelectedCells[0].RowIndex; //получаем индекс первой видимой строки int firstDisplayCellIndex = dGVSpecifikaciya.FirstDisplayedScrollingRowIndex; //тут я получаю ID моей записи int fidspec = Convert.ToInt32(dGVSpecifikaciya.Rows[i].Cells["ID"].Value.ToString()); //Вызов диалога для поиска товара F_FindeTovarNew dlg = new F_FindeTovarNew(this, fidspec, currentSpecID); dlg.ShowDialog(); //Далее обновляю данные #region обновление в форме using (SoodaTransaction trans = new SoodaTransaction()) { Spec sp = Spec.Load(currentSpecID); bSSpecifikaciya.DataSource = sp.CollectionOfSpecifikaciya2; bSSpecifikaciya.Position = bSSpecifikaciya.Find("ID", fidspec); bgWorker.RunWorkerAsync(); } #endregion dGVSpecifikaciya.FirstDisplayedScrollingRowIndex = firstDisplayCellIndex; } |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Базы данных под .NET | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |