Як я можу отримати GridViewелемент управління <thead> <tbody>тегами? Я знаю, .UseAccessibleHeadersце робить це <th>замість <td>, але я не можу отримати, <thead>щоб з'явитися.
Як я можу отримати GridViewелемент управління <thead> <tbody>тегами? Я знаю, .UseAccessibleHeadersце робить це <th>замість <td>, але я не можу отримати, <thead>щоб з'явитися.
Відповіді:
Це слід зробити:
gv.HeaderRow.TableSection = TableRowSection.TableHeader;
HeaderRowМайно буде nullдо тих пір , GridViewпоки не пов'язані дані, тому переконайтеся , що чекати , поки не прив'язка даних сталася перед запуском вище рядки коду.
theadце використовувати його в jQuery. Однак після відображення заголовка, tbodyздається, він не доступний. Що може бути відсутнім у моєму випадку?
Я використовую це у OnRowDataBoundвипадку:
protected void GridViewResults_OnRowDataBound(object sender, GridViewRowEventArgs e) {
if (e.Row.RowType == DataControlRowType.Header) {
e.Row.TableSection = TableRowSection.TableHeader;
}
}
GridViewв межах а, UpdatePanelа async-postback викликане іншим контролем, OnRowDataBoundподія не буде піднята, тому код у цій відповіді не буде виконаний, що призведе до GridViewповернення до візуалізації без <thead>тегів ... зітхання . Щоб орієнтуватися на цей випадок, пересуньте код із прийнятої відповіді в PreRenderобробник подій gridView (так, як пропонує відповідь ASalvo ).
Код у відповіді потрібно продовжувати Page_Loadабо GridView_PreRender. Я помістив його в метод, який викликався після Page_Loadі отримав NullReferenceException.
DataBoundвипадок. grid.DataBound += (s, e) => { grid.HeaderRow.TableSection = TableRowSection.TableHeader; };
Для цього я використовую такий код:
У 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.
FYI: Я не перевіряв логіку нижнього колонтитулу, але я знаю, що це працює для заголовків.
Це працює для мене:
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 для стандартного перегляду сітки:
сторінка 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;
}
}