¿Cómo puedo hacer que Gridview genere THEAD?

¿Cómo obtengo el control GridView para representar las

? Sé que .UseAccessibleHeaders hace que se ponga

lugar de

, pero no consigo que

.

Esto debería hacerlo:

 gv.HeaderRow.TableSection = TableRowSection.TableHeader; 

Yo uso esto en el evento OnRowDataBound :

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

El código de la respuesta debe ir en Page_Load o GridView_PreRender . Lo puse en un método que fue llamado después de Page_Load y obtuve una NullReferenceException .

Yo uso el siguiente código para hacer esto:

Las declaraciones if que agregué son importantes.

De lo contrario (dependiendo de cómo renderices tu grilla) lanzarás excepciones como:

La tabla debe contener secciones de fila en orden de encabezado, cuerpo y luego pie de página.

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

El objeto de this es mi GridView.

En realidad, anulé el GridView de Asp.net para crear mi propio control personalizado, pero podría pegarlo en su página aspx.cs y hacer referencia al GridView por nombre en lugar de usar el enfoque de vista de cuadrícula personalizada.

FYI: No he probado la lógica del pie de página, pero sí sé que esto funciona para los encabezados.

Esto funciona para mí:

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

Esto fue probado en VS2010.

Cree una función y use esa función en su evento PageLoad como esto:

La función es:

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

El evento PageLoad es:

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

Sé que esto es antiguo, pero, aquí hay una interpretación de la respuesta de MikeTeeVee, para una vista de cuadrícula estándar:

página 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; } }