Come ottengo il GridViewcontrollo per eseguire il rendering dei <thead> <tbody>tag? So .UseAccessibleHeadersche lo fa mettere al <th>posto di <td>, ma non riesco a farlo <thead>apparire.
Come ottengo il GridViewcontrollo per eseguire il rendering dei <thead> <tbody>tag? So .UseAccessibleHeadersche lo fa mettere al <th>posto di <td>, ma non riesco a farlo <thead>apparire.
Risposte:
Questo dovrebbe farlo:
gv.HeaderRow.TableSection = TableRowSection.TableHeader;
HeaderRowproprietà rimarrà nullfino 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 tbodynon sembra essere disponibile. Cosa potrebbe mancare nel mio caso?
Lo uso in OnRowDataBoundcaso:
protected void GridViewResults_OnRowDataBound(object sender, GridViewRowEventArgs e) {
if (e.Row.RowType == DataControlRowType.Header) {
e.Row.TableSection = TableRowSection.TableHeader;
}
}
GridViewè all'interno di un UpdatePanele un postback asincrono è causato da qualche altro controllo, l' OnRowDataBoundevento non verrà generato, quindi il codice in questa risposta non verrà eseguito, con il risultato di GridViewtornare al rendering senza <thead>tag ... sigh . Per indirizzare questo caso, sposta il codice dalla risposta accettata nel gestore di PreRendereventi di gridView (proprio come suggerisce la risposta di ASalvo ).
Il codice nella risposta deve andare su Page_Loado GridView_PreRender. L'ho inserito in un metodo chiamato dopo Page_Loade ho ottenuto un file NullReferenceException.
DataBoundevent. grid.DataBound += (s, e) => { grid.HeaderRow.TableSection = TableRowSection.TableHeader; };
Uso il seguente codice per farlo:
Le ifaffermazioni 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' thisoggetto è 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 PageLoadevento in questo modo:
La funzione è:
private void MakeGridViewPrinterFriendly(GridView gridView) {
if (gridView.Rows.Count > 0) {
gridView.UseAccessibleHeader = true;
gridView.HeaderRow.TableSection = TableRowSection.TableHeader;
}
}
L' PageLoadevento è:
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;
}
}