У меня есть приложение Windows с DataGridView в качестве представления данных. Каждые 2 минуты сетка будет обновляться новыми данными. Чтобы синхронизировать полосу прокрутки с добавленными новыми данными, необходимо сбросить полосы прокрутки:
dbv.Rows.Clear(); // clear rows
SCrollBars sc = dbv.ScrollBars;
dbv.ScrollBars = ScrollBars.None;
// continue to populate rows such as dbv.Rows.Add(obj);
dbv.ScrollBars = sc; // restore the scroll bar setting back
С вышеуказанными кодами полоса прокрутки снова появляется нормально после обновления данных. Проблема в том, что приложение требует установить определенную ячейку, выбранную после обновления:
dbv.CurrentCell = dbv[0, selectedRowIndex];
С кодом выше, ячейка выделена; однако положение полосы прокрутки не отражает положение позиции строки выбранной ячейки. Когда я пытаюсь переместить полосу прокрутки после обновления, сетка переместится на первый ряд.
Похоже, что положение полосы прокрутки возвращается к 0 после сброса. Код для установки CurrentCell сетки не заставляет полосу прокрутки перемещаться в правильное место. Насколько мне известно, нет свойства или метода для получения или установки значения полосы прокрутки в DataGriadView.
Я также пытался установить выбранную строку наверх:
dbv.CurrentCell = dbv[0, selectedRowIndex];
dbv.FirstDisplayedScrollingRowIndex = selectedRowIndex;
Строка будет установлена наверх, но положение полосы прокрутки по-прежнему не синхронизировано. Не уверены, есть ли способ синхронизировать положение полосы прокрутки с выбранной строкой, заданной в коде?