İçiçe Repeater Kullanımı
Bu yazıda iç içe repeter kullanımına örnek vermek istedim.
Bu yazımızda, Hiyerarşik yapıdaki verileri listelemek üzere iç içe repeater (nested repeater) kulllanımından bahsedeceğiz.
Başka çözüm aramanıza gerek yok, bu yazıyı okumanız ve işin mantığını anlamanız yeterli.
Aşağıdaki recursive mantıkla, iç içe isterse 100. kademeye kadar alt başlık olsun sorun olmadan listelemeyi gerçekleştirirsiniz.
Ben programda LINQ'i kullandım, unutmayın önemli olan bu işin mantığı, siz kendi programınızda başka türlü kullanırsınız, o sizin bileceğiniz iş. :)
Kullanacağımız verileri List içerisinde tutacağız, bunun için basit bir class yazalım:
class Kategori { public int Id { get; set; } public int UstId { get; set; } public string KategoriAdi { get; set; } }
Bu da iç içe repeater kullanımı:
List<Kategori> kategoriler = null; protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { // Örnek veriler kategoriler = new List<Kategori> { new Kategori{ Id=1, UstId=0, KategoriAdi="A"}, new Kategori{ Id=2, UstId=0, KategoriAdi="B"}, new Kategori{ Id=3, UstId=0, KategoriAdi="C"}, new Kategori{ Id=4, UstId=0, KategoriAdi="D"}, new Kategori{ Id=5, UstId=0, KategoriAdi="E"}, new Kategori{ Id=6, UstId=2, KategoriAdi="B-1"}, new Kategori{ Id=7, UstId=2, KategoriAdi="B-2"}, new Kategori{ Id=8, UstId=6, KategoriAdi="B-1-1"}, new Kategori{ Id=9, UstId=6, KategoriAdi="B-1-2"}, new Kategori{ Id=10, UstId=6, KategoriAdi="B-1-3"}, new Kategori{ Id=11, UstId=10, KategoriAdi="B-1-3-1"}, new Kategori{ Id=12, UstId=4, KategoriAdi="D-1"}, new Kategori{ Id=13, UstId=12, KategoriAdi="D-1-1"}, new Kategori{ Id=14, UstId=13, KategoriAdi="D-1-1-1"} }; // UstId si 0 olanlar ana başlıklardır rptAna.DataSource = VeriCek(0); rptAna.DataBind(); } } private List<Kategori> VeriCek(int ustId) { return (from x in kategoriler where x.UstId == ustId orderby x.KategoriAdi select x).ToList(); } protected void rptAna_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item) { Kategori kat = e.Item.DataItem as Kategori; // Buraya dikkat !! // Ana repeaterimizin kopyasını oluşturuyoruz. Repeater rpt = e.Item.FindControl("rpt") as Repeater; rpt.ItemTemplate = rptAna.ItemTemplate; rpt.HeaderTemplate = rptAna.HeaderTemplate; rpt.FooterTemplate = rptAna.FooterTemplate; rpt.DataSource = VeriCek(kat.Id); // alt başlıklar... rpt.ItemDataBound += new RepeaterItemEventHandler(rptAna_ItemDataBound); rpt.DataBind(); } }
Dikkat ederseniz, rpt nin ItemDataBound eventinde tekrar rptAna_ItemDataBound metodunu kullanıyoruz. :)
Böylece recursivite sağlanmış oluyor.
Kolay gelsin.. :)))
#nested #repeater #recursive #databound #template