Müdavim Girişi

E-Posta
Parola

Ücretsiz Kayıt Ol


Online Müdavimler (0 Kişi)
  • Online Kişi Bulunmadı

Yazar Hakkında
x
İsmail Kocacan
İsmail Kocacan is experienced on many development platforms and continues to learn technologies. Since the age of 16-17, dealing with software technologies. And continuous learning, teaching, research, continues to develop.
Hiyerarşik Verilerin DataList Nesnesine Uygulanışı

Herkese Selamlar Saygilar;

Bu yazida sizlere tablodaki hiyerarsik verileri datalist nesnesini kullanarak iç içe sonsuz bir sekilde nasil gösterebiliriz onu anlatmaya çalisicam. Daha önce Treeview nesnesinde bu olayi göstermistim. Lakin datalist ile uygulama yapmaya kalktigimda isin rengi degisti.
Hiyerarsik sekilde gösterebilmemiz için datalist kontrollerini dinamik olusturmamiz ve yine ayni sekilde Tasarim aninda markup kod olarak yazdigigimiz asagidaki gibi kodlari
<ItemTemplate>
 
<%# Eval("AlanAdi") %>
</ItemTemplate>
Programatik olarak yapma ihtiyaci duydum. Bunu da nasil yapabilecegimiz hakkinda buradaki makaleden yardim aldim. Sonuçta dogdugumuzda dünyaya ItemTemplate leri dinamik olarak nasil olusturacagimiz bilerek dogmuyoruz.
Neyse hikaye anlatmadan kodlamaya baslayalim.
Tablo Yapisi

CREATE DATABASE DB
USE DB
/*DLL*/
CREATE TABLE [dbo].[Personeller](
      [ID] [int] IDENTITY(1,1) NOT NULL,
      [ParentID] [int] NULL,
      [Ad] [varchar](50) NULL,
      [Soyad] [varchar](50) NULL,
      [Unvan] [varchar](50) NULL,
      [Web] [varchar](50) NULL,
      [Mail] [varchar](50) NULL,
      [SimgURL] [varchar](50) NULL,
      [LimgURL] [varchar](50) NULL
) ON [PRIMARY]
 
 
/*DML*/
INSERT INTO Personeller(ParentID,Ad,Soyad,Unvan,Web,Mail,SimgURL,LimgURL)
VALUES(0,’Ismail’,'KOCACAN',’Yazilimci Bozuntusu',null,null,'ismail.jpg',null)
 
INSERT INTO Personeller(ParentID,Ad,Soyad,Unvan,Web,Mail,SimgURL,LimgURL)
VALUES(0,’Adi’, ’Lazim Degil 2',null,null,null,'Mavi tepeler.JPG',null)
 
INSERT INTO Personeller(ParentID,Ad,Soyad,Unvan,Web,Mail,SimgURL,LimgURL)
VALUES(1, ’Adi’, ’Lazim Degil 3',null,null,null,'Kis.jpg',null)
 
INSERT INTO Personeller(ParentID,Ad,Soyad,Unvan,Web,Mail,SimgURL,LimgURL)
VALUES(1, ’Adi’, ’Lazim Degil 4',null,null,null,'Günbatimi.jpg',null)
 
INSERT INTO Personeller(ParentID,Ad,Soyad,Unvan,Web,Mail,SimgURL,LimgURL)
VALUES(3, ’Adi’, ’Lazim Degil 5',null,null,null, 'Günbatimi.jpg',null)
 
INSERT INTO Personeller(ParentID,Ad,Soyad,Unvan,Web,Mail,SimgURL,LimgURL)
VALUES(3, ’Adi’, ’Lazim Degil 6',null,null,null, 'Günbatimi.jpg',null)
 
INSERT INTO Personeller(ParentID,Ad,Soyad,Unvan,Web,Mail,SimgURL,LimgURL)
VALUES(4, ’Adi’, ’Lazim Degil 7',null,null,null, 'Günbatimi.jpg',null)
 
INSERT INTO Personeller(ParentID,Ad,Soyad,Unvan,Web,Mail,SimgURL,LimgURL)
VALUES(4, ’Adi’,’Lazim Degil 8',null,null,null, 'Günbatimi.jpg',null)
 

 
 
Default.aspx.cs

namespace HiyerarsiTestCS
{
    using System;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data.SqlClient;
    using System.Data;
    using System.Configuration;
 
    public partial class _Default : System.Web.UI.Page
    {
 
        public string BaglantiStr
        {
            get { return ConfigurationManager.ConnectionStrings["baglanti"].ConnectionString; }
        }
 
 
 
 
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                this.getRoot();
            }
        }
 
 
        void getRoot()
        {
            using (DataTable dt = new DataTable())
            {
                using (SqlConnection conn = new SqlConnection(BaglantiStr))
                {
                    conn.Open();
                    using (SqlCommand cmd = new SqlCommand())
                    {
                        cmd.Connection = conn;
                        cmd.CommandText = "SELECT * FROM Personeller Where ParentID=0";
                        dt.Load(cmd.ExecuteReader());
                        dtRoot.DataSource = dt.DefaultView;
                        dtRoot.DataBind();
                    }
                }
            }
        }
 
 
 
        DataTable getChildItem(int ParentID)
        {
            using (DataTable dt = new DataTable())
            {
                using (SqlConnection conn = new SqlConnection(BaglantiStr))
                {
                    conn.Open();
                    using (SqlCommand cmd = new SqlCommand())
                    {
                        cmd.Connection = conn;
                        cmd.CommandText = "SELECT * FROM Personeller Where ParentID="+ParentID.ToString();
                        dt.Load(cmd.ExecuteReader());
                        return dt;
                    }
                }
            }
        }
 
 
        // Ana Elemanlar Çekiliyor
        protected void dtRoot_ItemDataBound(object sender, DataListItemEventArgs e)
        {
            Literal refLt = new Literal();
            refLt = e.Item.FindControl("ltID") as Literal;
 
                DataTable dtChilds = new DataTable();
                dtChilds = this.getChildItem(int.Parse(refLt.Text.Trim()));
 
                //Çocuklar varmi :)?
                if (dtChilds.Rows.Count > 0)
                {
                    DataList dtSub = new DataList();
                    dtSub.ItemDataBound += new DataListItemEventHandler(dtSub_ItemDataBound);
                    dtSub.RepeatColumns = 10;
                    dtSub.CellSpacing = 5;
                    dtSub.ItemTemplate = new MyTemplate(ListItemType.Item); // ItemTemplate Dinamik Olusturuluyor (RunTime)
                    dtSub.DataSource = dtChilds.DefaultView;
                    dtSub.DataBind();// <-- çagrildiginda dtSub_ItemDataBound tetiklenecek !
                    e.Item.Controls.Add(dtSub);// Alt DataList Ekleniyor dtRoot DataList Nesnesine
                }
        }
 
 
 
        // Sub in Sub i Çekiliyor
        void dtSub_ItemDataBound(object sender, DataListItemEventArgs e)
        {
            Literal ltSub = new Literal();
            ltSub.ID = "ltSubID";
            ltSub.Text =DataBinder.Eval(e.Item.DataItem, "ID").ToString();
            ltSub.Visible = true;
            e.Item.Controls.Add(ltSub);
 
            Literal refLt = e.Item.FindControl("ltSubID") as Literal;
 
 
            DataTable dtChilds=new DataTable();
            dtChilds=this.getChildItem(int.Parse(refLt.Text.Trim()));
 
            //Çocuklar varmi :)?
            if (dtChilds.Rows.Count>0)
            {
                DataList dtSub = new DataList();
                dtSub.Controls.Add(new Literal() { Text = DataBinder.Eval(e.Item.DataItem, "ID").ToString(), ID = "ltSubID" });
                dtSub.ItemDataBound += new DataListItemEventHandler(dtSub_ItemDataBound);
                dtSub.RepeatColumns = 10;
                dtSub.CellSpacing = 5;
                dtSub.ItemTemplate = new MyTemplate(ListItemType.Item);
                dtSub.DataSource = dtChilds.DefaultView;
                dtSub.DataBind();
                e.Item.Controls.Add(dtSub);// Alt DataList Ekleniyor Sub ina Kadar :)
            }
        }
 
    }
 
 
    public class MyTemplate : ITemplate
    {
        ListItemType _itemType;
 
 
        //Constructor
        public MyTemplate(ListItemType Type)
        {
            _itemType = Type;
        }
 
        public void InstantiateIn(System.Web.UI.Control container)
        {
            Literal lc = new Literal();
            switch (_itemType)
            {
                case ListItemType.Header:
                    lc.Text = "";
                    break;
                case ListItemType.Item:
                    lc.DataBinding += new EventHandler(TemplateControl_DataBinding);
                    break;
                case ListItemType.Footer:
                    lc.Text = "";
                    break;
            }
            container.Controls.Add(lc);
        }
 
 
 
        private void TemplateControl_DataBinding(object sender, System.EventArgs e)
        {
            Literal lc;
            lc = (Literal)sender;
            DataListItem container = (DataListItem)lc.NamingContainer;
            string advesoyad = DataBinder.Eval(container.DataItem, "Ad").ToString() + " - " + DataBinder.Eval(container.DataItem, "Soyad").ToString();
            lc.Text = @"<div style='padding:4px;'>" + advesoyad + " <br/><img src='../images/" + DataBinder.Eval(container.DataItem, "SimgURL") + "' width='175px' height='175px' alt='' style='border:none;'/></div>";
        }
   }
}
 

Uygulamanin çalisir halini asagidan görebilirsiniz

 
Uygulamaya ait kaynak kodlari buradan indirebilirsiniz.Umarim Faydali olmusumdur
Ismail Kocacan (Yazilimci Bozuntusu)

Kategori : Asp.Net | 23.12.2010 15:30:00  | 2753 defa okundu  | 1 Yorum |

Yazara Ait Diğer Makaleler(51) Makaleye Yapılan Yorumlar Yorum Yazıcam
İsmail Kocacan | 21.07.2011 19:00:00
Test Comment
Ara
 
Anket
Hangi VeriTabanı Yönetim Sistemini Kullanıyorsunuz ?