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

У меня есть 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.