【问题标题】:How do I keep the same row selected in a datagridview after refreshing the dataset?刷新数据集后,如何在 datagridview 中选择相同的行?
【发布时间】:2014-03-05 16:20:06
【问题描述】:

此代码从计时器滴答事件中调用,以便 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

确实如此……对于计时器事件的第一个滴答声。在用户选择一行后的第二个刻度事件中,它会恢复到被选择的第一行。即使变量 CurrentSelectedRow 是一个公共变量,它在第一次滴答事件后被重置为零。然后选定的行切换回网格中的第一行。刷新网格的数据源时会自动选择第一行,但我在刷新后将其选中状态设置为 false。

dataviewgrid 的选中行如何重置为第一行?

【问题讨论】:

  • 只需使用一个变量来跟踪突出显示的行,然后在刷新 DataGrid 时,确保该行再次突出显示。请参阅下面的答案。
  • 当您说选择了同一行时,是指相同的数据/记录还是仅选择的行?

标签: sql vb.net datagridview timer dataset


【解决方案1】:

获取当前索引并将其存储在名为“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

请记住确保设置数据网格,以便在单击单元格时突出显示整行。

【讨论】:

    【解决方案2】:

    发生这种情况的原因是因为您在每个周期中都在更改网格的DataSource

    解决此问题的最佳方法(但最难的方法)是在 VirtualMode 中运行 DataGridView。

    如果不是,则应该设置数据源一次。并且当需要更新表格时,将绑定到网格的表格与新表格合并。

    DirectCast(Me.dgvPreviouslyCut.DataSource, DataTable).Merge(myDataset.Tables("CurData"))
    

    【讨论】:

      【解决方案3】:

      如果您似乎无法让 DataGridView 工作。尝试不同的控件,直到问题得到解决。我个人使用列表框来实现同样的目的。

      【讨论】:

      • 不是帮助别人的最佳方式!
      • 请在给出“答案”之前考虑您的回答
      猜你喜欢
      • 1970-01-01
      • 2016-10-08
      • 2012-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-28
      • 1970-01-01
      相关资源
      最近更新 更多