Wie erhalte ich das GridView
Steuerelement zum Rendern der <thead>
<tbody>
Tags? Ich weiß , .UseAccessibleHeaders
macht es ausdrückte <th>
statt <td>
, aber ich kann nicht das bekommen <thead>
scheinen.
Wie erhalte ich das GridView
Steuerelement zum Rendern der <thead>
<tbody>
Tags? Ich weiß , .UseAccessibleHeaders
macht es ausdrückte <th>
statt <td>
, aber ich kann nicht das bekommen <thead>
scheinen.
Antworten:
Dies sollte es tun:
gv.HeaderRow.TableSection = TableRowSection.TableHeader;
HeaderRow
Eigenschaft bleibt bestehen, null
bis die GridView
Daten gebunden wurden. Warten Sie daher, bis die Datenbindung erfolgt ist, bevor Sie die obige Codezeile ausführen.
thead
ist die Verwendung in jQuery. Nach dem Rendern des Headers tbody
scheint der jedoch nicht verfügbar zu sein. Was kann in meinem Fall fehlen?
Ich benutze dies für den OnRowDataBound
Fall:
protected void GridViewResults_OnRowDataBound(object sender, GridViewRowEventArgs e) {
if (e.Row.RowType == DataControlRowType.Header) {
e.Row.TableSection = TableRowSection.TableHeader;
}
}
GridView
innerhalb eines befindet UpdatePanel
und ein asynchrones Postback durch ein anderes Steuerelement verursacht wird, wird das OnRowDataBound
Ereignis nicht ausgelöst , sodass der Code in dieser Antwort nicht ausgeführt wird, was dazu führt, dass das GridView
Rendern ohne <thead>
Tags wiederhergestellt wird ... seufz . Um diesen Fall anzugehen, verschieben Sie den Code aus der akzeptierten Antwort in den PreRender
Ereignishandler von gridView (ähnlich wie in der Antwort von ASalvo vorgeschlagen ).
Der Code in der Antwort muss weiter Page_Load
oder weitergehen GridView_PreRender
. Ich habe es in eine Methode eingefügt, die nach aufgerufen wurde Page_Load
und eine bekam NullReferenceException
.
DataBound
Ereignis einfügen. grid.DataBound += (s, e) => { grid.HeaderRow.TableSection = TableRowSection.TableHeader; };
Ich benutze dazu den folgenden Code:
Die if
Aussagen, die ich hinzugefügt habe, sind wichtig.
Andernfalls (abhängig davon, wie Sie Ihr Raster rendern) werden Ausnahmen ausgelöst wie:
Die Tabelle muss Zeilenabschnitte in der Reihenfolge von Kopf-, Kopf- und Fußzeile 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 this
Objekt ist mein GridView.
Ich habe das Asp.net GridView tatsächlich überschrieben, um mein eigenes benutzerdefiniertes Steuerelement zu erstellen. Sie können dies jedoch in Ihre aspx.cs- Seite einfügen und das 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.
Das funktioniert bei mir:
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.
Erstellen Sie eine Funktion und verwenden Sie diese Funktion in Ihrer PageLoad
Veranstaltung wie folgt:
Die Funktion ist:
private void MakeGridViewPrinterFriendly(GridView gridView) {
if (gridView.Rows.Count > 0) {
gridView.UseAccessibleHeader = true;
gridView.HeaderRow.TableSection = TableRowSection.TableHeader;
}
}
Die PageLoad
Veranstaltung ist:
protected void Page_Load(object sender, EventArgs e) {
if (!IsPostBack)
{
MakeGridViewPrinterFriendly(grddata);
}
}
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;
}
}