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

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. 🙂

    ASP.Net 4.0 agregó la propiedad booleana ShowHeaderWhenEmpty .

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


           

    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() 

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

    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 StackOverflow, 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.

    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.

    set "

    showheaderwhenEmpty Property

    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.

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

    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:

                

    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.

     
      

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

    Juste agrega la propiedad ShowHeaderWhenEmpty y la establece en true

    Esta solución funciona para mí

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

       

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

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

    Puede usar EmptyDataText como se muestra a continuación:

      

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

            No Record Available  in CS Page gvEmployee.DataSource = dt; gvEmployee.DataBind(); 
             No Record Available  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/ 

    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 tags EmptyDataTemplate.

       No Results Found     ...