Gridview - anzeigen Header auf leere Datenquelle

stimmen
73

In C # Wie kann ich immer noch die Header eines Gridview, auch mit der Datenquelle leer ist.

Ich bin nicht automatisch zu erzeugen, die Spalten, da sie alle sind vordefiniert.

Derzeit, was ich tue, ist die folgende.

Holen Sie sich ein Datatable zurück von einer gespeicherten Prozedur, legen Sie dann die Datasource des Gridview, und dann rufen Sie DataBind ().

Das funktioniert gut, wenn ich Daten haben, aber wenn keine Zeilen zurückgegeben werden, dann bekomme ich nur eine leere Stelle, wo das Gitter sein sollte.

Edit: Vielen Dank an Alle für die .NET-4+ Eigenschaft. Ich habe diese zurück in den .NET 3,5 Tage. Das ist viel einfacher jetzt. :)

Veröffentlicht am 09/12/2008 um 22:52
quelle vom benutzer
In anderen Sprachen...                            


16 antworten

stimmen
119

ASP.Net 4.0 hinzugefügt , um die Booleschen ShowHeaderWhenEmptyEigenschaft.

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>

Hinweis: die Header nicht, es sei denn DataBind erscheint () mit etwas anderes als null bezeichnet wird.

GridView1.DataSource = New List(Of String)
GridView1.DataBind()
Beantwortet am 17/02/2011 um 20:13
quelle vom benutzer

stimmen
30

Nachdem dieses Posting habe ich mit einer Art und Weise kommen, das funktioniert. Allerdings glaube ich nicht, es ist der beste Weg, dies zu umgehen. Irgendwelche Vorschläge auf eine bessere?

//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;
}
Beantwortet am 09/12/2008 um 22:59
quelle vom benutzer

stimmen
5

Ich arbeitete gerade durch dieses Problem, und keine dieser Lösungen für mich funktionieren würde. Ich konnte nicht die Verwendung EmptyDataTemplateEigenschaft , weil ich meine Erstellung GridViewdynamisch mit benutzerdefinierten Feldern , die Filter in den Headern liefern. Ich konnte nicht das Beispiel verwenden almny geschrieben , weil ich bin mit ObjectDataSources statt DataSetoder DataTable. Allerdings fand ich diese Antwort auf eine andere Frage Stackoverflow geschrieben, die verbindet diese elegante Lösung , die ich war in der Lage Arbeit für meine besondere Situation zu machen. Es geht um die zwingende CreateChildControlsMethode der GridViewdie gleiche Kopfzeile zu erstellen , die realen Daten hätten , wäre es gewesen , erstellt wurde. Ich dachte , es lohnt sich Posting hier, wo es wahrscheinlich von anderen Menschen in einer ähnlichen fix gefunden werden.

Beantwortet am 14/07/2009 um 22:05
quelle vom benutzer

stimmen
3

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

showheaderwhenEmpty Eigentum

Beantwortet am 20/12/2012 um 12:21
quelle vom benutzer

stimmen
3

Wenn Sie mit ASP.NET 3.5 und niedriger arbeiten, und Ihr Problem ist relativ einfach wie meine, können Sie nur eine Null-Zeile aus der SQL-Abfrage zurück.

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

Diese Lösung erfordert kein C # -Code oder ASP.NET-Code

  1. Stellen Sie sicher, dass die Null-Spalten in der entsprechenden Namen werfen, sonst wird es nicht funktionieren.
  2. Else-Block muss enthalten sein, welche die gleiche Abfrage wie in if not exists (query part)
  3. In meinem Fall, wenn ich verwende @RepID statt 10, die mit einer Dropdownlist-Box außerhalb gridview abgebildet wird.

Jedes Mal, wenn ich die Drop herunterschalten einen anderen rep auszuwählen, wird Gridview aktualisiert. Wenn kein Datensatz gefunden wird, zeigt es eine Null-Reihe.

Beantwortet am 10/07/2012 um 16:28
quelle vom benutzer

stimmen
2

Sie können Header Eigenschaft Setup verwenden, um den Kopf programmatisch oder Listview verwenden Sie stattdessen, wenn Sie .NET 3.5 verwenden.

Ich persönlich ziehe Listview über Gridview und Details wenn möglich, es gibt Ihnen mehr Kontrolle über Ihre html.

Beantwortet am 09/12/2008 um 23:07
quelle vom benutzer

stimmen
1

Sie können die ShowHeadersWhenNoRecords Eigenschaft des ownertableview auf true gesetzt. aspx:

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

Auch wenn die Datenquelle für das Gridview null ist (wenn keine Datensätze) können Sie einstellen es versuchen, wie unten dargestellt: c #:

  if (GridView1.DataSource == null)  
  {  
        GridView1.DataSource = new string[] { };  
  } 
  GridView1.DataBind();
Beantwortet am 29/06/2016 um 10:24
quelle vom benutzer

stimmen
1

Juste ShowHeaderWhenEmpty Eigenschaft hinzufügen und es auf true gesetzt

Diese Lösung funktioniert für mich

Beantwortet am 27/02/2015 um 15:23
quelle vom benutzer

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

Dies ist ein einfaches Beispiel für Gridview mit EmptyDataText und ShowHeaderWhenEmpty

Beantwortet am 06/09/2013 um 09:31
quelle vom benutzer

stimmen
1

Ich fand eine sehr einfache Lösung für das Problem. Ich habe einfach zwei Gridviews erstellt. Die erste Gridview genannt eine Datasource mit einer Abfrage, die keine Zeilen zurückgegeben wurde entwickelt. Es enthielt einfach die folgenden Schritte aus:

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

Dann habe ich ein Div mit den folgenden Eigenschaften und lege ich ein Gridview in der es mit Showheader = „false“, so dass die obere Reihe die gleiche Größe wie alle anderen Reihen ist.

<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>
Beantwortet am 13/06/2012 um 18:53
quelle vom benutzer

stimmen
1

Fügen Sie diese Eigenschaft auf Ihre Grid-Ansicht: ShowHeaderWhenEmpty = „True“ es könnte helfen, überprüfen

Beantwortet am 18/04/2012 um 14:25
quelle vom benutzer

stimmen
0

Ich war mit asp SQLDataSource. Er arbeitete für mich, wenn ich die CancelSelectOnNullParameter auf false gesetzt, wie unten:

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

Beantwortet am 24/01/2018 um 17:32
quelle vom benutzer

stimmen
-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/
Beantwortet am 08/07/2015 um 08:47
quelle vom benutzer

stimmen
-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();  
Beantwortet am 08/07/2015 um 08:43
quelle vom benutzer

stimmen
-1

Sie können verwendet werden, EmptyDataTextwie unten dargestellt:

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

Es zeigt nicht, Header, es macht Ihre Nachricht „No entries found.“ stattdessen.

Beantwortet am 21/09/2012 um 18:40
quelle vom benutzer

stimmen
-3

Verwenden Sie ein Emptydatatemplate wie unten. Wenn Ihre Datasource keine Datensätze haben, werden Sie Ihre Raster mit Headern und den wörtlichen Text oder HTML sehen, die innerhalb der Emptydatatemplate-Tags ist.

<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>
Beantwortet am 09/12/2008 um 23:34
quelle vom benutzer

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