此代码从计时器tick事件中调用,以便dataviewgrid频繁刷新。
从我在SO上找到的其他答案我希望此代码将所选行重置为在此代码运行之前选择的行,刷新我的数据集。
只有变量CurrentSelectedRow是一个公共变量,其他所有变量都是本地变量。
sql = "select top 10 batch, TrussName, PieceName from FitaPieces order by SawTime desc "
myDataset = SelectFromDB(sql)
MyPreviouslyCutPieces.ClearAll()
Me.dgvPreviouslyCut.SelectionMode = DataGridViewSelectionMode.FullRowSelect
If Not IsNothing(Me.dgvPreviouslyCut.CurrentRow) Then
Debug.Print(Now.ToString & "...Current Row = " & Me.dgvPreviouslyCut.CurrentRow.ToString)
CurrentSelectedRow = Me.dgvPreviouslyCut.CurrentRow.Index
Else
Debug.Print(Now.ToString & "...Current Row = -1")
CurrentSelectedRow = -1
End If
If Not myDataset Is Nothing Then
If myDataset.Tables("CurData").Rows.Count > 0 Then
Me.dgvPreviouslyCut.DataSource = myDataset
Me.dgvPreviouslyCut.DataMember = "CurData"
End If
End If
If CurrentSelectedRow <> -1 Then
Me.dgvPreviouslyCut.Rows(0).Selected = False
Me.dgvPreviouslyCut.Rows(CurrentSelectedRow).Selected = True
End If
它确实......对于计时器事件的第一个滴答。在用户选择行之后的第二个tick事件上,它将恢复为所选的第一行。即使变量CurrentSelectedRow是一个公共变量,它也会在第一个tick事件后重置为零。然后,所选行将切换回网格中的第一行。刷新网格的数据源时会自动选择第一行,但刷新后我将其选中状态设置为false。
如何将dataviewgrid的选定行重置为第一行?
答案 0 :(得分:2)
获取当前索引并将其存储在名为“go_back_to_index”
的变量中Dim go_back_to_index as integer
当用户点击网格中的行时,只需保存该值,以便稍后突出显示:
go_back_to_index = current_data_grid.currentRow.value
然后当网格更新时,只需运行这段代码:
If go_back_to_index < current_data_grid.Rows.Count Then
current_data_grid.Rows(go_back_to_index).Selected = True
current_data_grid.CurrentCell = current_data_grid.Item(1, go_back_to_index)
End If
请务必确保设置数据网格,以便在单击单元格时突出显示整行。
答案 1 :(得分:0)
之所以发生这种情况,是因为您在每个周期都在更改网格的DataSource
。
解决此问题的最佳方法(但最困难的方法)是在VirtualMode中运行DataGridView。
如果没有,则应仅将数据源设置为。当您需要更新表时,将绑定到网格的表与新表合并。
DirectCast(Me.dgvPreviouslyCut.DataSource, DataTable).Merge(myDataset.Tables("CurData"))
答案 2 :(得分:-2)
如果你似乎无法使DataGridView工作。尝试不同的控制,直到问题得到解决。我亲自使用列表框来实现同样的目标。