¿Cómo obtengo el control GridView
para representar las etiquetas <thead>
<tbody>
? Sé que .UseAccessibleHeaders
lo pone <th>
en lugar de <td>
, pero no puedo obtener el <thead>
para que aparezca.¿Cómo hago que Gridview renderice THEAD?
Respuesta
Esto debe hacerlo:
gv.HeaderRow.TableSection = TableRowSection.TableHeader;
La propiedad 'HeaderRow' será' null' hasta que 'GridView' haya sido enlazado a los datos, así que asegúrese de esperar hasta que se haya producido el enlace de datos antes de ejecutar la línea de código anterior. – bdukes
Como comenta a continuación, con ASP.NET 4.5 al menos después de que el enlace no sea lo suficientemente tarde; sin embargo, funciona en OnPreRender. – philw
Tengo una vista en cuadrícula con subcabeceras personalizadas agregadas. Cada uno de estos subcabecera muestra datos de la fuente de datos. La razón por la que quería renderizar 'thead' es usarlo en jQuery. Sin embargo, después de mostrar el encabezado, el 'tbody' no parece estar disponible. ¿Qué puede faltar en mi caso? – bonCodigo
El código en la respuesta tiene que ir en Page_Load
o GridView_PreRender
. Lo puse en un método que se llamó después de Page_Load
y obtuve un NullReferenceException
.
También puede colocar el evento 'DataBound'. 'grid.DataBound + = (s, e) => {grid.HeaderRow.TableSection = TableRowSection.TableHeader; }; ' – BrunoLM
No sé si esto es diferente en .NET 4.5 ahora ... pero estoy obteniendo que HeaderRow sea nulo en los controladores de eventos _DataBound y _PreRender. Esto podría estar relacionado con el hecho de que estoy utilizando la nueva función "Encuadernación de modelo" de ASP.NET Web Forms en gridView. – ClearCloud8
Cree una función y el uso de esa función en su caso PageLoad
así:
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);
}
}
utilizo el siguiente código para hacer esto:
ElLas declaracionesque agregué son importantes.
De lo contrario (en función de cómo se procesa la rejilla) que va a lanzar excepciones como:
La tabla debe contener secciones fila con el fin de cabecera, 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 <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);
}
El objeto this
es mi GridView.
De hecho, me pesaban más que las Asp.net GridView para hacer mi propio control personalizado, pero se puede pegar esto en sus aspx.cs página y hacer referencia al GridView por su nombre en lugar de utilizar el enfoque a medida gridview.
FYI: No he probado la lógica del pie de página, pero 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 juzgado en VS2010.
yo uso esto en OnRowDataBound
evento:
if (e.Row.RowType == DataControlRowType.Header)
e.Row.TableSection = TableRowSection.TableHeader;
Esta es la única solución que funcionó para mí. ¿Quién diseñó estos terribles controles? – EKW
Inserté su código en el evento OnRowCreated y lo puse a funcionar correctamente. – yougotiger
Sé que esto es viejo, pero, he aquí una interpretación de la respuesta de MikeTeeVee, para un gridview estándar:
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;
}
}
- 1. Renderice un xml a una vista
- 2. Diseño múltiple thead/tbody
- 3. C# create thead y tbody
- 4. Hacer que Firefox renderice el texto del lienzo de la misma manera que el texto CSS
- 5. ¿Cómo hago que wsimport genere constructores?
- 6. ¿Cómo hago que Pyflakes ignore una declaración?
- 7. Cámara Quaternion. ¿Cómo hago que gire correctamente?
- 8. ¿Cómo hago que wget se silencie correctamente?
- 9. ¿Cómo hago que MySQL devuelva UTF-8?
- 10. ¿Cómo hago que curl ignore el proxy?
- 11. Renderice varias vistas en una única solicitud
- 12. Cómo actualizar un GridView?
- 13. jqGrid obtener "th" y "thead" usando jQuery
- 14. filas que muestran múltiples veces en GridView
- 15. Cómo enlazar DropDownList en Gridview con datos NOT desde gridview
- 16. Cómo deshacerse de div vacío que contiene un GridView
- 17. Importancia de XHTML thead, tfoot y tbody
- 18. ASP.NET ListView - Renderizar etiquetas THEAD/TBODY
- 19. ¿Cómo crear thead y tbody en ASP.NET Table?
- 20. Fix thead en la página de desplazamiento
- 21. ASP.NET 2.0 - DataGrid con tbody/thead
- 22. Gridview wordwrap
- 23. ¿Cómo hago una GUI?
- 24. Cómo hago dalvik aislado
- 25. ¿Cómo hago ANT verbose?
- 26. Cómo pasar GridView como ConverterParameter
- 27. Cómo congelar el encabezado GridView?
- 28. Gridview desaparecer?
- 29. Renderice la superficie de cairo directamente a la textura OpenGL
- 30. Nunca renderice un diseño en respuesta a xhrs
FYI: UseAccessibleHeader es "verdadero" de forma predeterminada, por lo que no es necesario configurarlo. http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.useaccessibleheader.aspx – MikeTeeVee