GridView: mostra le intestazioni sull’origine dati vuota

In C # come faccio a mostrare ancora le intestazioni di una griglia, anche se l’origine dati è vuota.

Non sto generando automaticamente le colonne poiché sono tutte predefinite.

Attualmente quello che sto facendo è il seguente.

Ottenere un DataTable indietro da una stored procedure, quindi impostare il DataSource di gridview e quindi chiamare DataBind ().

Funziona bene quando ho dei dati, ma quando non viene restituita alcuna riga, ottengo solo un punto vuoto dove dovrebbe essere la griglia.

Modifica: Grazie a tutti per la proprietà .NET 4+. Ho chiesto questo in .NET 3.5 giorni. Questo è molto più facile ora. 🙂

ASP.Net 4.0 ha aggiunto la proprietà booleana ShowHeaderWhenEmpty .

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


       

Nota: le intestazioni non verranno visualizzate a meno che DataBind () non venga chiamato con null.

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

Dopo aver postato questo, ho trovato un modo che funziona. Tuttavia, non ritengo che sia il modo migliore per gestirlo. Qualche suggerimento su uno migliore?

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

Stavo solo lavorando a questo problema e nessuna di queste soluzioni avrebbe funzionato per me. Non ho potuto utilizzare la proprietà EmptyDataTemplate perché stavo creando il mio GridView dynamicmente con campi personalizzati che forniscono filtri nelle intestazioni. Non ho potuto usare l’esempio almny pubblicato perché sto usando ObjectDataSource s invece di DataSet o DataTable . Tuttavia, ho trovato questa risposta pubblicata su un’altra domanda StackOverflow, che collega a questa soluzione elegante che sono stato in grado di lavorare per la mia situazione particolare. Implica l’override del metodo CreateChildControls di GridView per creare la stessa riga di intestazione che sarebbe stata creata se esistessero dati reali. Ho pensato che vale la pena postare qui, dove è probabile che venga trovato da altre persone in una soluzione simile.

Se si lavora con ASP.NET 3.5 e versioni precedenti e il problema è relativamente semplice come il mio, è ansible restituire una riga null dalla query 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 

Questa soluzione non richiede alcun codice C # o codice ASP.NET

  1. Assicurati di trasmettere le colonne Null in nomi appropriati, altrimenti non funzionerà.
  2. È necessario includere il blocco Else, che è la stessa query di in if not exists (query part)
  3. Nel mio caso se sto usando @RepID invece di 10. Che è mappato a una casella DropDownList al di fuori di gridview.

Ogni volta che cambio il menu a tendina per selezionare un rappresentante diverso, Gridview viene aggiornato. Se non viene trovato alcun record, mostra una riga nulla.

set "

showheaderwhenEmpty Property

È ansible utilizzare la proprietà HeaderTemplate per impostare la testa in modo programmatico o utilizzare ListView invece se si utilizza .NET 3.5.

Personalmente, preferisco ListView su GridView e DetailsView se ansible, ti dà più controllo sul tuo html.

Aggiungi questa proprietà alla tua griglia: ShowHeaderWhenEmpty = “True” potrebbe aiutarti a controllare

Ho trovato una soluzione molto semplice al problema. Ho semplicemente creato due GridView. Il primo GridView chiamato un DataSource con una query che è stato progettato per non restituire righe. Semplicemente conteneva quanto segue:

            

Poi ho creato un div con le seguenti caratteristiche e inserisco una GridView al suo interno con ShowHeader = “false” in modo che la riga superiore abbia le stesse dimensioni di tutte le altre righe.

 
  

Questo è un esempio di base di Gridview con EmptyDataText e ShowHeaderWhenEmpty

Juste aggiunge la proprietà ShowHeaderWhenEmpty e lo imposta su true

Questa soluzione funziona per me

È ansible impostare la proprietà ShowHeadersWhenNoRecords di ownertableview su true. aspx:

   

Anche quando l’origine dati per GridView è nullo (quando non ci sono record), puoi provare a impostarlo come mostrato di seguito: c #:

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

Stavo usando asp sqlDataSource. Ha funzionato per me quando ho impostato CancelSelectOnNullParameter su false come di seguito:

È ansible utilizzare EmptyDataText come mostrato di seguito:

  

Non mostra intestazioni, visualizza il messaggio “Nessuna voce trovata”. anziché.

        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/ 

Utilizzare un EmptyDataTemplate come di seguito. Quando il tuo DataSource non ha record, vedrai la tua griglia con le intestazioni e il testo letterale o HTML che si trova all’interno dei tag EmptyDataTemplate.

   No Results Found     ...