Come ottengo il GridView
controllo per eseguire il rendering dei <thead>
<tbody>
tag? So .UseAccessibleHeaders
che lo fa mettere al <th>
posto di <td>
, ma non riesco a farlo <thead>
apparire.
Come ottengo il GridView
controllo per eseguire il rendering dei <thead>
<tbody>
tag? So .UseAccessibleHeaders
che lo fa mettere al <th>
posto di <td>
, ma non riesco a farlo <thead>
apparire.
Risposte:
Questo dovrebbe farlo:
gv.HeaderRow.TableSection = TableRowSection.TableHeader;
HeaderRow
proprietà rimarrà null
fino a quando non GridView
è stato associato ai dati, quindi assicurati di attendere fino a quando non si è verificato l'associazione dei dati prima di eseguire la riga di codice precedente.
thead
è usarlo in jQuery. Tuttavia, dopo il rendering dell'intestazione, il tbody
non sembra essere disponibile. Cosa potrebbe mancare nel mio caso?
Lo uso in OnRowDataBound
caso:
protected void GridViewResults_OnRowDataBound(object sender, GridViewRowEventArgs e) {
if (e.Row.RowType == DataControlRowType.Header) {
e.Row.TableSection = TableRowSection.TableHeader;
}
}
GridView
è all'interno di un UpdatePanel
e un postback asincrono è causato da qualche altro controllo, l' OnRowDataBound
evento non verrà generato, quindi il codice in questa risposta non verrà eseguito, con il risultato di GridView
tornare al rendering senza <thead>
tag ... sigh . Per indirizzare questo caso, sposta il codice dalla risposta accettata nel gestore di PreRender
eventi di gridView (proprio come suggerisce la risposta di ASalvo ).
Il codice nella risposta deve andare su Page_Load
o GridView_PreRender
. L'ho inserito in un metodo chiamato dopo Page_Load
e ho ottenuto un file NullReferenceException
.
DataBound
event. grid.DataBound += (s, e) => { grid.HeaderRow.TableSection = TableRowSection.TableHeader; };
Uso il seguente codice per farlo:
Le if
affermazioni che ho aggiunto sono importanti.
Altrimenti (a seconda di come renderizzi la tua griglia) genererai eccezioni come:
La tabella deve contenere sezioni di riga in ordine di intestazione, corpo e piè di pagina.
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);
}
L' this
oggetto è il mio GridView.
In realtà ho sovrascritto Asp.net GridView per creare il mio controllo personalizzato, ma puoi incollarlo nella tua pagina aspx.cs e fare riferimento a GridView per nome invece di utilizzare l'approccio personalizzato-gridview.
FYI: non ho testato la logica del piè di pagina, ma so che funziona per le intestazioni.
Questo funziona per me:
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;
}
}
Questo è stato provato in VS2010.
Crea una funzione e usa quella funzione nel tuo PageLoad
evento in questo modo:
La funzione è:
private void MakeGridViewPrinterFriendly(GridView gridView) {
if (gridView.Rows.Count > 0) {
gridView.UseAccessibleHeader = true;
gridView.HeaderRow.TableSection = TableRowSection.TableHeader;
}
}
L' PageLoad
evento è:
protected void Page_Load(object sender, EventArgs e) {
if (!IsPostBack)
{
MakeGridViewPrinterFriendly(grddata);
}
}
So che questo è vecchio, ma ecco un'interpretazione della risposta di MikeTeeVee, per una visualizzazione griglia standard:
pagina 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;
}
}