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; }
}
}
{
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;
}
}
{
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 );
}
{
/* 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");
}
{
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