<thead>
<tbody>
タグをレンダリングするGridView
コントロールを取得するにはどうすればよいですか? .UseAccessibleHeaders
は<th>
の代わりに<td>
を配置することを知っていますが、<thead>
を表示することはできません。
これはそれを行う必要があります:
gv.HeaderRow.TableSection = TableRowSection.TableHeader;
OnRowDataBound
イベントでこれを使用します:
protected void GridViewResults_OnRowDataBound(object sender, GridViewRowEventArgs e) {
if (e.Row.RowType == DataControlRowType.Header) {
e.Row.TableSection = TableRowSection.TableHeader;
}
}
答えのコードは、Page_Load
またはGridView_PreRender
に進む必要があります。 Page_Load
の後に呼び出されたメソッドに入れて、NullReferenceException
を取得しました。
これを行うには、次のコードを使用します。
追加したif
ステートメントは重要です。
それ以外の場合(グリッドのレンダリング方法によって異なります)、次のような例外がスローされます。
テーブルには、ヘッダー、ボディ、フッターの順に行セクションが含まれている必要があります。
protected override void OnPreRender(EventArgs e)
{
if ( (this.ShowHeader == true && this.Rows.Count > 0)
|| (this.ShowHeaderWhenEmpty == true))
{
//Force GridView to use <thead> instead of <tbody> - 11/03/2013 - MCR.
this.HeaderRow.TableSection = TableRowSection.TableHeader;
}
if (this.ShowFooter == true && this.Rows.Count > 0)
{
//Force GridView to use <tfoot> instead of <tbody> - 11/03/2013 - MCR.
this.FooterRow.TableSection = TableRowSection.TableFooter;
}
base.OnPreRender(e);
}
this
オブジェクトは私のGridViewです。
実際にAsp.net GridViewをオーバーライドして独自のカスタムコントロールを作成しましたが、これをaspx.csページに貼り付け、custom-gridviewアプローチを使用する代わりに名前でGridViewを参照できます。
参考:フッターロジックはテストしていませんが、ヘッダーで機能することは知っています。
これは私のために働く:
protected void GrdPagosRowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.TableSection = TableRowSection.TableBody;
}
else if (e.Row.RowType == DataControlRowType.Header)
{
e.Row.TableSection = TableRowSection.TableHeader;
}
else if (e.Row.RowType == DataControlRowType.Footer)
{
e.Row.TableSection = TableRowSection.TableFooter;
}
}
これはVS2010で試行されました。
関数を作成し、次のようにPageLoad
イベントでその関数を使用します。
機能は次のとおりです。
private void MakeGridViewPrinterFriendly(GridView gridView) {
if (gridView.Rows.Count > 0) {
gridView.UseAccessibleHeader = true;
gridView.HeaderRow.TableSection = TableRowSection.TableHeader;
}
}
PageLoad
イベントは次のとおりです。
protected void Page_Load(object sender, EventArgs e) {
if (!IsPostBack)
{
MakeGridViewPrinterFriendly(grddata);
}
}
私はこれが古いことを知っていますが、標準のグリッドビューについてのMikeTeeVeeの答えの解釈は次のとおりです。
aspxページ:
<asp:GridView ID="GridView1" runat="server"
OnPreRender="GridView_PreRender">
aspx.cs:
protected void GridView_PreRender(object sender, EventArgs e)
{
GridView gv = (GridView)sender;
if ((gv.ShowHeader == true && gv.Rows.Count > 0)
|| (gv.ShowHeaderWhenEmpty == true))
{
//Force GridView to use <thead> instead of <tbody> - 11/03/2013 - MCR.
gv.HeaderRow.TableSection = TableRowSection.TableHeader;
}
if (gv.ShowFooter == true && gv.Rows.Count > 0)
{
//Force GridView to use <tfoot> instead of <tbody> - 11/03/2013 - MCR.
gv.FooterRow.TableSection = TableRowSection.TableFooter;
}
}
JQueryを使用して追加することもできます。これにより、PostBackでドロップされるTableRowSection.TableHeaderの問題を回避できます。
$('#myTableId').prepend($("<thead></thead>").append($(this).find("#myTableId tr:first")));