この質問のバリエーションが多く寄せられていることを知っています。私は長い間答えを探していて、さまざまなコードブロックを試してきました。これが私が今持っているもので、0からgridview1.rows.count-1までループしています。このコードは、RowDataBound イベントにあります。
Dim test As String
For i As Integer = 0 To GridView1.Rows.Count - 1
test = GridView1.Rows(i).Cells.Item(e.Row.RowIndex).Text.ToString
If test = " " Then
e.Row.Cells(i).Visible = False
End If
Next
エラーが発生するたびに:指定された引数は有効な値の範囲外でした。パラメータ名: この行のインデックス
test = GridView1.Rows(i).Cells.Item(e.Row.RowIndex).Text.ToString
ただし、エラーは行範囲の外に出ているためだと思いますが、修正方法がわかりません。すべての行と列の各セルを正常にチェックし、何も返さない列を非表示にするにはどうすればよいですか。
これで空白の各列内の実際のセルをすべて非表示にできるようになりました
Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs)
Dim GridView1 As GridView = FormView1.FindControl("GridView1")
For Each row As GridViewRow In GridView1.Rows
For i As Integer = 0 To row.Cells.Count - 1
Dim strtest As String = row.Cells(i).Text.ToString
If strtest = " " Then
row.Cells(i).Visible = False
End If
Next
Next
ただし、autogeneratecolumns を使用すると列が存在することが認識されないため、列を非表示にすることはできません。コード GridView1.Columns(i).visible = false の範囲がないため、範囲外エラーがスローされます。列