监视Datagridview以查找未被隐藏的行

时间:2016-01-27 13:39:39

标签: vb.net winforms datagridview

我有一些代码允许弹出一个结果框,用信息填充DataGridViewDataGridView使用与另一个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

如果有" .RowsUnhi​​dden"事件,这样可以正常工作。

注意 - PathIcon包含需要保持可见的所有索引号,执行检查以查看是否存在任何没有出现在数组中的索引号的行,如果是,则隐藏它试。

有没有人有解决方法或更好的方法?

2 个答案:

答案 0 :(得分:1)

处理RowEnter事件,您可以suspend the binding并将row.Visible重置为False

因此,如果ResultArrayInteger可见行索引数组,则只需执行以下操作:

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

GIF demonstrating hidden rows remaining hidden

答案 1 :(得分:0)

您可以查看DataGridView.CellStateChanged事件。当一个细胞获得焦点,失去它,被选中时,它就会发生......