vacio net muestra mostrar llenar lista fijos fijar encabezados encabezado datos con asp asp.net gridview header

asp.net - net - GridView-Mostrar encabezados en una fuente de datos vacía



mostrar gridview vacio asp net (16)

En C #, ¿cómo sigo mostrando los encabezados de una vista en cuadrícula, incluso con la fuente de datos vacía?

No estoy generando automáticamente las columnas ya que están predefinidas.

Actualmente, lo que estoy haciendo es lo siguiente.

Obtenga una DataTable de un procedimiento almacenado, luego configure DataSource de gridview y luego llame a DataBind ().

Esto funciona bien cuando tengo datos, pero cuando no se devuelven las filas, obtengo un lugar en blanco donde debería estar la cuadrícula.

Editar: Gracias a todos por la propiedad .NET 4+. Le pregunté esto en .NET 3.5 días. Esto es mucho más fácil ahora. :)


Agregue esta propiedad a su vista de cuadrícula: ShowHeaderWhenEmpty = "True" podría ayudar solo con verificar


Después de publicar esto, se me ocurrió una forma que funciona. Sin embargo, no creo que sea la mejor manera de manejar esto. ¿Alguna sugerencia sobre una mejor?

//Check to see if we get rows back, if we do just bind. if (dtFunding.Rows.Count != 0) { grdFunding.DataSource = dtFunding; grdFunding.DataBind(); } else { //Other wise add a emtpy "New Row" to the datatable and then hide it after binding. dtFunding.Rows.Add(dtFunding.NewRow()); grdFunding.DataSource = dtFunding; grdFunding.DataBind(); grdFunding.Rows[0].Visible = false; }


Encontré una solución muy simple al problema. Simplemente creé dos GridViews. El primer GridView llamó a un DataSource con una consulta que fue diseñada para no devolver filas. Simplemente contenía lo siguiente:

<Columns> <asp:TemplateField HeaderStyle-HorizontalAlign="Left"> <HeaderTemplate> <asp:Label ID="lbl0" etc.> </asp:Label> <asp:Label ID="lbl1" etc.> </asp:Label> </HeaderTemplate> </asp:TemplateField> </Columns>

Luego creé un div con las siguientes características y coloque un GridView dentro de él con ShowHeader = "false" para que la fila superior tenga el mismo tamaño que todas las otras filas.

<div style="overflow: auto; height: 29.5em; width: 100%"> <asp:GridView ID="Rollup" runat="server" ShowHeader="false" DataSourceID="ObjectDataSource"> <Columns> <asp:TemplateField HeaderStyle-HorizontalAlign="Left"> <ItemTemplate> <asp:Label ID="lbl0" etc.> </asp:Label> <asp:Label ID="lbl1" etc.> </asp:Label> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> </div>


Estaba trabajando en este problema, y ​​ninguna de estas soluciones funcionaría para mí. No pude usar la propiedad EmptyDataTemplate porque estaba creando mi GridView dinámicamente con campos personalizados que proporcionan filtros en los encabezados. No pude usar el ejemplo publicado por almny porque estoy usando ObjectDataSource s en lugar de DataSet o DataTable . Sin embargo, encontré esta respuesta publicada en otra pregunta de , que vincula a esta elegante solución que pude hacer que funcione para mi situación particular. Implica anular el método CreateChildControls de GridView para crear la misma fila de encabezado que se habría creado si hubiera datos reales. Pensé que valía la pena publicar aquí, donde es probable que otras personas lo encuentren en una solución similar.


Estaba usando asp sqlDataSource. Me funcionó cuando configuré CancelSelectOnNullParameter en falso de la siguiente manera:

<asp:SqlDataSource ID="SqlData1" runat="server" ConnectionString="" SelectCommand="myStoredProcedure" SelectCommandType="StoredProcedure" CancelSelectOnNullParameter="False"> </asp:SqlDataSource>


Puede establecer la propiedad ShowHeadersWhenNoRecords de ownertableview en verdadero. aspx:

<asp:GridView ID="RadGrid2" runat="server" > <MasterTableView ShowHeadersWhenNoRecords="true" >

Además, cuando el origen de datos para GridView es nulo (cuando no hay registros), puede intentar configurarlo como se muestra a continuación: c #:

if (GridView1.DataSource == null) { GridView1.DataSource = new string[] { }; } GridView1.DataBind();


Puede usar EmptyDataText como se muestra a continuación:

<asp:GridView ID="_gridView" RunAt="server" AutoGenerateColumns="false" EmptyDataText="No entries found.">

No muestra encabezados, muestra su mensaje "No se encontraron entradas". en lugar.


Puede usar la propiedad HeaderTemplate para configurar el cabezal programáticamente o usar ListView en su lugar si está utilizando .NET 3.5.

Personalmente, prefiero ListView sobre GridView y DetailsView si es posible, te da más control sobre tu html.


Si está trabajando con ASP.NET 3.5 y versiones anteriores, y su problema es relativamente simple como el mío, puede devolver una fila nula desde la consulta SQL.

if not exists (select RepId, startdate,enddate from RepTable where RepID= 10) select null RepID,null StartDate,null EndDate else select RepId, startdate,enddate from RepTable where RepID= 10

Esta solución no requiere ningún código C # ni código ASP.NET

  1. Asegúrese de convertir las columnas nulas en nombres apropiados; de lo contrario, no funcionará.
  2. Else bloque debe incluirse, que es la misma consulta que en if not exists (query part)
  3. En mi caso, si estoy usando @RepID en lugar de 10. Que está mapeado a un cuadro DropDownList fuera de gridview.

Cada vez que cambio el menú desplegable para seleccionar un representante diferente, se actualiza Gridview. Si no se encuentra ningún registro, muestra una fila nula.


Use EmptyDataTemplate como a continuación. Cuando su DataSource no tiene registros, verá su cuadrícula con encabezados y el texto literal o HTML que está dentro de las etiquetas EmptyDataTemplate.

<asp:GridView ID="gvResults" AutoGenerateColumns="False" HeaderStyle-CssClass="tableheader" runat="server"> <EmptyDataTemplate> <asp:Label ID="lblEmptySearch" runat="server">No Results Found</asp:Label> </EmptyDataTemplate> <Columns> <asp:BoundField DataField="ItemId" HeaderText="ID" /> <asp:BoundField DataField="Description" HeaderText="Description" /> ... </Columns> </asp:GridView>


set "<asp:GridView AutoGenerateColumns="false" ShowHeaderWhenEmpty="true""

showheaderwhenEmpty Property


ASP.Net 4.0 agregó la propiedad booleana ShowHeaderWhenEmpty .

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.showheaderwhenempty.aspx

<asp:GridView runat="server" ID="GridView1" ShowHeaderWhenEmpty="true" AutoGenerateColumns="false"> <Columns> <asp:BoundField HeaderText="First Name" DataField="FirstName" /> <asp:BoundField HeaderText="Last Name" DataField="LastName" /> </Columns> </asp:GridView>

Nota: los encabezados no aparecerán a menos que se llame a DataBind () con algo que no sea nulo.

GridView1.DataSource = New List(Of String) GridView1.DataBind()


Juste agrega la propiedad ShowHeaderWhenEmpty y la establece en true

Esta solución funciona para mí


<asp:GridView ID="grdGroup" EmptyDataText="No Records Found" ShowHeaderWhenEmpty="True" runat="server">

Este es un ejemplo básico de Gridview con EmptyDataText y ShowHeaderWhenEmpty


<asp:GridView ID="gvEmployee" runat="server" AutoGenerateColumns="False" ShowHeaderWhenEmpty=”True”> <Columns> <asp:BoundField DataField="Id" HeaderText="Id" /> <asp:BoundField DataField="Name" HeaderText="Name" /> <asp:BoundField DataField="Designation" HeaderText="Designation" /> <asp:BoundField DataField="Salary" HeaderText="Salary" /> </Columns> <EmptyDataTemplate>No Record Available</EmptyDataTemplate> </asp:GridView> in CS Page gvEmployee.DataSource = dt; gvEmployee.DataBind(); Help.. see that link: http://www.c-sharpcorner.com/UploadFile/d0e913/how-to-display-the-empty-gridview-in-case-of-no-records-in-d/


<asp:GridView ID="gvEmployee" runat="server" AutoGenerateColumns="False" ShowHeaderWhenEmpty=”True”> <Columns> <asp:BoundField DataField="Id" HeaderText="Id" /> <asp:BoundField DataField="Name" HeaderText="Name" /> <asp:BoundField DataField="Designation" HeaderText="Designation" /> <asp:BoundField DataField="Salary" HeaderText="Salary" /> </Columns> <EmptyDataTemplate>No Record Available</EmptyDataTemplate> </asp:GridView> in CS Page gvEmployee.DataSource = dt; gvEmployee.DataBind();