如何让Gridview渲染THEAD?

时间:2008-11-21 15:27:40

标签: c# .net asp.net gridview

如何让GridView控件呈现<thead> <tbody>个标签?我知道.UseAccessibleHeaders使其<th>代替<td>,但我无法显示<thead>

8 个答案:

答案 0 :(得分:182)

这应该这样做:

gv.HeaderRow.TableSection = TableRowSection.TableHeader;

答案 1 :(得分:21)

我在OnRowDataBound事件中使用它:

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

答案 2 :(得分:10)

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

答案 3 :(得分: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方法

仅供参考:我没有测试页脚逻辑,但我知道这适用于页眉。

答案 4 :(得分: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中尝试的。

答案 5 :(得分: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);
        }
}

答案 6 :(得分:1)

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

    }

答案 7 :(得分:0)

您也可以使用jQuery添加它。这样可以避免TableRowSection.TableHeader的问题,该问题会被放回PostBack。

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