İç 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
Visual Studio .NET'i başlatın.
Dosya menüsünde, Yeni'nin üzerine gelin ve Proje'ye tıklayın.
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.
Konum kutusuna WebApplication# öğesini silin ve NestedRepeater yazın. Yerel sunucuyu kullanıyorsanız, sunucu adını olarak
http://localhost
bırakın. Yol,http://localhost/NestedRepeater
Konum kutusunda görünür. Tamam'ı tıklatın.Çö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.
Web Formunu adlandırmak için NestedRepeater yazın ve Aç'a tıklayın.
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.
Bu Repeater denetiminin ID özelliğini parentRepeater olarak değiştirin.
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>
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>
Çö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.
Dosyanın en üstüne aşağıdaki ad alanı bildirimini ekleyin:
using System.Data; using System.Data.SqlClient;
Pubs veritabanına bağlantı oluşturmak ve tabloyu Repeater denetimine bağlamak
Authors
için olaya aşağıdaki koduPage_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.
Tüm dosyaları kaydedin.
Çözüm Gezgini'da, NestedRepeater.aspx sağ tıklayın ve ardından Başlangıç Sayfası Olarak Ayarla'ya tıklayın.
Derleme menüsünde Çözümü Derle'ye tıklayarak projeyi derleyin.
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
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.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>
Sayfanın en üstüne aşağıdaki sayfa yönergesini ekleyin:
<%@ Import Namespace="System.Data" %>
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 veTitles
tabloları arasındakiAuthors
ilişkileri ekler.Uygulamayı kaydedin ve derleyin.
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.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin