Comment puis-je obtenir Gridview pour rendre THEAD?

Comment puis-je obtenir le contrôle GridView pour afficher les

? Je sais que .UseAccessibleHeaders fait mettre

au lieu de

, mais je ne peux pas faire apparaître le

.

Cela devrait le faire:

 gv.HeaderRow.TableSection = TableRowSection.TableHeader; 

Je l’utilise dans l’événement OnRowDataBound :

 if (e.Row.RowType == DataControlRowType.Header) e.Row.TableSection = TableRowSection.TableHeader; 

Le code dans la réponse doit aller sur Page_Load ou GridView_PreRender . Je l’ai mis dans une méthode qui a été appelée après Page_Load et qui a obtenu une NullReferenceException .

J’utilise le code suivant pour faire ceci:

Les déclarations que j’ai ajoutées sont importantes.

Sinon (en fonction de la façon dont vous rendez votre grid), vous allez lancer des exceptions comme:

La table doit contenir des sections de ligne dans l’ordre de l’en-tête, du corps et du pied de page.

 protected override void OnPreRender(EventArgs e) { if ( (this.ShowHeader == true && this.Rows.Count > 0) || (this.ShowHeaderWhenEmpty == true)) { //Force GridView to use  instead of  - 11/03/2013 - MCR. this.HeaderRow.TableSection = TableRowSection.TableHeader; } if (this.ShowFooter == true && this.Rows.Count > 0) { //Force GridView to use  instead of  - 11/03/2013 - MCR. this.FooterRow.TableSection = TableRowSection.TableFooter; } base.OnPreRender(e); } 

this object est mon GridView.

J’ai réellement remplacé Asp.net GridView pour créer mon propre contrôle personnalisé, mais vous pouvez le coller dans votre page aspx.cs et référencer le GridView par nom au lieu d’utiliser l’approche de grid personnalisée.

FYI: Je n’ai pas testé la logique du pied de page, mais je sais que cela fonctionne pour les en-têtes.

Cela fonctionne pour moi:

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

Cela a été essayé dans VS2010.

Créez une fonction et utilisez cette fonction dans votre événement PageLoad comme ceci:

La fonction est:

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

L’événement PageLoad est:

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

Je sais que c’est vieux, mais voici une interprétation de la réponse de MikeTeeVee, pour un quadrillage standard:

page aspx:

  

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  instead of  - 11/03/2013 - MCR. gv.HeaderRow.TableSection = TableRowSection.TableHeader; } if (gv.ShowFooter == true && gv.Rows.Count > 0) { //Force GridView to use  instead of  - 11/03/2013 - MCR. gv.FooterRow.TableSection = TableRowSection.TableFooter; } }