我如何让Gridview呈现THEAD?
如何让GridView
控件呈现<thead>
<tbody>
标签? 我知道.UseAccessibleHeaders
使它把<th>
而不是<td>
,但我不能让<thead>
出现。
这应该做到这一点:
gv.HeaderRow.TableSection = TableRowSection.TableHeader;
我在OnRowDataBound
事件中使用这个:
if (e.Row.RowType == DataControlRowType.Header) e.Row.TableSection = TableRowSection.TableHeader;
答案中的代码需要放在Page_Load
或GridView_PreRender
。 我把它放在一个在Page_Load
之后调用的方法中,得到一个NullReferenceException
。
我使用下面的代码来做到这一点:
我添加的if
语句很重要。
否则(取决于你如何呈现网格)你会抛出exception,如:
该表必须按照标题,正文和页脚的顺序包含行部分。
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来创build自己的自定义控件,但是可以将其粘贴到aspx.cs页面中,并通过名称来引用GridView,而不是使用custom-gridview方法。
仅供参考:我没有testing页脚的逻辑,但我知道这适用于标题。
这适用于我:
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中被尝试过。
创build一个函数,并在你的PageLoad
事件中使用这个函数:
function是:
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); } }
我知道这是旧的,但是,这是一个标准的GridView的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; } }