| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Базы данных под .NET > Как сделать курсор неподвижным на стр. datagridvie |
| Автор: mrSomeoneelse 9.8.2009, 23:09 |
| Есть база ms sql, dataadapter, dataset, datagridview. И куча пользователей, которые постоянно дополняют и меняют базу данных. Есть у адаптера свойство fill которое обновляет содержимое dataset и соответственно dataGridView. при этом курсор есть был на какой-то n-ой строку перескакивает на первую, а хотелось бы чтобы он остался на выбранной строке. Как это сделать? |
| Автор: Gluttton 10.8.2009, 16:01 |
| Метод грубой силы Поскользу порядок записей в БД не детерминирован, то можно перед каждым вызовом fill'а запоминать первичный ключ (ПК) записи на которой стоит курсор, а после выполнения fill'а устанавливать его (курсор) обратно по ключу... Просто проблема, наверное в том, что ПК не отображается?.. Тогда можно попробовать воспользоваться потенциальным ключом (если такие есть)... |
| Автор: mrSomeoneelse 11.8.2009, 11:19 |
| Методом грубой силы не получается, ибо ни dataGridView ни DataSet не имеют прямого метода типа "поставь курсор(номер строки)" есть способ поставить на первую строку и перебирать методом NextRow пока не дойдем до нужной... но представте что это обновление происходит раз в 2 секунды, и при таком обновлении кто-то нажимает кнопку "редактировать запись" и выбирается одна из записей до которой успел дойти nextRow при очередном заполнении.... Очень это не хорошо. Есть ли другой, более разумный метод? |
| Автор: branday 11.8.2009, 18:00 |
| У меня реализовано вот так: //получаем номер строки 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; } |