如何让Gridview渲染THEAD?

问题描述 投票:106回答:7

如何获得GridView控件来渲染<thead> <tbody>标签?我知道.UseAccessibleHeaders让它放<th>而不是<td>,但我不能让<thead>出现。

c# .net asp.net gridview
7个回答
185
投票

这应该这样做:

gv.HeaderRow.TableSection = TableRowSection.TableHeader;

23
投票

我在OnRowDataBound事件中使用它:

protected void GridViewResults_OnRowDataBound(object sender, GridViewRowEventArgs e) {
    if (e.Row.RowType == DataControlRowType.Header) {
        e.Row.TableSection = TableRowSection.TableHeader;
    }
}

10
投票

答案中的代码需要继续使用Page_LoadGridView_PreRender。我把它放在Page_Load之后调用的方法中,得到了一个NullReferenceException


7
投票

我使用以下代码执行此操作:

我添加的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。


4
投票

这对我有用:

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中尝试过的。


2
投票

创建一个函数并在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);
        }
}

1
投票

我知道这是旧的,但是,这是对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;
        }

    }

0
投票

您还可以使用jQuery添加它。这避免了TableRowSection.TableHeader在PostBack上被删除的问题。

$('#myTableId').prepend($("<thead></thead>").append($(this).find("#myTableId tr:first")));

© www.soinside.com 2019 - 2024. All rights reserved.