TreeView Alt bölüm ekleme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
delphikursu
Üye
Mesajlar: 99
Kayıt: 24 Tem 2004 05:13
Konum: kayseri
İletişim:

TreeView Alt bölüm ekleme

Mesaj gönderen delphikursu »

ben alt alta bölümler açmak istiyorun en az 4 tane alt alta alan açmam gerekiyor ben yanlızca 2 tane acabildim databesde çağırma yaprak açmam gerekiyo benim yazdığım kod


IBTable2.First;
if IBTable1ANA_STOK_GRUP_NO.AsInteger=0 then
node:=TreeView1.Items.Add(nil,IBTable1GRUP_ADI.AsString);
while not IBTable2.Eof do
begin
if IBTable1STOK_GRUP_NO.AsInteger=IBTable2ANA_STOK_GRUP_NO.AsInteger then
begin
node1:=TreeView1.Items.AddChild(node,IBTable2GRUP_ADI.AsString);
if (IBTable1GRUP_KODU.AsInteger=IBTable1SIRA_NO.AsInteger) and (IBTable1SEVIYE.AsInteger=3) then
TreeView1.Items.AddChild(node1,IBTable2GRUP_ADI.AsString);
//yukarıdaki kod çalışmıyor
end;
IBTable2.Next;
end;
IBTable1.Next;

Acil
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
önce birinci seviyedeki nodları yükle.
sonra onselec( olması lazım olayın adını tam hatırlamıyorum) olayındada ilgili nodun alt nodlarını yüklersin. bu arada nodların data sını ekleyerek sana lazım olan key leri tutabilirsin.
şu an iş yerinde değilim.
işyerine geçersem(en erken yarın) daha net bilgi verebilirim.
kolaygelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
delphikursu
Üye
Mesajlar: 99
Kayıt: 24 Tem 2004 05:13
Konum: kayseri
İletişim:

node

Mesaj gönderen delphikursu »

ben while do alt alta eklemeyi duşünüyodum 3 while do dan sonra hata veriyor sebebini anlayamadım iç içe olmasına kızıyo her halde ben node ekledikten sonra nasıl geri bulabilirim ki anlamadım
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
node ların data özelliği var. ona eklediğin kaydın id sini atacaksın.
daha sonra o node seçildiği zaman onun datasında id sini bulup alt tablodaki kayıtları çekeceksin. kayıtları ona aktaracaksın.
şöyle anlatmaya çalışıyım.
önce node için kullanacağımı dtanın tipini belirliyoruz.
bu birinci alanımız birden fazla olduğu zamanlarda kullanmak için yapılmış bir örnekten alınıtıdır.

Kod: Tümünü seç

type
adrestype=array[0..7]of word:;
daha sonra kullanacağımız değişkenleri tanımlıyoruz

Kod: Tümünü seç

var
  Buraya,
  MyNode: ttreenode; //atamalarda bu iki nodu kullanacağız.
  adresT : ^adresType; //nodelarımıza atama yaparken 
   //bu değişkenleri kullanacağız
kullanıcı bir node doubleclikc yaptığı zamana

Kod: Tümünü seç

    Buraya := treeview1.selected; //seçili olan nodu değişkene atıyoruz
    if buraya.Count=0 then
       ekle(buraya.Level+1);//ekle proceduresi kendi yazdığımız bir presedür.
ve ekle prosedürü

Kod: Tümünü seç

Procedure TFXXXXX.ekle(hangisi:byte);
Var
s:string;
Begin
  case hangisi of
    0://ana kayıtlar
      begin
        anakayitlar.Open;
        while not anakayitlar.Eof do
        begin
          MyNode := TreeView1.items.add (Nil, anakayitlaradi.asstring);
          mynode.ImageIndex:=hangisi;
          new (adrest);
          fillchar (adrest^, sizeof (adrest^), 0);
          adrest^ [0] := anakayitID.asinteger;
          MyNode.Data := adrest;  //dispose yapmak yok
          mynode.ImageIndex:=hangisi;
          mynode.StateIndex:=-1;
          anakayitlar.Next;
        end;
        anakayitlar.Close;
      end;
    1://
      Begin
        detay1.Open;
        while not detay1.Eof do
        begin                                   //buraya burada kullaniliyor
          MyNode := TreeView1.items.AddChild (buraya, trim(detay1adi.asstring');
          new (adrest);
          fillchar (adrest^, sizeof (adrest^), 0);
          adrest^ [0] := anakayitlar_id
          adrest^ [1] := detay_id;
          MyNode.Data := adrest;
          mynode.ImageIndex:=hangisi;
          mynode.StateIndex:=-1;
          detay1.Next;
        end;
        detay.close.Close;
      end;
  if buraya <>nil then buraya.Expand(true);
genel olarak böyle bişeyler yapabilirsin.
procedureleri biraz kısalttım. ama mantığı anlaman açısından örnek olarak kullanabilirsin.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
delphikursu
Üye
Mesajlar: 99
Kayıt: 24 Tem 2004 05:13
Konum: kayseri
İletişim:

teşkür

Mesaj gönderen delphikursu »

hocam sağlosın ekledim şimdi söyle bir sorunum var
ben bu kayıtdaki bilğiye göre sorgulama yapmak istiyorum yani databasde field şöyle
stok no grup no ana grup no grup adı
1 1 1 aaaaa
2 2 1 bbbbb

gibi treewiev ekledim ama bana stokno treewiev tıkladığında hanğisine geldiğini bilmem gerekiyo yani aaaaa treewiev tıkladım mı aaa nın stok no 1 olduğunu nasıl anlarım

yardımların için allah razı olsun hocam
Kullanıcı avatarı
tuanna
Üye
Mesajlar: 582
Kayıt: 06 Ara 2004 05:01
Konum: Ankara
İletişim:

Mesaj gönderen tuanna »

Aşağıda bir Programda kullandığım Kodlardan bir kesit...
incelersen sanırım sorularına cevap olur...

Kod: Tümünü seç

Procedure TFrmolusansorular.Kaynaklarlistesiniolustur(yuklenecekyer:TRzTreeView);
var
sqlkaynaktur,sqlkaynak:TADOQuery;
altkonularyuklenirkenkullanilacakdeger:Integer;
begin
altkonularyuklenirkenkullanilacakdeger:=0;
yuklenecekyer.Items.Clear;
sqlkaynaktur:=TADOQuery.Create(self);
sqlkaynak:=TADOQuery.Create(self);
sqlkaynaktur.Connection:=Frmmain.veritabanibaglantisaglayici;
sqlkaynak.Connection:=Frmmain.veritabanibaglantisaglayici;
sqlkaynak.close;
sqlkaynak.SQL.Clear;
sqlkaynak.SQL.Add(' SELECT kaynak.kaynakno FROM kaynak');
sqlkaynak.Open;
SetLength(kaynaklar,sqlkaynak.RecordCount);
sqlkaynaktur.close;
sqlkaynaktur.SQL.Clear;
sqlkaynaktur.SQL.Add('SELECT DISTINCT kaynaktur.kaynakturno, kaynaktur.kaynakturadi FROM kaynaktur INNER JOIN kaynak ON kaynaktur.kaynakturno = kaynak.kaynakturno');
sqlkaynaktur.Open;
sqlkaynaktur.First;


while not sqlkaynaktur.Eof do
begin
 nodekaynaktur:=yuklenecekyer.Items.Add(nil,sqlkaynaktur.FieldList.Fields[1].AsString);
 nodekaynaktur.ImageIndex:=0;
 nodekaynaktur.SelectedIndex:=0;
 sqlkaynak.close;
 sqlkaynak.SQL.Clear;
 sqlkaynak.SQL.Add('SELECT DISTINCT kaynak.kaynakturno, kaynak.kaynakno, kaynak.kaynakadi, kaynak.kaynakyayinevi, kaynak.kaynakyazari FROM kaynak WHERE (((kaynak.kaynakturno)='+sqlkaynaktur.FieldList.Fields[0].AsString+'))');
 sqlkaynak.Open;
 sqlkaynak.First;
 while not sqlkaynak.Eof do
 begin
 nodekaynak:=yuklenecekyer.Items.AddChild(nodekaynaktur,sqlkaynak.FieldList.Fields[2].AsString);
 // +' '+sqlkaynak.FieldList.Fields[3].AsString+' '+sqlkaynak.FieldList.Fields[4].AsString);
 nodekaynak.ImageIndex:=2;
 nodekaynak.SelectedIndex:=3;
 kaynaklar[altkonularyuklenirkenkullanilacakdeger].kaynakno:=sqlkaynak.FieldList.Fields[1].AsInteger;
 kaynaklar[altkonularyuklenirkenkullanilacakdeger].kaynakadi:=sqlkaynak.FieldList.Fields[2].AsString;
 kaynaklar[altkonularyuklenirkenkullanilacakdeger].kaynakyayinevi:=sqlkaynak.FieldList.Fields[3].AsString;
 kaynaklar[altkonularyuklenirkenkullanilacakdeger].kaynakyazari:=sqlkaynak.FieldList.Fields[4].AsString;
 altkonularyuklenirkenkullanilacakdeger:=altkonularyuklenirkenkullanilacakdeger+1;
 sqlkaynak.Next;
 end;
 sqlkaynaktur.Next;
 end;
sqlkaynaktur.Free;
sqlkaynak.Free;
end;
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
data kısmında istediğin bilgileri ekleyerek yapabilrsin.
tip tanımlaması yaparken record oluşturup onu dataya atarak yapabilirsin.
oluşturacağın recordda istediğin bilgileri tutabilirsin.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
delphikursu
Üye
Mesajlar: 99
Kayıt: 24 Tem 2004 05:13
Konum: kayseri
İletişim:

treeview

Mesaj gönderen delphikursu »

hocam ben derdimi anlatamadım her halde sorun şu kişi databese bilğileri giriyor buna görede ağaç yapısını oluşturuyorum bunu yaptım şimdi sorun şu ağaç yapısındaki bir nesneye tıkladım mı filitreleme yapmam lazım grupnosuna göre amam treeview grup adını yazdırdım databesde gurpno var ama nasıl ulaşacağımı bilmiyorum
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
sanırım ben anlatamadım.
grupadını treeviewa yazdırırken
node ların data özelliğine grupıd sini ekleyeceksin.
sonra bir nod seçildiği zaman o nodun data sında grupid sini bulacaksın.
tablonuda bulduğun o idye göre filitreleyeceksin.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
tuanna
Üye
Mesajlar: 582
Kayıt: 06 Ara 2004 05:01
Konum: Ankara
İletişim:

Mesaj gönderen tuanna »

evet ben bunu düşünemmeiştim dikkat etti isen kodlarım arasında ben bir dizi kullanmışım ama şimdi bunun için aslında dizi kullanarak bir indexleme yapmama gerek yokmuş...

sağ aslangeri hocam !
Siz hayal edin...Biz yapalım TuannaSoft...
delphikursu
Üye
Mesajlar: 99
Kayıt: 24 Tem 2004 05:13
Konum: kayseri
İletişim:

sorun şu

Mesaj gönderen delphikursu »

ben aslında bir prg arayüz yazıyorum sorun şu gurupno ve stokno bir databasede stok no stok adı bir databesde ve grup adı grupno bir database de ben grup databaseden ağaç yapısını yaptım filreleme yapmam lazımki ürünler gelsin onun içinde şöyle bir kod kullandım

Data.kirilma1.Locate('GRUP_ADI',TreeView1.Selected.Text,[loCaseInsensitive]);
data.ana.Filter:='STOK_GRUP_NO ='+data.kirilma1STOK_GRUP_NO.AsString;
data.ana.Filtered:=true;

şimdide hata ver,yo hata

aritmetik hata, nümerik taşıma yada karekter fazlası diye ben ne yapmalıyım ve pazertesiye tetiştirim demiştim acaba yetiştirebilirmiyim
Kullanıcı avatarı
tuanna
Üye
Mesajlar: 582
Kayıt: 06 Ara 2004 05:01
Konum: Ankara
İletişim:

Mesaj gönderen tuanna »

aslangeri yazdı:s.a.
önce birinci seviyedeki nodları yükle.
sonra onselec( olması lazım olayın adını tam hatırlamıyorum) olayındada ilgili nodun alt nodlarını yüklersin. bu arada nodların data sını ekleyerek sana lazım olan key leri tutabilirsin.
şu an iş yerinde değilim.
işyerine geçersem(en erken yarın) daha net bilgi verebilirim.
kolaygelsin.
nodelerin data sı pointer tipinde nasıl veri ekleyecm bir türlü yapamadım...

bir code yazarsanız sevinirim..
Siz hayal edin...Biz yapalım TuannaSoft...
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

tabiki etmeye çalışırım.
ancak takıldığınız noktayı söylerseniz.
çünkü mantık olarak nasıl yapılacağını yukarda anlattım.

kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Cevapla