Як я можу отримати 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;
}
}