TreeView doldurma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
oguzozturk74
Kıdemli Üye
Mesajlar: 574
Kayıt: 01 Şub 2004 12:29
Konum: Erdemli - MERSİN

TreeView doldurma

Mesaj gönderen oguzozturk74 »

Elimde ki tablo yapısı şu şekilde :

Kod: Tümünü seç

CREATE TABLE GRUP (
    GRUP_NO           DMN_NO      NOT NULL,
    UST_GRUP_NO       DMN_NO      NOT NULL,
    GRUP_ADI          DMN_AD      NOT NULL    COLLATE PXW_TURK
);
ben buradaki bilgileri treeview içerisine doldurmak istiyorum. Söz konusu tablo ürün ağacı ve treeview de bunu listeleyecek.
Kullanıcı ürün ağacını kendisi oluşturuyor . cxLookupTreeView ile istediğimi alıyorum ama ben rzCheckTreeView ile bunu göstermek istiyorum . Böylece kullanıcı istediği grupları seçebilecek .

Aşağıda ki gibi birşey yapıyorum , ama treeview de sadece tek bir seviye halinde geliyor .

Kod: Tümünü seç

procedure TFRM_URUN_FIYAT_GUNCELLE.FormShow(Sender: TObject);
var
  VAR_ANA_KOK , VAR_ALT_KOK : TTreeNode;
  VAR_UST_GRUP_ADI : string;
begin
  inherited;
  with QRY_URUN_GRUP do
  begin
    Close;
    SQL.Clear;
    SQL.Add('select G1.GRUP_ADI as ANA_GRUP_ADI,G2.GRUP_ADI as GRUP_ADI');
    SQL.Add('from GRUP G1 left outer join GRUP G2 on (G1.UST_GRUP_NO=G2.UST_GRUP_NO)');
    SQL.Add('where G1.SIRKET_NO= :SIRKET_NO');
    SQL.Add('group by G1.GRUP_ADI,G2.GRUP_ADI');
    Open;
    Close;
    Prepare;
    ParamByName('SIRKET_NO').AsInteger := DTM_MAIN.DSet_SIRKET.Fieldbyname('SIRKET_NO').AsInteger ;
    OPEN;
    VAR_UST_GRUP_ADI := '';
    DisableControls;
    CheckTreeView.Items.Clear;
    While not EOF do
    begin
      if VAR_UST_GRUP_ADI<>FieldByName('ANA_GRUP_ADI').Value then
      begin
        VAR_ANA_KOK := CheckTreeView.Items.Add(nil,FieldByName('ANA_GRUP_ADI').Value);
        VAR_UST_GRUP_ADI := FieldByName('ANA_GRUP_ADI').Value;
      end;
      if VAR_UST_GRUP_ADI<>FieldByName('ANA_GRUP_ADI').Value then
      begin
        VAR_ALT_KOK := CheckTreeView.Items.AddChild(VAR_ANA_KOK,FieldByName('GRUP_ADI').Value);
      end;
      Next;
      EnableControls;
    end;
  end;
end;
Nasıl bir döngü kurmalıyım acaba ?

FireBird1.5 , Delphi7 , IBX kullanıyorum.
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Selamlar,

Oğuz, AddChild gibi bir şey yok mu? Dikkat edersen sen hep aynı seviyeye ekleme yapıyorsun.

Yani kim kiimin altında bilerek Add etmen gerekiyor

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

yaaa pardon yaaa

Ben iyice dağılmışım yarın bakarız pardoooon..


İyi akşamlar
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Mesaj gönderen abdulkadir »

S.A
rzCheckTreeView için degil ama normal TreeView için
şu an test etmediim ama daha önce Biraz degiştirerek kullanmıstım.
insallah işine yarar.

Kod: Tümünü seç

procedure TForm1.MakeSubTree( aTree: TTreeView;
                              aQuery: TQuery;
                              aLevel: Integer;
                              aParent: TTreeNode;
                              aParentField: string );
var
  aParentValue: Integer;
  aEnd: Boolean;

begin
  aEnd:= false;
  aParentValue:= aQuery.FieldByName( aParentField ).AsInteger;
  while ( not aQuery.Eof ) and ( not aEnd ) do
  begin
    if aParentValue = aQuery.FieldByName( aParentField ).AsInteger then
    begin
      if aQuery.FieldByName( 'AL' + IntToStr( aLevel ) ).AsInteger <> 0 then
      begin
        aNode:= aTree.Items.AddChild( aParent, aQuery.FieldByName('OSSZAM').AsString );
        if aLevel < 4 then
          MakeSubTree( aTree, aQuery, aLevel + 1, aNode, 'AL' + IntToStr( aLevel ) );
      end { then }
      else
        aEnd:= true;
    end { then }
    else
      aEnd:= true;
    if not aEnd then
      aQuery.Next;
  end; { while }
end;

procedure TForm1.MakeTree( aTree: TTeeView; 
                          aQuery: TQuery );
var
  aRoot: TTreeNode;

begin
  aTree.Items.BeginUpdate;
  try
    aTree.Items.Clear;
    while not aQuery.Eof do
    begin
      aRoot = aTree.Items.Add( nil, aQuery.FieldByName('OSSZAM').AsString );
      MakeSubTree( aTree, aQuery, 1, aRoot, 'RESZ' );
      aQuery.Next;
    end; { while }
  finally
    aTree.Items.EndUpdate;
  end; { finally }
end;


  aTree: TTreeView; 
  aQuery: TQuery;
  MakeTree( TreeView1, Query1 );
Kullanıcı avatarı
sychorax
Üye
Mesajlar: 206
Kayıt: 20 May 2004 04:29

Mesaj gönderen sychorax »

Selamlar
Ben master-detail olarak şöyle yaptım.Belki fikir verir(Data1:Master,Data2:Detail)

Kod: Tümünü seç

var
a:TTreeNode;
begin
data1.First;
data2.First;
while not data1.Eof do
  begin
    a:=RzCheckTree1.Items.AddFirst(nil,data1masteralan.AsString);
    while not data2.Eof do
      begin
        RzCheckTree1.Items.AddChild(a,data2detailalan.AsString);
        data2.Next;
      end;
    data1.Next;
  end;
end;
oguzozturk74
Kıdemli Üye
Mesajlar: 574
Kayıt: 01 Şub 2004 12:29
Konum: Erdemli - MERSİN

Mesaj gönderen oguzozturk74 »

Arkadaşlar cevaplarınız için teşekkürler . Sorun treeview ı doldurmak değil.
Kullanıcı ağacı kendisi oluşturuyor , bunda bir sorun yok .
Ama ben bunu tekrardan treeview a doldurmak istiyorum. Burda ağaçta kaç tane dal olacak belli değil . Eğer dal sayısı belli olsa kolay , ama belli değil .

Kod: Tümünü seç

-A 
  ........ 
-B
  -B1
     -B12
        .
        .
        .
  -B2
-C
  -C1
     -C12
        -C21
           -C13 ............
-D
-E
  .
  .
  .
  .
gibi birşeyler..
Kullanıcı avatarı
tuanna
Üye
Mesajlar: 582
Kayıt: 06 Ara 2004 05:01
Konum: Ankara
İletişim:

Mesaj gönderen tuanna »

işte aynı sorun bu gun akşama kadar çıldırdım bu hususta
oguzozturk74
Kıdemli Üye
Mesajlar: 574
Kayıt: 01 Şub 2004 12:29
Konum: Erdemli - MERSİN

Mesaj gönderen oguzozturk74 »

Sorunu su sekilde halletmiştim:
Agacı olusturduktan sonra agac yapısını bir XML belgesi olarak saklıyorum ve
daha sonra bu XML belgesini ilgili TreeView a geri yukluyorum .
Cevapla