我如何让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_LoadGridView_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; } }