#vb.net #datagridview #refresh
Вопрос:
Я работаю над системой, которая будет собирать данные с разных компьютеров.
Мое требование заключается в том, что когда я обновляю представление datagrid для просмотра входных данных в своей базе данных, то выбранная строка должна быть выбрана, а позиция полосы прокрутки должна находиться в том же месте, потому что при обновлении полоса прокрутки перемещается в верхнюю часть сетки. Любая помощь будет признательна!
Я использую этот код для обновления представления данных
Private Sub Form_Load(sender As object, e As EventArgs) Handles MyBase.Load
RefreshData()
End Sub
Private Sub AutoRefresher_tick(sender As object, e As EventArgs) Handles AutoRefresher.Tick
DatagridView()
End Sub
Sub RefreshData()
Dim timer as new Timer
timer.Interval = 5000
addHandler timer.tick, Addressof AutoRefresher_Tick
timer.start()
End Sub
Ответ №1:
«Выбор» здесь плохой термин, потому что «выбор» означает что-то конкретное в a DataGridView
, и это не то, что вам нужно. SelectedRows
Свойство представляет собой набор строк, которые выбраны, т. е. выделены. Здесь важно то, где находится курсор, и это «текущая» строка, а не «выбранная» строка. CurrentRow
Свойство представляет собой одну строку , и это строка, содержащая CurrentCell
, которая является ячейкой, содержащей курсор.
Что вам нужно сделать, так это получить CurrentRow
перед обновлением, сохранить уникальный идентификатор для этой записи, выполнить обновление, найти новую строку, содержащую этот идентификатор, и сделать ее текущей строкой. В идеале вы должны связывать данные с помощью a BindingSource
, а затем вы можете использовать свойство Current
and Position
этого, например
Dim currentRecord = DirectCast(BindingSource1.Current, DataRowView)
Dim currentId = currentRecord("Id")
'Refresh data here.
Dim position = BindingSource1.Find("Id", currentId)
BindingSource1.Position = position