Wie zeige ich in C # immer noch die Überschriften einer Rasteransicht an, auch wenn die Datenquelle leer ist?
Ich generiere die Spalten nicht automatisch, da sie alle vordefiniert sind.
Derzeit mache ich Folgendes.
Holen Sie sich eine DataTable von einer gespeicherten Prozedur zurück, legen Sie die DataSource der Gridview fest und rufen Sie DataBind () auf.
Dies funktioniert gut, wenn ich Daten habe, aber wenn keine Zeilen zurückgegeben werden, erhalte ich nur eine leere Stelle, an der sich das Raster befinden sollte.
Bearbeiten: Vielen Dank an alle für die .NET 4+ -Eigenschaft. Ich habe dies in den .NET 3.5 Tagen gefragt. Das ist jetzt viel einfacher. :) :)
Nachdem ich dies gepostet hatte, fand ich einen Weg, der funktioniert. Ich denke jedoch nicht, dass dies der beste Weg ist, damit umzugehen. Irgendwelche Vorschläge für einen besseren?
//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; }
quelle
Ich habe gerade dieses Problem durchgearbeitet, und keine dieser Lösungen würde für mich funktionieren. Ich konnte die
EmptyDataTemplate
Eigenschaft nicht verwenden, da ich meineGridView
dynamisch mit benutzerdefinierten Feldern erstellt habe, die Filter in den Kopfzeilen bereitstellen. Ich konnte das Beispiel almny nicht verwenden, da ichObjectDataSource
s anstelle vonDataSet
oder verwendeDataTable
. Ich fand diese Antwort jedoch auf einer anderen StackOverflow-Frage, die auf diese elegante Lösung verweist, mit der ich für meine spezielle Situation arbeiten konnte. Dabei wird dieCreateChildControls
Methode überschriebenGridView
, mit der dieselbe Kopfzeile erstellt wird, die erstellt worden wäre, wenn echte Daten vorhanden gewesen wären. Ich dachte, es lohnt sich, hier zu posten, wo es wahrscheinlich von anderen Leuten in einem ähnlichen Fix gefunden wird.quelle
Wenn Sie mit ASP.NET 3.5 und niedriger arbeiten und Ihr Problem wie meines relativ einfach ist, können Sie einfach eine Nullzeile aus der SQL-Abfrage zurückgeben.
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 keinen C # -Code oder ASP.NET-Code
if not exists (query part)
Jedes Mal, wenn ich das Dropdown-Menü ändere, um einen anderen Mitarbeiter auszuwählen, wird Gridview aktualisiert. Wenn kein Datensatz gefunden wird, wird eine Nullzeile angezeigt.
quelle
einstellen
"<asp:GridView AutoGenerateColumns="false" ShowHeaderWhenEmpty="true""
showheaderwhenEmpty
Eigentumquelle
Sie können die HeaderTemplate-Eigenschaft verwenden, um den Kopf programmgesteuert einzurichten, oder stattdessen ListView verwenden, wenn Sie .NET 3.5 verwenden.
Persönlich bevorzuge ich ListView gegenüber GridView und DetailsView, wenn möglich, damit Sie mehr Kontrolle über Ihr HTML haben.
quelle
Sie können die ShowHeadersWhenNoRecords-Eigenschaft der ownertableview auf true setzen. aspx:
<asp:GridView ID="RadGrid2" runat="server" > <MasterTableView ShowHeadersWhenNoRecords="true" >
Auch wenn die Datenquelle für GridView null ist (wenn keine Datensätze vorhanden sind), können Sie versuchen, sie wie folgt festzulegen: c #:
if (GridView1.DataSource == null) { GridView1.DataSource = new string[] { }; } GridView1.DataBind();
quelle
Fügen Sie diese Eigenschaft Ihrer Rasteransicht hinzu: ShowHeaderWhenEmpty = "True". Dies kann hilfreich sein
quelle
Ich habe eine sehr einfache Lösung für das Problem gefunden. Ich habe einfach zwei GridViews erstellt. Die erste GridView rief eine DataSource mit einer Abfrage auf, die keine Zeilen zurückgeben sollte. Es enthielt einfach Folgendes:
<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 Merkmalen erstellt und mit ShowHeader = "false" eine GridView darin platziert, sodass die oberste Zeile dieselbe Größe wie alle anderen Zeilen hat.
<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>
quelle
<asp:GridView ID="grdGroup" EmptyDataText="No Records Found" ShowHeaderWhenEmpty="True" runat="server">
Dies ist ein grundlegendes Beispiel für Gridview mit EmptyDataText und ShowHeaderWhenEmpty
quelle
Juste fügt die ShowHeaderWhenEmpty-Eigenschaft hinzu und setzt sie auf true
Diese Lösung funktioniert bei mir
quelle
Ich habe asp sqlDataSource verwendet. Es hat bei mir funktioniert, als ich den CancelSelectOnNullParameter wie folgt auf false gesetzt habe:
<asp:SqlDataSource ID="SqlData1" runat="server" ConnectionString="" SelectCommand="myStoredProcedure" SelectCommandType="StoredProcedure" CancelSelectOnNullParameter="False"> </asp:SqlDataSource>
quelle
<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();
quelle
Sie können
EmptyDataText
wie folgt verwenden:<asp:GridView ID="_gridView" RunAt="server" AutoGenerateColumns="false" EmptyDataText="No entries found.">
Es werden keine Header angezeigt, sondern die Meldung "Keine Einträge gefunden". stattdessen.
quelle
<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/
quelle
Verwenden Sie eine EmptyDataTemplate wie unten. Wenn Ihre DataSource keine Datensätze enthält, wird Ihr Raster mit Überschriften und dem Literaltext oder HTML-Code in den EmptyDataTemplate-Tags angezeigt.
<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>
quelle