GridView - Pokaż nagłówki na pusty źródła danych

głosy
73

W języku C # jak mogę jeszcze pokazać nagłówki gridview, nawet ze źródłem danych jest pusta.

Nie jestem automatycznego generowania kolumn, jak wszystkie są predefiniowane.

Obecnie co robię jest następujący.

Uzyskaj DataTable powrót z procedury przechowywanej, a następnie ustawić DataSource z GridView, a następnie zadzwonić DataBind ().

Działa to dobrze, gdy mam danych, ale gdy są zwracane żadne wiersze potem po prostu puste miejsce, gdzie siatka powinna być.

Edit: Dzięki wszystkim za 4+ własności .NET. Poprosiłem tego z powrotem w .NET 3.5 dni. Jest to o wiele łatwiejsze. :)

Utwórz 09/12/2008 o 22:52
źródło użytkownik
W innych językach...                            


16 odpowiedzi

głosy
119

ASP.Net 4.0 dodaje logiczną ShowHeaderWhenEmptywłaściwość.

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>

Uwaga: nagłówki nie będą wyświetlane, chyba DataBind () jest wywoływana z czegoś innego niż null.

GridView1.DataSource = New List(Of String)
GridView1.DataBind()
Odpowiedział 17/02/2011 o 20:13
źródło użytkownik

głosy
30

Po wysłaniu tego ja nie wymyślić sposób, który działa. Jednak nie czuję, że jest to najlepszy sposób, aby sobie z tym poradzić. Wszelkie sugestie na lepszy?

//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;
}
Odpowiedział 09/12/2008 o 22:59
źródło użytkownik

głosy
5

I właśnie dzięki tej pracy problemu, a żadne z tych rozwiązań będzie pracować dla mnie. Nie mogłem użyć EmptyDataTemplatewłasność, bo tworzyłem moją GridViewdynamicznie z niestandardowych pól, które zapewniają filtry w nagłówkach. Nie mogłem użyć przykładu almny pisał bo używam ObjectDataSources zamiast DataSetlub DataTable. Uważam jednak, to odpowiedź wysłana na inne pytanie StackOverflow, który łączy się to eleganckie rozwiązanie , które udało mi się zrobić pracę dla mojej konkretnej sytuacji. Polega ona na nadpisanie CreateChildControlssposobu GridView, aby stworzyć ten sam wiersz nagłówka, które zostały utworzone gdyby nie było prawdziwe dane. Pomyślałem, że warto delegowania tutaj, gdzie to może być znaleziony przez innych ludzi w podobnej poprawki.

Odpowiedział 14/07/2009 o 22:05
źródło użytkownik

głosy
3

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

showheaderwhenEmpty własność

Odpowiedział 20/12/2012 o 12:21
źródło użytkownik

głosy
3

Jeśli pracujesz z ASP.NET 3.5 i dolnej, a problem jest stosunkowo proste, jak moje, można po prostu wrócić do pustego wiersza z zapytania 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

Rozwiązanie to nie wymaga żadnego kodu C # lub kodu ASP.NET

  1. Upewnij się, rzucać NULL kolumn do odpowiednich nazw, w przeciwnym razie nie będzie działać.
  2. Inny blok musi być włączone, który jest taki sam jak w kwerendy if not exists (query part)
  3. W moim przypadku, jeśli używam @RepID zamiast 10. który jest odwzorowany na pudełku DropDownList poza GridView.

Za każdym razem zmienić spadek w dół, aby wybrać inny rep, GridView jest aktualizowana. Jeśli nie zostanie znaleziony rekord, to pokazuje pustego wiersza.

Odpowiedział 10/07/2012 o 16:28
źródło użytkownik

głosy
2

Można użyć właściwości HeaderTemplate do ustawiania głowicy programowo lub użyć ListView zamiast jeśli używasz .NET 3.5.

Osobiście wolę ListView nad GridView i DetailsView, jeśli to możliwe, to daje większą kontrolę nad html.

Odpowiedział 09/12/2008 o 23:07
źródło użytkownik

głosy
1

Można ustawić właściwość ShowHeadersWhenNoRecords z ownertableview true. aspx:

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

Również wtedy, gdy źródło danych dla GridView jest null (gdy żadne zapisy), można spróbować ustawić go tak jak pokazano poniżej: C #:

  if (GridView1.DataSource == null)  
  {  
        GridView1.DataSource = new string[] { };  
  } 
  GridView1.DataBind();
Odpowiedział 29/06/2016 o 10:24
źródło użytkownik

głosy
1

Juste dodać właściwość ShowHeaderWhenEmpty i ustawić go na prawdziwe

Rozwiązanie to działa na mnie

Odpowiedział 27/02/2015 o 15:23
źródło użytkownik

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

Jest to podstawowy przykład Gridview z EmptyDataText i ShowHeaderWhenEmpty

Odpowiedział 06/09/2013 o 09:31
źródło użytkownik

głosy
1

Znalazłem bardzo proste rozwiązanie tego problemu. Po prostu stworzył dwa GridViews. Pierwszy GridView nazywa DataSource z zapytaniem, który został zaprojektowany, aby powrócić nie wierszy. To po prostu zawierał następujące elementy:

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

Potem stworzył div z następujących cech i I miejsce GridView wewnątrz niego z ShowHeader = „false”, tak aby górny rząd ma taki sam rozmiar jak wszystkich innych wierszy.

<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>
Odpowiedział 13/06/2012 o 18:53
źródło użytkownik

głosy
1

Dodaj nieruchomość do siatki-view: ShowHeaderWhenEmpty = „True”, to może pomóc tylko sprawdzić

Odpowiedział 18/04/2012 o 14:25
źródło użytkownik

głosy
0

Używałem asp SqlDataSource. Pracował dla mnie, kiedy ustawić CancelSelectOnNullParameter false, jak poniżej:

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

Odpowiedział 24/01/2018 o 17:32
źródło użytkownik

głosy
-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/
Odpowiedział 08/07/2015 o 08:47
źródło użytkownik

głosy
-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();  
Odpowiedział 08/07/2015 o 08:43
źródło użytkownik

głosy
-1

Można użyć EmptyDataText, jak pokazano poniżej:

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

Nie pokazuje nagłówków, to czyni swój komunikat „Nie znaleziono wpisów.” zamiast.

Odpowiedział 21/09/2012 o 18:40
źródło użytkownik

głosy
-3

Użyj EmptyDataTemplate jak poniżej. Gdy źródła danych nie ma zapisów, widać swoją siatkę z nagłówków i tekstu dosłowne lub HTML, który znajduje się wewnątrz znaczników 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>
Odpowiedział 09/12/2008 o 23:34
źródło użytkownik

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