如何让GridView
控件呈现<thead>
<tbody>
个标签?我知道.UseAccessibleHeaders
使其<th>
代替<td>
,但我无法显示<thead>
。
答案 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_Load
或GridView_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")));