Как получить Gridview для рендеринга THEAD? - PullRequest
106 голосов
/ 21 ноября 2008

Как получить элемент управления GridView для отображения тегов <thead> <tbody>? Я знаю, .UseAccessibleHeaders заставляет его поставить <th> вместо <td>, но я не могу заставить <thead> появиться.

Ответы [ 7 ]

182 голосов
/ 21 ноября 2008

Это должно сделать это:

gv.HeaderRow.TableSection = TableRowSection.TableHeader;
21 голосов
/ 08 января 2015

Я использую это в OnRowDataBound событие:

protected void GridViewResults_OnRowDataBound(object sender, GridViewRowEventArgs e) {
    if (e.Row.RowType == DataControlRowType.Header) {
        e.Row.TableSection = TableRowSection.TableHeader;
    }
}
10 голосов
/ 01 мая 2009

Код в ответе должен идти на Page_Load или GridView_PreRender. Я поместил его в метод, который был вызван после Page_Load и получил NullReferenceException.

7 голосов
/ 08 ноября 2013

Я использую следующий код для этого:

Добавленные мной 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 голосов
/ 23 июня 2014

Это работает для меня:

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 голосов
/ 05 апреля 2013

Создайте функцию и используйте эту функцию в вашем 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 голос
/ 22 ноября 2016

Я знаю, что это старый, но вот интерпретация ответа 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;
        }

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...