在不同的DataGridView中搜索相同的单元格

时间:2016-02-09 07:56:04

标签: vb.net datagridview

我有一段代码循环显示第二个DataGridView,尝试匹配用户与之交互的主DataGridVew中的相同索引号:

Private Sub AllegationsDataGridView_CellEnter(sender As Object, e As EventArgs) Handles AllegationsDataGridView.CellEnter
        Try
            Dim currentcolumn As DataGridViewColumn =
        AllegationsDataGridView.Columns(AllegationsDataGridView.CurrentCell.ColumnIndex)
            For Each row As DataGridViewRow In parentgrid.Rows
                If row.Cells.Item(0).Value = AllegationsDataGridView.CurrentRow.Cells(0).Value Then
                    parentgrid.CurrentCell = parentgrid(0, row.Index)
                End If
            Next
        Catch ex As Exception
            Debug.Print(ex.Message)
        End Try
endsub:

    End Sub

问题是数据源可能有成千上万的条目,我不希望这个循环遍历整个行,直到找到匹配为止。我想知道是否有更快的方法来解决这个问题?我在搜索全部时看到的唯一示例使用For Each Row方法或Loop Until方法,这仍然会出现同样的问题。

2 个答案:

答案 0 :(得分:0)

我建议您在使用数据源初始化datagridview时构建一个字典,使行键(AllegationsDataGridView.CurrentRow.Cells(0).Value)与parentGrid中的行索引相对应。使用数据源而不是数据网格来构建此字典。

您将能够快速访问相应的行。

答案 1 :(得分:0)

来自评论:They both use the same datasource

我不确定为什么用户不与交互的DGV需要让CurrentCell保持同步,因为如果它们绑定到同一数据源,则可以看到对A的更改B马上。尽管如此:

Private Sub dgv1_CellClick(sender As Object, 
               e As DataGridViewCellEventArgs) Handles dgv1.CellContentClick
    If dgv2.Rows.Count = 0 Then Exit Sub

    dgv2.CurrentCell = dgv2.Rows(e.RowIndex).Cells(e.ColumnIndex)
End Sub

在这里,dgv1是用户网格,dgv2是另一个("父"在你的代码中?)。

如果共享DS,则不需要For / Each迭代,因为每行和每列索引都有相同的数据。即使用户重新排序列也会有效,因为列索引保持不变,只是内部DisplayIndex更改。

这使用DataGridViewCellEventArgs中的行索引和列索引来设置CurrentCell。当Exit Sub可能有行而不是另一行时,CellContentClick会占用。

您可能想玩哪个事件来回复。 CellEnter似乎最不实用:如果他们点击任何单元格空格,它就不会触发。如果可以单击父/ dgv2网格中的单元格,它也会崩溃。如果他们直接点击dgv2,CellClick也会崩溃。

@Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { switch (oldVersion){ case 3:{ int jobid = insertJobWithoutClosing(new Job("Default", Color.rgb(0, 0, 255)), db); db.execSQL("ALTER TABLE " + workTable + " ADD COLUMN " + colJobID + " INTEGER DEFAULT " + jobid + " FOREIGN KEY("+colJobID+") REFERENCES "+table_jobs+"("+job_ID+")"); } } 似乎工作正常,但在他们同步之前有一点点延迟。