GridView - Εμφάνιση κεφαλίδες στο άδειο πηγή δεδομένων

ψήφοι
73

Στην C #, πώς μπορώ να εξακολουθούν να εμφανίζουν τις κεφαλίδες του το GridView, ακόμη και με την πηγή των δεδομένων είναι άδειο.

Δεν είμαι αυτόματη δημιουργία των στηλών όπως είναι όλα προκαθορισμένα.

Αυτή τη στιγμή αυτό που κάνω είναι η εξής.

Πάρτε ένα DataTable πίσω από μια αποθηκευμένη διαδικασία, στη συνέχεια, ορίστε το DataSource του το GridView, και στη συνέχεια να καλέσετε DataBind ().

Αυτό λειτουργεί καλά όταν έχω στοιχεία, αλλά όταν δεν υπάρχουν γραμμές επέστρεψε τότε έχω μόνο ένα κενό σημείο όπου το δίκτυο θα πρέπει να είναι.

Επεξεργασία: Ευχαριστώ όλους για το ακίνητο .NET 4+. Ρώτησα αυτό πίσω στις NET 3,5 ημέρες. Αυτό είναι πολύ πιο εύκολο τώρα. :)

Δημοσιεύθηκε 09/12/2008 στις 22:52
πηγή χρήστη
Σε άλλες γλώσσες...                            


16 απαντήσεις

ψήφοι
119

ASP.Net 4.0 προστίθεται το boolean ShowHeaderWhenEmptyιδιοκτησίας.

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>

Σημείωση: οι κεφαλίδες δεν θα εμφανιστεί εκτός αν DataBind () καλείται με κάτι άλλο εκτός από μηδενική.

GridView1.DataSource = New List(Of String)
GridView1.DataBind()
Απαντήθηκε 17/02/2011 στις 20:13
πηγή χρήστη

ψήφοι
30

Μετά από αυτή την απόσπαση είχα καταλήξει σε ένα τρόπο που λειτουργεί. Ωστόσο, δεν νομίζω ότι είναι ο καλύτερος τρόπος για να χειριστεί αυτό. Τυχόν προτάσεις για ένα καλύτερο;

//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;
}
Απαντήθηκε 09/12/2008 στις 22:59
πηγή χρήστη

ψήφοι
5

Ήμουν ακριβώς εργάζονται με αυτό το πρόβλημα, και καμία από αυτές τις λύσεις θα μπορούσε να λειτουργήσει για μένα. Δεν θα μπορούσε να χρησιμοποιήσει το EmptyDataTemplateακίνητο, επειδή ήμουν δημιουργώντας μου GridViewδυναμικά με προσαρμοσμένα πεδία που παρέχουν τα φίλτρα στις κεφαλίδες. Δεν θα μπορούσε να χρησιμοποιήσει το παράδειγμα almny δημοσιεύτηκε επειδή είμαι χρησιμοποιώντας ObjectDataSources αντί για DataSetή DataTable. Ωστόσο, βρήκα αυτή την απάντηση δημοσιεύτηκε στην άλλη ερώτηση StackOverflow, που σας συνδέει με αυτό το κομψό λύση που ήμουν σε θέση να κάνει την εργασία για την ιδιαίτερη κατάστασή μου. Περιλαμβάνει επιτακτικούς τη CreateChildControlsμέθοδο του GridViewνα δημιουργήσει την ίδια σειρά κεφαλίδων που θα έχουν δημιουργηθεί ήταν εκεί πραγματικά δεδομένα. Νόμιζα ότι αξίζει απόσπαση εδώ, όπου είναι πιθανό να βρεθούν από άλλους ανθρώπους σε μια παρόμοια λύση.

Απαντήθηκε 14/07/2009 στις 22:05
πηγή χρήστη

ψήφοι
3

σειρά "<asp:GridView AutoGenerateColumns="false" ShowHeaderWhenEmpty="true""

showheaderwhenEmpty Ιδιοκτησία

Απαντήθηκε 20/12/2012 στις 12:21
πηγή χρήστη

ψήφοι
3

Εάν εργάζεστε με ASP.NET 3.5 και κάτω, και το πρόβλημά σας είναι σχετικά απλή σαν τη δική μου, μπορείτε να επιστρέψετε απλά μια μηδενική γραμμή από το ερώτημα 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

Αυτή η λύση δεν απαιτεί C # κώδικα ή κώδικα ASP.NET

  1. Βεβαιωθείτε ότι έχετε ρίξει τις μηδενικές στήλες σε κατάλληλα ονόματα, αλλιώς δεν θα λειτουργήσει.
  2. Αλλιώς μπλοκ πρέπει να συμπεριληφθούν η οποία είναι το ίδιο ερώτημα και σε if not exists (query part)
  3. Στην περίπτωσή μου, αν είμαι με @RepID αντί για 10. Ποια αντιστοιχίζεται σε ένα κουτί DropDownList έξω από το GridView.

Κάθε φορά που αλλάζουν την πτώση κάτω για να επιλέξετε ένα διαφορετικό ύφασμα, το GridView ενημερώνεται. Αν δεν βρεθεί ρεκόρ, αυτό δείχνει μια μηδενική γραμμή.

Απαντήθηκε 10/07/2012 στις 16:28
πηγή χρήστη

ψήφοι
2

Μπορείτε να χρησιμοποιήσετε την ιδιότητα HeaderTemplate να ρυθμίσετε το κεφάλι κάποιου προγράμματος ή χρησιμοποιήστε ListView αντ 'αυτού, εάν χρησιμοποιείτε το .NET 3.5.

Προσωπικά, προτιμώ ListView πάνω GridView και DetailsView αν είναι δυνατόν, σας δίνει περισσότερο έλεγχο html σας.

Απαντήθηκε 09/12/2008 στις 23:07
πηγή χρήστη

ψήφοι
1

Μπορείτε να ορίσετε την ιδιότητα ShowHeadersWhenNoRecords του ownertableview στην αληθινή. aspx:

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

Επίσης, όταν η πηγή δεδομένων για το GridView είναι μηδενική (όταν δεν υπάρχουν εγγραφές), μπορείτε να δοκιμάσετε τη ρύθμιση αυτή, όπως φαίνεται παρακάτω: c #:

  if (GridView1.DataSource == null)  
  {  
        GridView1.DataSource = new string[] { };  
  } 
  GridView1.DataBind();
Απαντήθηκε 29/06/2016 στις 10:24
πηγή χρήστη

ψήφοι
1

Juste προσθέσετε το ακίνητο ShowHeaderWhenEmpty και να το θέσει σε πραγματική

Η λύση αυτή λειτουργεί για μένα

Απαντήθηκε 27/02/2015 στις 15:23
πηγή χρήστη

ψήφοι
1
<asp:GridView ID="grdGroup"  EmptyDataText="No Records Found" ShowHeaderWhenEmpty="True" runat="server">

Αυτό είναι ένα βασικό παράδειγμα το GridView με EmptyDataText και ShowHeaderWhenEmpty

Απαντήθηκε 06/09/2013 στις 09:31
πηγή χρήστη

ψήφοι
1

Βρήκα μια πολύ απλή λύση στο πρόβλημα. Απλά δημιούργησε δύο GridViews. Η πρώτη GridView ονομάζεται DataSource με ένα ερώτημα που σχεδιάστηκε για να επιστρέψει δεν σειρές. Είναι απλά περιείχε τα εξής:

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

Τότε θα δημιουργήσει ένα div με τα ακόλουθα χαρακτηριστικά και τοποθετήστε ένα GridView στο εσωτερικό του με ShowHeader = «false», έτσι ώστε η πάνω σειρά είναι το ίδιο μέγεθος με όλες τις άλλες σειρές.

<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>
Απαντήθηκε 13/06/2012 στις 18:53
πηγή χρήστη

ψήφοι
1

Προσθέστε αυτό το ακίνητο σε σας δίκτυο άποψη: ShowHeaderWhenEmpty = «True» θα μπορούσε να βοηθήσει απλά δείτε

Απαντήθηκε 18/04/2012 στις 14:25
πηγή χρήστη

ψήφοι
0

Ήμουν χρησιμοποιώντας asp SqlDataSource. Δούλεψε για μένα όταν έθεσα το CancelSelectOnNullParameter σε false, όπως παρακάτω:

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

Απαντήθηκε 24/01/2018 στις 17:32
πηγή χρήστη

ψήφοι
-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/
Απαντήθηκε 08/07/2015 στις 08:47
πηγή χρήστη

ψήφοι
-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();  
Απαντήθηκε 08/07/2015 στις 08:43
πηγή χρήστη

ψήφοι
-1

Μπορείτε να χρησιμοποιήσετε EmptyDataText, όπως φαίνεται παρακάτω:

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

Αυτό δεν δείχνει κεφαλίδες, καθιστά το μήνυμά σας «Δεν βρέθηκαν καταχωρήσεις.» αντι αυτου.

Απαντήθηκε 21/09/2012 στις 18:40
πηγή χρήστη

ψήφοι
-3

Χρησιμοποιήστε ένα EmptyDataTemplate όπως παρακάτω. Όταν DataSource σας δεν έχει εγγραφές, μπορείτε να δείτε στο δίκτυο σας με κεφαλίδες, και την κυριολεκτική κείμενο ή HTML που είναι μέσα στις ετικέτες 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>
Απαντήθηκε 09/12/2008 στις 23:34
πηγή χρήστη

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