如何获得GridView
控件来渲染<thead>
<tbody>
标签?我知道.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页面并按名称引用GridView而不是使用custom-gridview方法。
仅供参考:我没有测试过页脚逻辑,但我知道这适用于Headers。
这对我有用:
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的答案的解释,对于标准的gridview:
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添加它。这避免了TableRowSection.TableHeader在PostBack上被删除的问题。
$('#myTableId').prepend($("<thead></thead>").append($(this).find("#myTableId tr:first")));