Сканируйте каждую строку сетки в каждом столбце и скройте столбец, если все строки пусты

У меня есть gridview что-то вроде этого. Он привязан в источнике данных. Теперь мне нужно скрыть столбцы, в которых у его строк нет доступных данных. В приведенном ниже примере таблицы столбец с "2ND" как HeaderText должен быть скрыт, поскольку он не имеет данных.

Protected Sub grdsf_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles grdsf.DataBound
 Dim rowscount As Integer = grdsf.Rows.Count
 Dim columnscount As Integer = grdsf.Columns.Count
 Dim k As Integer = 0
 For j As Integer = 1 To columnscount - 1 Step j + 1
 For i As Integer = 0 To rowscount - 1 step i + 1
 Dim x As String = grdsf.Rows(i).Cells(j).Text
 If x = String.Empty Then
 k = k + 1
 End If
 Next
 Dim col As DataControlField = grdsf.Columns(j)
 If k = rowscount Then
 col.Visible = False
 End If

 Next
 End Sub

Цикл для столбца начинается с индекса 1, так как 1-й столбец не должен скрываться.

2 ответа

Попробуйте этот метод.

Private Sub HideBlankColumns()
 Dim bHasValue As Boolean
 Dim sValue As String
 For iCol As Integer = 0 To GridView1.ColumnCount - 1
 bHasValue = False
 For iRow As Integer = 0 To GridView1.RowCount - 1
 sValue = (GridView1.Rows(iRow).FindControl("LableID") As Label).Text
 If GridView1.Rows(iRow).Cells(iCol).Text != String.Empty && sValue != String.Empty Then
 bHasValue = True
 Exit For
 End If
 Next
 'To Hide the column
 If bHasValue = False Then
 GridView1.Columns(iCol).Visible = False
 End If

 ' ''To Remove the Column
 ''If bHasValue = False Then
 '' GridView1.Columns.RemoveAt(iCol)
 '' iCol -= 1
 ''End If
 Next

End Sub


попробуй это:

For each _Row as GridViewRow in Gridview1.rows
 For each _Col as GridViewColumn in Gridview1.columns

 If Gridview1.rows(_row.index).item(_col.index).value = Nothing Then

 GRidView1.Columns.remove(_col.index) 

 End If

Next

licensed under cc by-sa 3.0 with attribution.