GridView-Mostrar encabezados en una fuente de datos vacía
En C# cómo sigo mostrando las cabeceras de un gridview, incluso con la fuente de datos vacía.
No estoy generando automáticamente las columnas, ya que todas están predefinidas.
Actualmente lo que estoy haciendo es lo siguiente.
Obtiene una DataTable de un procedimiento almacenado, luego establece la fuente de datos de gridview y luego llama a DataBind().
Esto funciona bien cuando tengo datos, pero cuando no se devuelven filas, solo obtengo un punto en blanco donde la cuadrícula debería ser.
Edición: Gracias a todos por la propiedad. NET 4+. Pregunté esto en el. NET 3.5 días. Esto es mucho más fácil ahora. :)
16 answers
ASP.Net 4.0 se ha añadido 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 null.
GridView1.DataSource = New List(Of String)
GridView1.DataBind()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-11 22:01:59
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;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-12-09 22:05:21
Yo estaba trabajando a través de 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 almny publicado porque estoy usando ObjectDataSource
s en lugar de DataSet
o DataTable
. Sin embargo, encontré esta respuesta publicada en otra pregunta de StackOverflow, que enlaza con esta elegante solución que pude hacer funcionar para mi situación particular. Implica sobreescribir el método CreateChildControls
del GridView
para crear la misma fila de encabezado que se habría creado si hubiera habido datos reales. Pensé que valía la pena publicarlo aquí, donde es probable que lo encuentren otras personas en una solución similar.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-22 20:02:23
Si está trabajando con ASP.NET 3.5 y anteriores, y su problema es relativamente simple como el mío, solo puede devolver una fila nula de 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 # o ASP.NET código
- Asegúrese de convertir las columnas null en los nombres apropiados, de lo contrario no funcionará.
- Se debe incluir el bloque Else que es la misma consulta que en
if not exists (query part)
- En mi caso si estoy usando @RepID en lugar de 10. Que se asigna a una Cuadro de lista desplegable fuera de gridview.
Cada vez que cambio el menú desplegable para seleccionar un representante diferente, Gridview se actualiza. Si no se encuentra ningún registro, muestra una fila nula.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-10 15:28:32
Set "<asp:GridView AutoGenerateColumns="false" ShowHeaderWhenEmpty="true""
showheaderwhenEmpty
Propiedad
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-20 11:39:07
Puede usar la propiedad HeaderTemplate para configurar el head programáticamente o usar ListView en su lugar si está utilizando.NET 3.5.
Personalmente, prefiero ListView sobre GridView y DetailsView si es posible, le da más control sobre su html.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-12-09 22:21:51
Agregue esta propiedad a su vista de cuadrícula: ShowHeaderWhenEmpty = " True" podría ayudar simplemente comprobar
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-18 13:25:42
Encontré una solución muy simple al problema. Simplemente creé dos GridViews. El primer GridView llamó a una fuente de datos 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 coloco un GridView dentro de él con ShowHeader="false" para que la fila superior tenga el mismo tamaño que todas las demás 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>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-13 17:53:30
<asp:GridView ID="grdGroup" EmptyDataText="No Records Found" ShowHeaderWhenEmpty="True" runat="server">
Este es un ejemplo básico de Gridview con EmptyDataText y ShowHeaderWhenEmpty
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-06 08:54:16
Simplemente agregue la propiedad ShowHeaderWhenEmpty y establézcala en true
Esta solución funciona para mí
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-27 15:23:48
Puede establecer la propiedad ShowHeadersWhenNoRecords de ownertableview en true. aspx:
<asp:GridView ID="RadGrid2" runat="server" >
<MasterTableView ShowHeadersWhenNoRecords="true" >
También cuando el datasource para GridView es null (cuando no hay registros), puede intentar configurarlo como se muestra a continuación: c#:
if (GridView1.DataSource == null)
{
GridView1.DataSource = new string[] { };
}
GridView1.DataBind();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-29 10:24:45
Estaba usando asp SqlDataSource. Funcionó para mí cuando configuré el CancelSelectOnNullParameter en false como se muestra a continuación:
<asp:SqlDataSource ID="SqlData1" runat="server" ConnectionString="" SelectCommand="myStoredProcedure" SelectCommandType="StoredProcedure" CancelSelectOnNullParameter="False"> </asp:SqlDataSource>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-24 17:32:27
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 han encontrado entradas."en su lugar.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-22 08:00:17
<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();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-08 08:43:44
<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/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-08 08:47:21
Utilice un EmptyDataTemplate como abajo. Cuando su fuente de datos 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>