Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Treeview ile iç içe sonsuz gösterim
#1
Question 
Merhaba arkadaşlar, malzeme yönetimi için ürün reçete listelerinin saklı olduğu iki çeşit tablom var.
birisi malzeme listesinin bilgilerinin olduğu BOM tablosu,
diğeri ise bu liste içerisinde yer alan malzemelerin referans alındığı BOMLIST tablosu,

ayrıca bir de malzemelerin kayıtlı olduğu ITEMS tablom var.

aşağıdaki gibi sonsuz iç içe girebilen bir treeview gösterimini nasıl yapabilirim.

MODEL1
MODEL1-yarımamül1-malzeme1
MODEL1-malzeme1
MODEL2-yarımamül2-yarımamül3-malzeme2
MODEL2-yarımamül2-yarımamül3-malzeme3
MODEL2-yarımamül2-yarımamül3-malzeme4

fdquery ile kullandığım sorgu şu şekilde,

SELECT BOMLINE.BOMMASTERREF, ITEMS.Malzeme_adi, BOM.NAME FROM BOMLINE INNER JOIN BOM ON (BOMLINE.BOMMASTERREF = BOM.LOGICALREF) INNER JOIN ITEMS ON (BOMLINE.ITEMREF=ITEMS.ID) WHERE BOMLINE.LINETYPE=2 ORDER BY BOM.NAME, ITEMS.Malzeme_adi

tüm kodlarım ise şu şekilde,
procedure TMalzemelerForm.Button2Click(Sender: TObject);
var
 CurrentDeptID, RecordDeptID: Integer;
 RootNode, DeptNode: TTreeNode;
begin
 CurrentDeptID := 0;
 Treeview1.Items.Clear;
 RootNode := Treeview1.Items.Add(nil, 'RECETE');
 DeptNode := nil;
 FDQuerym.SQL.Text := 'SELECT BOMLINE.BOMMASTERREF, ITEMS.Malzeme_adi, BOM.NAME FROM BOMLINE INNER JOIN BOM ON (BOMLINE.BOMMASTERREF = BOM.LOGICALREF) INNER JOIN ITEMS ON (BOMLINE.ITEMREF=ITEMS.ID) WHERE BOMLINE.LINETYPE=2 ORDER BY BOM.NAME, ITEMS.Malzeme_adi';
 FDQuerym.Open;
 try
   FDQuerym.First;
   while not FDQuerym.Eof do
   begin
     RecordDeptID := FDQuerym.FieldByName('BOMMASTERREF').AsInteger;
     if (DeptNode = nil) or (RecordDeptID <> CurrentDeptID) then
     begin
       DeptNode := Treeview1.Items.AddChild(RootNode, FDQuerym.FieldByName('NAME').AsString);
       CurrentDeptID := RecordDeptID;
     end;
     Treeview1.Items.AddChild(DeptNode, FDQuerym.FieldByName('Malzeme_adi').AsString);
     FDQuerym.Next;
   end;
 finally
   FDQuerym.Close;
 end;
end;

bu komutlar ile 1 adet child oluşturabiliyorum ama sonsuz child olmuyor. nasıl yapabilirim

şimdiden teşekkür ederim.
There is no place like "127.0.0.1"

"Vatanını en çok seven, görevini en iyi yapandır."

Cevapla
#2
Merhaba,
Bu yapı için öncelikle tablonuzda id (primary key olmalı), parent_id ve bir başlık alanınız olmalı.
İç içe geçecek tüm kayıtlar aynı tabloda olmalı.
örnek
   

Parent_id başlığın hangi ana gruba bağlı olduğunu gösterir.
Parent_id -1 verirseniz (yada herhangi bir id de olabilir.) bu doğrudan ana dizin (root) olur. 

O kadar koda da gerek kalmaz. 
Tek satırda sonsuz adet içe içe kayıt oluşturup listeleyebilirsiniz. 
Düzeltme:  tabloyu design time da open ederseniz o tek satır koda da gerek kalmaz. Shy

örnek uygulama
   

Kullanılan bileşen, dxDBTreeView
Ayarlanan özellikleri
   
Begin : = end / 2;
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  ekranda uyari ve mesaj gosterim sekilleri hk. sadikacar60 4 825 06-12-2024, Saat: 22:50
Son Yorum: sadikacar60
  Acayip bir karakter gösterim durumu delphicim 3 1.412 10-11-2023, Saat: 12:24
Son Yorum: delphicim
  treeview den popup menuye aktarım shooterman 13 3.183 05-09-2023, Saat: 10:29
Son Yorum: shooterman
  FastReport detail tablo gösterim sorunu Frrst 12 3.644 14-07-2023, Saat: 17:10
Son Yorum: hi_selamlar
  [ÇÖZÜLDÜ] treeview tarzı dbgrid önerisi shooterman 1 2.363 18-07-2019, Saat: 01:39
Son Yorum: fduman07



Konuyu Okuyanlar: 2 Ziyaretçi