Положение полосы прокрутки после обновления Datagridview vb.net

#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