İç içe Repeater denetimlerini ve Visual C# .NET'i kullanarak hiyerarşik verileri görüntüleme

Bu makalede, iç içe Repeater denetimleri ve Visual C# .NET kullanılarak hiyerarşik verilerin nasıl görüntüleneceği hakkında bilgi sağlanır.

Orijinal ürün sürümü: Visual C#
Özgün KB numarası: 306154

Özet

Bu makalede, hiyerarşik verileri görüntülemek için iç içe Repeater denetimlerinin nasıl kullanılacağı açıklanmaktadır. Bu kavramı diğer listeye bağlı denetimlere uygulayabilirsiniz.

Bu makale, aşağıdaki Microsoft .NET Framework Sınıf Kitaplığı ad alanlarını ifade eder:

  • System.Data
  • System.Data.SqlClient

Üst tabloya bağlama

  1. Visual Studio .NET'i başlatın.

  2. Dosya menüsünde, Yeni'nin üzerine gelin ve Proje'ye tıklayın.

  3. Proje Türleri'nin altında Visual C# Projeleri'ne ve ardından Şablonlar'ın altında Web Uygulaması'nı ASP.NET'e tıklayın.

  4. Konum kutusuna WebApplication# öğesini silin ve NestedRepeater yazın. Yerel sunucuyu kullanıyorsanız, sunucu adını olarak http://localhostbırakın. Yol, http://localhost/NestedRepeaterKonum kutusunda görünür. Tamam'ı tıklatın.

  5. Çözüm Gezgini nestedRepeater proje adı düğümüne sağ tıklayın, Ekle'nin üzerine gelin ve Web Formu Ekle'ye tıklayın.

  6. Web Formunu adlandırmak için NestedRepeater yazın ve Aç'a tıklayın.

  7. Yeni Web Formu oluşturulur. Visual Studio .NET'in Tümleşik Geliştirme Ortamı'nda (IDE) Tasarım Görünümü'nde açılır. Araç Kutusu'ndan Repeater denetimini seçip Web Formu sayfasına sürükleyin.

  8. Bu Repeater denetiminin ID özelliğini parentRepeater olarak değiştirin.

  9. Bu Web Formunun HTML görünümüne geçin. Bunu yapmak için, Tasarım Aracı sol alt köşesindeki HTML sekmesine tıklayın. Repeater denetimi aşağıdaki HTML kodunu oluşturur:

    <asp:Repeater id="parentRepeater" runat="server"></asp:Repeater>
    
  10. Etiketlere aşağıdaki kodu Repeater ekleyin:

    <itemtemplate>
        <b>
            <%# DataBinder.Eval(Container.DataItem, "au_id") %>
        </b>
        <br>
    </itemtemplate>
    

    Bunu yaptıktan sonra Repeater'ın HTML kodu aşağıdaki gibidir:

    <asp:Repeater id="parentRepeater" runat="server">
        <itemtemplate>
            <b>
                <%# DataBinder.Eval(Container.DataItem, "au_id") %>
            </b>
            <br>
        </itemtemplate>
    </asp:Repeater>
    
  11. Çözüm Gezgini'da NestedRepeater.aspx sağ tıklayın ve ardından Kodu Görüntüle'ye tıklayarak arka NestedRepeater.aspx.cs kod dosyasına geçin.

  12. Dosyanın en üstüne aşağıdaki ad alanı bildirimini ekleyin:

    using System.Data;
    using System.Data.SqlClient;
    
  13. Pubs veritabanına bağlantı oluşturmak ve tabloyu Repeater denetimine bağlamak Authors için olaya aşağıdaki kodu Page_Load ekleyin:

     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();
     }
    

    Not

    Veritabanı bağlantı dizesi ortamınıza uygun şekilde değiştirmeniz gerekebilir.

  14. Tüm dosyaları kaydedin.

  15. Çözüm Gezgini'da, NestedRepeater.aspx sağ tıklayın ve ardından Başlangıç Sayfası Olarak Ayarla'ya tıklayın.

  16. Derleme menüsünde Çözümü Derle'ye tıklayarak projeyi derleyin.

  17. tarayıcıda .aspx sayfasını görüntüleyin ve sayfanın şu ana kadar çalıştığını doğrulayın. Çıkış aşağıdaki gibi görünmelidir:

    172-32-1176
    213-46-8915
    238-95-7766
    267-41-2394
    ...
    

Alt tabloya bağlama

  1. NestedRepeater.aspx sayfasının HTML görünümünde aşağıdaki kod satırını bulun:

    <b>
        <%# DataBinder.Eval(Container.DataItem, "au_id") %>
    </b>
    <br>
    

    Bu kodun arkasına aşağıdaki kodu ekleyin:

    <asp:repeater id="childRepeater" runat="server">
        <itemtemplate>
            <%# DataBinder.Eval(Container.DataItem, "[\"title_id\"]")%>
            <br>
        </itemtemplate>
    </asp:repeater>
    

    Bu yeni kod, üst Repeater denetiminin ItemTemplate özelliğine ikinci bir Repeater denetimi ekler.

  2. DataSource Alt Repeater denetiminin özelliğini aşağıdaki gibi ayarlayın:

    <asp:repeater ... datasource='<%# ((DataRowView)Container.DataItem).Row.GetChildRows("myrelation") %>' >
    

    Alt Repeater denetiminin DataSource özelliğini ayarladıktan sonra, iki Repeater denetiminin (üst ve alt) HTML kodu aşağıdaki gibi görünür:

    <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. Sayfanın en üstüne aşağıdaki sayfa yönergesini ekleyin:

    <%@ Import Namespace="System.Data" %>
    
  4. Arka planda kod sayfasında, olayda Page_Load aşağıdaki satırı değiştirin:

    //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"]);
    

    Bu, Titles tabloyu DataSet'e ekler ve sonra ve Titles tabloları arasındaki Authors ilişkileri ekler.

  5. Uygulamayı kaydedin ve derleyin.

  6. Sayfayı tarayıcıda görüntüleyin ve sayfanın şimdiye kadar çalıştığını doğrulayın. Çıkış aşağıdaki gibi görünmelidir:

    172-32-1176
    PS3333
    213-46-8915
    BU1032
    BU2075
    238-95-7766
    PC1035
    267-41-2394
    BU1111
    TC7777
    

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

kodu 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);
        }
    }
}

Daha fazla bilgi

Daha fazla bilgi için bkz . Repeater Web Sunucusu Denetimi.