Αναγν. άρθρου: 306154 - Τελευταία αναθεώρηση: Δευτέρα, 20 Δεκεμβρίου 2010 - Αναθεώρηση: 2.0

Τρόπος εμφάνισης δεδομένων ιεραρχικό χρησιμοποιώντας στοιχεία ελέγχου ένθετα Repeater και Visual C# .NET

Συμβουλή συστήματοςΑυτό το άρθρο ισχύει για διαφορετικό λειτουργικό σύστημα από αυτό που χρησιμοποιείτε. Το περιεχόμενο του άρθρου που ενδέχεται να μην σας αφορά έχει απενεργοποιηθεί.

Σε αυτήν τη σελίδα

Ανάπτυξη όλων | Σύμπτυξη όλων

Περίληψη

Αυτό το άρθρο περιγράφει τον τρόπο χρήσης των ένθετωνRepeaterτα στοιχεία ελέγχου για την εμφάνιση ιεραρχικών δεδομένων. Μπορείτε να εφαρμόσετε αυτή την έννοια σε άλλα στοιχεία ελέγχου δεσμευμένα σε λίστα.


Η σύνδεση με το γονικό πίνακα

  1. Ξεκινήστε το Microsoft Visual Studio .NET.
  2. Στο διακομιστήFILEμενού, σημείοΝέα, και στη συνέχεια κάντε κλικ στο κουμπίΤο έργο.
  3. Κάντε κλικΤο Visual C# έργαunderΤύποι έργου, και στη συνέχεια κάντε κλικ στο κουμπίΕφαρμογή Web του ASP.NETunderΠρότυπα.
  4. ΣτοΘέσηπλαίσιο, διαγράψτε το WebApplication#, και στη συνέχεια πληκτρολογήστεNestedRepeater. Εάν χρησιμοποιείτε τον τοπικό διακομιστή, αφήστε το όνομα του διακομιστή ωςhttp://localhost. Εμφανίζεται η ακόλουθη διαδρομή στο στοΘέση"Τύπος" (Type):
    http://localhost/ NestedRepeater
    Κάντε κλικOk.
  5. ΣτοΕξερεύνηση λύση, κάντε δεξιό κλικ στοNestedRepeaterόνομα κόμβου του Project, τοποθετήστε το δείκτηADD, και στη συνέχεια κάντε κλικ στο κουμπίΠροσθήκη φόρμας Web.
  6. Για να ονομάσετε τη φόρμα Web, πληκτρολογήστε:NestedRepeater, και κάντε κλικ στο κουμπίOpen.
  7. Δημιουργείται η νέα φόρμα Web. Ανοίγει σε προβολή σχεδίασης στο την ανάπτυξη περιβάλλοντος IDE (Integrated) του Microsoft Visual Studio .NET. Από την εργαλειοθήκη, επιλέξτε τοRepeaterέλεγχος και, στη συνέχεια, σύρετέ το στη σελίδα φόρμας Web.
  8. Αλλαγή τουIDΑυτή η ιδιότηταRepeaterΈλεγχος γιαparentRepeater.
  9. Μεταβείτε στην προβολή HTML για αυτήν τη φόρμα Web. Για να το κάνετε αυτό, κάντε κλικ στοHTMLστην καρτέλα στην κάτω αριστερή γωνία της σχεδίασης. Για ναRepeaterστοιχείο ελέγχου δημιουργεί τον ακόλουθο κώδικα HTML:
    <asp:Repeater id="parentRepeater" runat="server"></asp:Repeater>
    					
  10. Προσθέστε τον ακόλουθο κώδικα στο στοRepeaterετικέτες:
    <itemtemplate>
         <b><%# DataBinder.Eval(Container.DataItem, "au_id") %></b><br>
    </itemtemplate>
    					
    Μετά από αυτήν που, κώδικας HTML για τοRepeaterείναι η εξής:
    <asp:Repeater id="parentRepeater" runat="server">
    	<itemtemplate>
    	     <b><%# DataBinder.Eval(Container.DataItem, "au_id") %></b><br>	
          </itemtemplate>
    </asp:Repeater>
    					
  11. Στην Εξερεύνηση των λύσεων, κάντε δεξιό κλικNestedRepeater.aspx, και στη συνέχεια κάντε κλικ στο κουμπίΠροβολή κώδικαΓια να μεταβείτε στο αρχείο κώδικα πίσω NestedRepeater.aspx.cs.
  12. Προσθέστε την ακόλουθη δήλωση πεδίου ονόματος στην αρχή του αρχείου:
    using System.Data;
    using System.Data.SqlClient;
    					
  13. Προσθέστε τον ακόλουθο κώδικα για τοPage_Loadτο συμβάν για να δημιουργήσετε μια σύνδεση με τοpubsβάση δεδομένων, και στη συνέχεια να συνδέσετε τοΣυγγραφείςπίνακας με τοRepeaterControl:
          public void Page_Load(object sender, EventArgs e)
          {
             //Create the connection and DataAdapter for the Authors table.
             SqlConnection cnn = new SqlConnection("server=(local);database=pubs; Integrated Security=SSPI");
             SqlDataAdapter cmd1 = new SqlDataAdapter("select * from authors",cnn);
    
             //Create and fill the DataSet.
             DataSet ds = new DataSet();
             cmd1.Fill(ds,"authors");
             //Insert code in step 4 of the next section here.
             //Bind the Authors table to the parent Repeater control, and call DataBind.
             parentRepeater.DataSource = ds.Tables["authors"];
             Page.DataBind();
    
             //Close the connection.
             cnn.Close();
           }
    					
    ΣΗΜΕΙΩΣΗ: Ίσως χρειαστεί να τροποποιήσετε τη συμβολοσειρά σύνδεσης βάσης δεδομένων, ανάλογα με το περιβάλλον σας.

  14. Αποθήκευση όλων των αρχείων.
  15. ΣτοΕξερεύνηση λύση, κάντε δεξιό κλικ στο NestedRepeater.aspx και στη συνέχεια κάντε κλικ στο κουμπίΣύνολο με την έναρξη της σελίδας.
  16. Στο διακομιστήΔημιουργίαΚάντε κλικ στο μενούΔημιουργία λύσεωνγια τη μεταγλώττιση του έργου.
  17. Προβάλετε τη σελίδα .aspx με το πρόγραμμα περιήγησης και στη συνέχεια, βεβαιωθείτε ότι η σελίδα λειτουργεί έτσι μέχρι τώρα.

    Τα αποτελέσματα θα πρέπει να εμφανίζεται ως εξής:
    • 172 32 1176
    • 213-46-8915
    • 238 95 7766
    • 267 41 2394
    • ...

Η σύνδεση με το εξαρτημένο πίνακα

  1. Σε προβολή HTML της σελίδας NestedRepeater.aspx, εντοπίστε την ακόλουθη γραμμή κώδικα:
    <b><%# DataBinder.Eval(Container.DataItem, "au_id") %></b><br>
    						
    Προσθέστε τον ακόλουθο κώδικα μετά από αυτόν τον κώδικα:
    <asp:repeater id="childRepeater" runat="server">
    		<itemtemplate>
    	            <%# DataBinder.Eval(Container.DataItem, "[\"title_id\"]")%><br>
    		</itemtemplate>
    </asp:repeater>
    						
    Αυτό το νέο κωδικό προσθέτει μια δεύτερηRepeaterΈλεγχος για τοItemTemplateη ιδιότητα της γονικής τοποθεσίαςRepeaterControl.
  2. Ορισμός τουDataSourceη ιδιότητα για το παιδίRepeaterΈλεγχος ως εξής:
    <asp:repeater ... datasource='<%# ((DataRowView)Container.DataItem)
          .Row.GetChildRows("myrelation") %>' >
    					
    Αφού ορίσετε τοDataSourceη ιδιότητα για το παιδίRepeaterελέγχετε τον κώδικα HTML για τα δύοRepeaterτα στοιχεία ελέγχου (γονικό και εξαρτημένο) εμφανίζεται ως εξής:
    <asp:Repeater id="parentRepeater" runat="server">
    	<itemtemplate>
    		<b>
    		 <%# DataBinder.Eval(Container.DataItem, "au_id") %>
    		</b>
    		<br>
    		<asp:repeater id="childRepeater" runat="server" 
                        datasource='<%# ((DataRowView)Container.DataItem)
          .Row.GetChildRows("myrelation") %>' >
    			<itemtemplate>
    				<%# DataBinder.Eval(Container.DataItem, "[\"title_id\"]")%><br>	
    			</itemtemplate>
    		</asp:Repeater> 
    	</itemtemplate>
    </asp:Repeater>
    					
  3. Προσθέστε την ακόλουθη οδηγία σελίδας, στο επάνω μέρος της σελίδας:
    <%@ Import Namespace="System.Data" %>
    					
  4. Στη σελίδα πίσω του κώδικα, αντικαταστήστε την παρακάτω γραμμή τηςPage_LoadΣυμβάν
    //Insert code in step 4 of the next section here.
    						
    με τον ακόλουθο κώδικα:
             //Create a second DataAdapter for the Titles table.
             SqlDataAdapter cmd2 = new SqlDataAdapter("select * from titleauthor",cnn);
             cmd2.Fill(ds,"titles");
    
             //Create the relation between the Authors and Titles tables.
             ds.Relations.Add("myrelation",
             ds.Tables["authors"].Columns["au_id"],
             ds.Tables["titles"].Columns["au_id"]);
    
    					
    Η ενέργεια αυτή προσθέτει τονΟι τίτλοιπίνακας με τοΤο DataSet, και στη συνέχεια προσθέτει τις σχέσεις μεταξύ των πινάκων συντάκτες και τίτλων.
  5. Αποθηκεύστε και μεταγλώττιση της εφαρμογής.
  6. Προβολή της σελίδας στο πρόγραμμα περιήγησης και, στη συνέχεια, βεβαιωθείτε ότι η σελίδα λειτουργεί μέχρι στιγμής. Τα αποτελέσματα θα πρέπει να εμφανίζεται ως εξής:
    172 32 1176
    PS3333
    213-46-8915
    BU1032
    BU2075
    238 95 7766
    PC1035
    267 41 2394
    BU1111
    TC7777
    ...

Πλήρης λίστα κωδικών

Nestedrepeater.aspx

<%@ Page language="c#" Codebehind="NestedRepeater.aspx.cs" AutoEventWireup="false" Inherits="NestedRepeater.NestedRepeater" %>
<%@ Import Namespace="System.Data" %>

<html>
<body>
<form runat=server>

<!-- start parent repeater -->
<asp:repeater id="parentRepeater" runat="server">
   <itemtemplate>
      <b><%# DataBinder.Eval(Container.DataItem,"au_id") %></b><br>

      <!-- start child repeater -->
      <asp:repeater id="childRepeater" datasource='<%# ((DataRowView)Container.DataItem)
      .Row.GetChildRows("myrelation") %>' runat="server">

         <itemtemplate>
            <%# DataBinder.Eval(Container.DataItem, "[\"title_id\"]")%><br>
         </itemtemplate>
      </asp:repeater>
      <!-- end child repeater -->

   </itemtemplate>
</asp:repeater>
<!-- end parent repeater -->

</form>
</body>
</html>
				

Nestedrepeater.aspx.CS

using System;
using System.Data;
using System.Data.SqlClient;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace NestedRepeater
{
   public class NestedRepeater : System.Web.UI.Page
   {
      protected System.Web.UI.WebControls.Repeater parentRepeater;
      public NestedRepeater()
      {
         Page.Init += new System.EventHandler(Page_Init);
      }
      public void Page_Load(object sender, EventArgs e)
      {
         //Create the connection and DataAdapter for the Authors table.
         SqlConnection cnn = new SqlConnection("server=(local);database=pubs; Integrated Security=SSPI ;");
         SqlDataAdapter cmd1 = new SqlDataAdapter("select * from authors",cnn);

         //Create and fill the DataSet.
         DataSet ds = new DataSet();
         cmd1.Fill(ds,"authors");

         //Create a second DataAdapter for the Titles table.
         SqlDataAdapter cmd2 = new SqlDataAdapter("select * from titleauthor",cnn);
         cmd2.Fill(ds,"titles");

         //Create the relation bewtween the Authors and Titles tables.
         ds.Relations.Add("myrelation",
         ds.Tables["authors"].Columns["au_id"],
         ds.Tables["titles"].Columns["au_id"]);

         //Bind the Authors table to the parent Repeater control, and call DataBind.
         parentRepeater.DataSource = ds.Tables["authors"];
         Page.DataBind();

         //Close the connection.
         cnn.Close();
      }
      private void Page_Init(object sender, EventArgs e)
      {
         InitializeComponent();
      }
      private void InitializeComponent()
      {    
         this.Load += new System.EventHandler(this.Page_Load);
      }
   }
}
				

Αναφορές

Για περισσότερες πληροφορίες, ανατρέξτε στα ακόλουθα θέματα με το Microsoft .NET Framework Software Development Kit (SDK):
Προσθήκη μιας σχέσης μεταξύ πινάκων
http://MSDN.Microsoft.com/Library/Default.asp?URL=/Library/en-us/cpguide/HTML/cpconaddingrelationshipbetweentwotables.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconaddingrelationshipbetweentwotables.asp)

Περιήγηση σε μια σχέση μεταξύ πινάκων
http://MSDN.Microsoft.com/Library/Default.asp?URL=/Library/en-us/cpguide/HTML/cpconnavigatingrelationshipbetweentwotables.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconnavigatingrelationshipbetweentwotables.asp)

Στοιχείο ελέγχου διακομιστή Web repeater
http://MSDN.Microsoft.com/Library/Default.asp?URL=/Library/en-us/cpgenref/HTML/cpconrepeaterwebservercontrol.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/cpconrepeaterwebservercontrol.asp)

Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft ASP.NET 1.0
  • Microsoft ASP.NET 1.1
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
Λέξεις-κλειδιά: 
kbdatabinding kbhowtomaster kbservercontrols kbmt KB306154 KbMtel
Μηχανικά μεταφρασμένοΜηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:306154  (http://support.microsoft.com/kb/306154/en-us/ )