ASP.NET VB GridViewのヘッダーに行を追加する際に新たなことが分かったので、追加でシステム開発備忘録します。
以前にASP.NET VB GridViewのヘッダーに行を追加するという記事をシステム開発備忘録しました。
その際に、PostBackでおかしくなる旨の記述もしていたのですが、今回の修正で治るかもしれません。
前回の追加コーディングは。以下の通りです。
Private Sub GridView1_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GridView1.RowDataBound
If e.Row.RowType = DataControlRowType.Header Then
Dim row As GridViewRow = New GridViewRow(-1, -1, DataControlRowType.Header, DataControlRowState.Normal)
For i As Integer = 0 To 11
Dim cell1 As TableCell = New TableCell()
cell1.Text = i.tostring + "月"
row.Cells.Add(cell1)
Next
row.RowType = DataControlRowType.Header
Me.GridView1.Controls(0).Controls.AddAt(1, row)
endif
今回、GridViewにtheadタグ、tbodyタグを追加したいと思い以下のコーディングを追加しました。
Private Sub GridView1_RowCreated(sender As Object, e As GridViewRowEventArgs) Handles GridView1.RowCreated
Select Case (e.Row.RowType)
Case DataControlRowType.Header
e.Row.TableSection = TableRowSection.TableHeader 'theadを出力
Case DataControlRowType.DataRow
e.Row.TableSection = TableRowSection.TableBody 'tbodyを出力
Case DataControlRowType.Footer
e.Row.TableSection = TableRowSection.TableFooter 'tfootを出力
End Select
End Sub
このコーディングを追加した結果、上で追加したレコードはTheadに入らずに、Tbodyに入っていました。
環境が異なるので今回は検証をしていませんので、あくまでも推測ですが、先回のPostBack時の不具合はこのことが原因と考えられます。
適切にthead部に入ってヘッダー行と認識されて居れば、PostBack時の処理で通常のレコードと見なされることは無いのではないかと思います。
そこで今回の結果を踏まえ、もう少し突っ込んで調べた結果、
TableSection
なるプロパティが有ることがわかりました。
TableSectionプロパティは、Table コントロールに配置されている TableRow オブジェクトの場所を取得または設定するのに使用されます。
使用できるテーブルの位置については、以下の通りです。
| テーブル行セクション | 表示モード |
| TableHeader | ヘッダー行 |
| TableBody | テーブルの本体 |
| TableFooter | フッター行 |
TableSectionプロパティを設定する箇所は適当で良いと思いますが、私は直線に入れました。
row.TableSection = System.Web.UI.WebControls.TableRowSection.TableHeader Me.GridView1.Controls(0).Controls.AddAt(1, row)
TableSection プロパティをTableHeaderに設定してヘッダーレコードを追加すると、正常にthead部に入ってくれました。
以上、ASP.NET VB GridViewのヘッダーに行を追加する(修正版)のシステム開発備忘録でした。