4 Temmuz 2013 Perşembe

TreeView Kontrolüne Kullanıcı Tanımlı Nesneler Eklemek

Eğer node olarak ekleyeceğimiz nesnenin ToString() metodunu override eder, object tipinde verileri saklaması için TreeNode sınıfından yeni bir sınıf türetir ve object.ToString() dönüş değerini temel sınıfın constructor’ ına gönderirsek başarıya ulaşmışız demektir. Böylece Treeview kontrolünü sanki string tipinde nodelar saklıyormuş gibi aldatmış olacağız. :) Buraya kadar teorik bilgilere takılıp anlayamayanlar olabilir, uygulamada daha net anlaşılacak herşey.

public class DataTreeNode : TreeNode
{
private object data;

public DataTreeNode( object data ) : base ( data.ToString() )
{
this.data = data;
}

public object Data
{
get { return data; }
}
}

Örnek olarak Treeview kontrolümüzün Musteri adındaki bir sınıfın nesnelerini sakladığını düşünürsek;

public class Musteri
{
private string ad;
private string soyad;
private int yas;

public Musteri(string ad, string soyad, int yas)
{
this.ad = ad;
this.soyad = soyad;
this.yas = yas;
}

public string Ad
{
get { return ad; }
set { ad = value; }
}

public string Soyad
{
get { return soyad; }
set { soyad = value; }
}

public int Yas
{
get { return yas; }
set { yas = value; }
}

public override string ToString() // <------ DataTreeNode sınıfında temel constructora gönderilecek ToString() işte burası.
{
return ad + " " + soyad;
}
}

Şimdi Formumuza bir Treeview sürükle bırak yapıp, Formun OnLoad metodunda birkaç müşteri tanımlayıp nodelara ekleyelim.

private void Form1_Load(object sender, System.EventArgs e)
{
/* 1. müşteriyi treeye ekliyoruz. */
Musteri musteri = new Musteri("ali", "veli", 14);
DataTreeNode node1 = new DataTreeNode( musteri );
treeView1.Nodes.Add( node1 );

/* 2. müşteri */
musteri = new Musteri("ahmet", "kaya", 26);
DataTreeNode node2 = new DataTreeNode( musteri );
treeView1.Nodes.Add( node2 );

/* 3. müşteriyi 2. müşterinin altına ekliyoruz. */
musteri = new Musteri("bakkal", "hasan", 33);
DataTreeNode node3 = new DataTreeNode( musteri );
node2.Nodes.Add( node3 );
}

TreeView OnAfterSelect olayında ise seçili nodedan musteriyi alıp editboxlara DataBind yapalım.

private void treeView1_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
DataTreeNode node = (DataTreeNode) e.Node; // <--- Node DataTreeNode tipinde
txtAd.DataBindings.Clear();
txtSoyad.DataBindings.Clear();
txtYas.DataBindings.Clear();

txtAd.DataBindings.Add("Text", node.Data, "Ad");
txtSoyad.DataBindings.Add("Text", node.Data, "Soyad");
txtYas.DataBindings.Add("Text", node.Data, "Yas");
}



Hiç yorum yok:

Yorum Gönder