it-swarm.com.de

Wie bringe ich Gridview dazu, THEAD zu rendern?

Wie kann ich mit dem Steuerelement GridView die Tags <thead><tbody> Rendern? Ich weiß, dass .UseAccessibleHeaders<th> Anstelle von <td> Verwendet, aber ich kann den <thead> Nicht anzeigen.

109
Andrew Bullock

Das sollte es tun:

gv.HeaderRow.TableSection = TableRowSection.TableHeader;
185
Phil Jenkins

Ich benutze das in OnRowDataBound event:

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

Der Code in der Antwort muss auf Page_Load Oder GridView_PreRender Stehen. Ich habe es in eine Methode geschrieben, die nach Page_Load Aufgerufen wurde und eine NullReferenceException erhalten hat.

10
ASalvo

Ich benutze den folgenden Code, um dies zu tun:

Die if -Anweisungen, die ich hinzugefügt habe, sind wichtig.

Andernfalls (abhängig davon, wie Sie Ihr Raster rendern) werden Ausnahmen wie die folgenden ausgelöst:

Die Tabelle muss Zeilenabschnitte in der Reihenfolge von Header, Body und Footer enthalten.

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);
}

Das Objekt this ist meine GridView.

Eigentlich habe ich die Asp.net-GridView überschrieben, um mein eigenes benutzerdefiniertes Steuerelement zu erstellen. Sie können dies jedoch in Ihre Seite aspx.cs einfügen und die GridView nach Namen referenzieren, anstatt den benutzerdefinierten GridView-Ansatz zu verwenden.

Zu Ihrer Information: Ich habe die Fußzeilenlogik nicht getestet, aber ich weiß, dass dies für Kopfzeilen funktioniert.

7
MikeTeeVee

Dies funktioniert für mich:

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;
    }
}

Dies wurde in VS2010 versucht.

4
Felipe Delgado

Erstellen Sie eine Funktion und verwenden Sie diese Funktion in Ihrem PageLoad -Ereignis wie folgt:

Die Funktion ist:

private void MakeGridViewPrinterFriendly(GridView gridView) {  
    if (gridView.Rows.Count > 0) {          
        gridView.UseAccessibleHeader = true;  
        gridView.HeaderRow.TableSection = TableRowSection.TableHeader;  
    }  
} 

Das Ereignis PageLoad ist:

protected void Page_Load(object sender, EventArgs e) {
        if (!IsPostBack)
        {
            MakeGridViewPrinterFriendly(grddata);
        }
}
2
Rajpurohit

Ich weiß, dass dies alt ist, aber hier ist eine Interpretation der Antwort von MikeTeeVee für eine Standard-Rasteransicht:

aspx Seite:

<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;
        }

    }
1
Jonathan Harris

Sie können es auch mit jQuery hinzufügen. Dies vermeidet das Problem mit TableRowSection.TableHeader, das auf PostBack abgelegt wird.

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

0
Michael