Sirano
Parent (integer)
Num (integer)
Adi
..
şeklinde bir tablom var bu tablodaki verileri parent ve child ilişkisine bağlı olarak bir treeview de göstermek istiyorum.Yazdığım kodda sadece 3 basamağa kadar gösterme işlemi yapabildim bu işlemi sonsuz yani kullanıcının istediği kadar alt basamağa sahip bir master - detay ilişkisini treeview'de nasıl gösterebilirim.
İşlemi bir while döngüsü içine eklemeye çalıştım fakat yapamadım.tavsiyelerinizi bekliyorum.
teşekkürler...
Yazdığım kod:
Öncelikle parent sütunu boş olanları tespit edip treeview'e ekliyorum daha sonrada bağlantılı bilgileri treeviewe ekliyorum.
Kod: Tümünü seç
procedure TfrmKarttaAra.AgacGoster(Sirano:integer);
var
i,Yer:integer;
ArananNum:string;
Agac:TTreeNode;
begin
try
Tree.Items.Clear;
with Tree.Items do
begin
with qryAgac do
begin
close;
SQL.Clear;
SQL.Add('select sira,num,parent,adi from kart');
SQL.Add('where sira=:sirano');
ParamByName('sirano').Value:=SiraNo;
open;
first;
end;
while not (qryAgac.Eof) do
begin
Agac:=Add(nil,IntToStr(qryAgacNUM.Value) + '-' + qryAgacADI.Value);
qryAgac.Next;
end;
for i := 0 to Tree.Items.Count-1 do
begin
Yer:=pos('-',Tree.Items.Item[i].Text);
ArananNum:=copy(Tree.Items.Item[i].Text,0,yer-1);
with qryAgac do
begin
close;
SQL.Clear;
SQL.Add('select sira,num,parent,adi from kart');
SQL.Add('where parent=:numara');
ParamByName('numara').Value:=ArananNum;
open;
first;
end;
while not (qryAgac.Eof) do
begin
Agac:=Tree.Items.Item[i];
Agac:=Addchild(Agac,IntToStr(qryAgacNUM.Value) + '-' + qryAgacADI.Value);
qryAgac.Next;
end;
end;
for i := 1 to Tree.Items.Count-1 do //en alt uniteyi bulabilmek için
begin
Yer:=pos('-',Tree.Items.Item[i].Text);
ArananNum:=copy(Tree.Items.Item[i].Text,0,yer-1);
with qryAgac do
begin
close;
SQL.Clear;
SQL.Add('select sira,num,parent,adi from kart');
SQL.Add('where parent=:numara');
ParamByName('numara').Value:=ArananNum;
open;
first;
end;
while not (qryAgac.Eof) do
begin
Agac:=Tree.Items.Item[i];
Agac:=Addchild(Agac,IntToStr(qryAgacNUM.Value) + '-' + qryAgacADI.Value);
qryAgac.Next;
end;
end;
end;
except on E:Exception do
raise Exception.CreateFmt('Ağaç Görünümü Oluşturulamadı.'+#13+'Hata Mesajı : ' +
'%s',[E.Message])
end;