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のヘッダーに行を追加する(修正版)のシステム開発備忘録でした。