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

votos
73

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. :)

Publicado el 09/12/2008 a las 22:52
fuente por usuario
En otros idiomas...                            


16 respuestas

votos
119

ASP.Net 4.0 añadió el booleano ShowHeaderWhenEmptypropiedad.

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: las cabeceras no aparecerán a menos DataBind () se llama con algo que no sea nulo.

GridView1.DataSource = New List(Of String)
GridView1.DataBind()
Respondida el 17/02/2011 a las 20:13
fuente por usuario

votos
30

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;
}
Respondida el 09/12/2008 a las 22:59
fuente por usuario

votos
5

Estaba trabajando en este problema, y ​​ninguna de estas soluciones funcionaría para mí. No pude usar la EmptyDataTemplatepropiedad porque estaba creando mi GridViewdinámicamente con campos personalizados que proporcionan filtros en los encabezados. No pude usar el ejemplo publicado por almny porque estoy usando ObjectDataSources en lugar de DataSeto DataTable. Sin embargo, encontré esta respuesta publicada en otra pregunta de StackOverflow, que vincula a esta elegante solución que pude hacer que funcione para mi situación particular. Implica anular el CreateChildControlsmétodo de GridViewcrear 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.

Respondida el 14/07/2009 a las 22:05
fuente por usuario

votos
3

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

showheaderwhenEmpty Propiedad

Respondida el 20/12/2012 a las 12:21
fuente por usuario

votos
3

Si está trabajando con ASP.NET 3.5 y menor, y su problema es relativamente sencillo como el mío, sólo 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 código de ASP.NET

  1. Asegúrese de que lances las columnas nulos en nombres adecuados, de lo contrario no funcionará.
  2. bloque else debe ser incluido, que es la misma consulta como en if not exists (query part)
  3. En mi caso si estoy usando @RepID en lugar de 10. Lo que está asignado a una caja de DropDownList fuera gridview.

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

Respondida el 10/07/2012 a las 16:28
fuente por usuario

votos
2

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.

Respondida el 09/12/2008 a las 23:07
fuente por usuario

votos
1

Puede establecer la propiedad ShowHeadersWhenNoRecords del ownertableview true. aspx:

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

También cuando la fuente de datos para el GridView es nulo (cuando no hay registros), se puede tratar de establecerla como se muestra a continuación: C #:

  if (GridView1.DataSource == null)  
  {  
        GridView1.DataSource = new string[] { };  
  } 
  GridView1.DataBind();
Respondida el 29/06/2016 a las 07:24
fuente por usuario

votos
1

Juste añadir una propiedad ShowHeaderWhenEmpty y configurarlo en cierto

Esta solución funciona para mí

Respondida el 27/02/2015 a las 15:23
fuente por usuario

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

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

Respondida el 06/09/2013 a las 09:31
fuente por usuario

votos
1

He encontrado una solución muy simple para el problema. Simplemente creado dos GridViews. La primera GridView llama un origen de datos con una consulta que fue diseñado para devolver ninguna fila. 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>

Entonces creé un div con las siguientes características y coloco un GridView dentro de ella con ShowHeader = "false" para que la fila superior es del 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>
Respondida el 13/06/2012 a las 18:53
fuente por usuario

votos
1

Añadir esta propiedad a su red de visión: ShowHeaderWhenEmpty = "true" que podría ayudar simplemente comprobar

Respondida el 18/04/2012 a las 14:25
fuente por usuario

votos
0

Yo estaba usando SQLDataSource asp. Se trabajó para mí cuando me puse la CancelSelectOnNullParameter en false de la siguiente manera:

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

Respondida el 24/01/2018 a las 14:32
fuente por usuario

votos
-1
    <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/
Respondida el 08/07/2015 a las 08:47
fuente por usuario

votos
-1
<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();  
Respondida el 08/07/2015 a las 08:43
fuente por usuario

votos
-1

Es posible utilizar EmptyDataTextcomo se muestra a continuación:

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

No muestra las cabeceras, que hace que el mensaje "No se han encontrado entradas". en lugar.

Respondida el 21/09/2012 a las 18:40
fuente por usuario

votos
-3

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>
Respondida el 09/12/2008 a las 23:34
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more