2016-02-09 24 views
0

我有通過第二DataGridView循環代碼段,試圖在同一索引號從主DataGridVew用戶與之交互匹配:搜索用於在不同的DataGridView同一小區

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方法,這仍然會導致同樣的問題。

+0

您是手動填充DGV還是使用數據源?迭代行和單元格將是乏味和緩慢的。 – Plutonix

+0

它們都使用相同的數據源 – SilverShotBee

+0

您是否試圖在該特定列中的任何列或具有匹配值的其他行中查找該單元格值? – Plutonix

回答

0

我建議你創建一個字典,當你用你的數據源初始化你的datagridview時,它使得行索引(AllegationsDataGridView.CurrentRow.Cells(0).Value)與parentGrid中的行索引相對應。使用數據源而不是數據網格來構建這個字典。

您將可以快速訪問相應的行。

0

從評論:They both use the same datasource

我不知道爲什麼DGV用戶犯規與需求相互作用有CurrentCell保持同步,因爲如果他們被綁定到同一個數據源,在變化中可見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的行和列索引來設置CurrentCellExit Sub是爲了說明當一個人可能有行而不是另一個時啓動。

您可能想玩哪個事件來回應。 CellContentClick似乎最沒有用:如果他們點擊任何單元格空格,它不會觸發。如果可以點擊父/ dgv2網格中的單元格,它也會崩潰。如果他們直接點擊dgv2,那麼CellEnter也會崩潰。

CellClick似乎可以正常工作,但在他們同步之前會有一絲延遲。

相關問題