Vb.net 如果列包含特定文本/字符串,则隐藏行

Vb.net 如果列包含特定文本/字符串,则隐藏行,vb.net,datagridview,hide,Vb.net,Datagridview,Hide,我有一个datagridview,我也没有绑定的数据源,我的datagridview中还有一个按钮和三行。如果我名为STATUS的列包含单词CLOSED,我想隐藏整行,但我不想删除它,只想隐藏它 如果有人想知道我在使用VB.net 如何执行此操作?如果使用绑定的数据源,则希望捕获DataGridView.DataSourceChanged事件 看起来像这样。 Private Sub DataGridView1_DataSourceChanged(sender As Object, e As Sy

我有一个datagridview,我也没有绑定的数据源,我的datagridview中还有一个按钮和三行。如果我名为STATUS的列包含单词CLOSED,我想隐藏整行,但我不想删除它,只想隐藏它

如果有人想知道我在使用VB.net


如何执行此操作?

如果使用绑定的数据源,则希望捕获
DataGridView.DataSourceChanged
事件

看起来像这样。

Private Sub DataGridView1_DataSourceChanged(sender As Object, e As System.EventArgs) Handles DataGridView1.DataSourceChanged

    For Each row As DataGridViewRow In DirectCast(sender, DataGridView).Rows

        If row.Cells("status").Value.ToString.ToLower.Contains("Closed") Then

            row.Visible = False

        End If

    Next


End Sub
Private Sub DataGridView1_RowsAdded(sender As Object, e As System.Windows.Forms.DataGridViewRowsAddedEventArgs) Handles DataGridView1.RowsAdded

    Dim dg As DataGridView = sender

    If dg.Columns.Count > 0 And e.RowIndex <> 0 Then

        Dim theRow As DataGridViewRow = dg.Rows(e.RowIndex)

        If theRow.Cells("status").Value.ToString.ToLower.Contains("closed") Then

            theRow.Visible = False

        End If

    End If

End Sub
如果您不使用数据源,则希望捕获
DataGridView.RowsAdded
事件

看起来像这样。

Private Sub DataGridView1_DataSourceChanged(sender As Object, e As System.EventArgs) Handles DataGridView1.DataSourceChanged

    For Each row As DataGridViewRow In DirectCast(sender, DataGridView).Rows

        If row.Cells("status").Value.ToString.ToLower.Contains("Closed") Then

            row.Visible = False

        End If

    Next


End Sub
Private Sub DataGridView1_RowsAdded(sender As Object, e As System.Windows.Forms.DataGridViewRowsAddedEventArgs) Handles DataGridView1.RowsAdded

    Dim dg As DataGridView = sender

    If dg.Columns.Count > 0 And e.RowIndex <> 0 Then

        Dim theRow As DataGridViewRow = dg.Rows(e.RowIndex)

        If theRow.Cells("status").Value.ToString.ToLower.Contains("closed") Then

            theRow.Visible = False

        End If

    End If

End Sub
Private子DataGridView1_RowsAdded(发件人作为对象,e作为System.Windows.Forms.DataGridViewRowsAddedEventArgs)处理DataGridView1.RowsAdded
Dim dg作为DataGridView=发送方
如果dg.Columns.Count>0且e.RowIndex为0,则
按DataGridViewRow=dg.Rows(e.RowIndex)的方式调整路径
如果row.Cells(“status”).Value.ToString.ToLower.包含(“closed”),则
theRow.Visible=False
如果结束
如果结束
端接头

当循环1000多行时,这会降低多少速度?。。为了实现类似于此的操作,当有很多行需要考虑的时候,寻找最好的方法,可能只是在绑定数据源之前选择正确的值,但这比在代码中隐藏行更有效,在一个数据集上,平均值为55毫秒,没有任何操作。(10万行)。在DataSourceChanged事件之后,在行中循环并过滤时似乎需要大约10倍的时间。在性能方面,我要做的是过滤我的数据表,它是我的数据源dtb.DefaultView.RowFilter=“类似于“%closed%”的状态,它具有显著更好的性能。但是,OP没有绑定的数据源,因此除了循环行和影响性能之外,您真的没有其他选择。