我有一些代码允许弹出一个结果框,用信息填充DataGridView
。 DataGridView
使用与另一个BindingSource
使用的DataGridView
相同的Result_DataGridView
,因此当点击一个时,另一个会自动移动到同一个选定的单元格。
我遇到的问题是Private Sub Result_Datagridview_CellEnter(sender As Object, e As DataGridViewCellEventArgs) Handles Result_Datagridview.CellEnter
Dim Result As Integer
Dim i
For row As Integer = 0 To Result_Datagridview.RowCount - 1
i = row
Result = Array.Find(ResultArray, Function(x) x = Result_Datagridview.Rows(i).Cells(0).Value)
If Result = 0 Then
Result_Datagridview.Rows(i).Visible = False
End If
Next
End Sub
并不总是包含与主DGV相同的所有行,因为它隐藏了与标准不匹配的行。如果用户点击主DGV上不存在于结果DGV中的单元格,则结果DGV取消隐藏该行(因为您无法隐藏所选行)。
我目前正在尝试使用此方法来隐藏再次出现的行,但是由于VB如何处理"进入一个单元格"它在单元格实际出现之前触发(因为它在输入焦点上触发,但在单元格实际出现在DGV之前,因此永远不会检查行)
ResultArray
如果有" .RowsUnhidden"事件,这样可以正常工作。
注意 - PathIcon
包含需要保持可见的所有索引号,执行检查以查看是否存在任何没有出现在数组中的索引号的行,如果是,则隐藏它试。
有没有人有解决方法或更好的方法?
答案 0 :(得分:1)
处理RowEnter
事件,您可以suspend the binding并将row.Visible
重置为False
。
因此,如果ResultArray
是Integer
可见行索引数组,则只需执行以下操作:
Private Sub Result_Datagridview_RowEnter(sender As Object, e As DataGridViewCellEventArgs)
If Not ResultArray.Contains(e.RowIndex) Then
Dim currencyManager1 As CurrencyManager = DirectCast(BindingContext(Result_Datagridview.DataSource), CurrencyManager)
currencyManager1.SuspendBinding()
Result_Datagridview.Rows(e.RowIndex).Visible = False
currencyManager1.ResumeBinding()
End If
End Sub
答案 1 :(得分:0)
您可以查看DataGridView.CellStateChanged
事件。当一个细胞获得焦点,失去它,被选中时,它就会发生......