2015-08-31 2 views
1

У меня есть datagridview, у которого у меня нет связанного источника данных. У меня также есть кнопка и три строки в моем datagridview. Если мой столбец с именем STATUS содержит слово CLOSED, я хотел бы скрыть эту целую строку, но я не хочу ее удалять, просто спрячу ее.Скрыть строки, если столбец содержит определенный текст/строку

Если кто woyuld хотел бы знать, я Ussing VB.net

Как я могу это сделать?

ответ

1

Если вы используете связанный источник данных, который хотите захватить событие 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 

Если вы не используете источник данных, вы хотите, чтобы захватить DataGridView.RowsAdded событие.

Будет выглядеть так.

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 
+0

Сколько бы это замедлить, когда зацикливание 1000+ строк? .. Хочет реализовать что-то похожее на это и ищем наилучший подход, когда есть много строк, чтобы рассмотреть, может быть просто «Выбрать» правильные значения до привязки источника данных, но это больше работает, чем просто скрывать строки в моем коде. – nora

+0

В наборе данных, который имеет средний ~ 55 миллисекунд без каких-либо манипуляций. (10 тыс. Строк). Кажется, что он занимает около ~ 10 раз, когда цикл проходит через строки и фильтруется после события DataSourceChanged. То, что я сделал бы с точки зрения производительности, - это фильтр, который является моим datasource, который является моим datasource dtb.DefaultView.RowFilter = «статус«% закрытого% », который имеет значительно лучшую производительность. Однако у ОП не было привязанного источника данных, поэтому у вас действительно нет возможности, кроме того, что вы перебираете строки и получаете удар по производительности. –

Смежные вопросы