treeview create

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
tears
Üye
Mesajlar: 79
Kayıt: 29 Kas 2004 12:32

treeview create

Mesaj gönderen tears »

dinamik bir treeview oluşturmaya çalışıyorum. tablosu gayet basit.
FolderID FolderName ParentID

Kullanıcı yeni klasör dediği zaman seçili olan klasörü bulup onun altına ad kısmı boş olan yeni bir klasör açmak istiyorum. Klasör adını kullanıcı girdikten sonra yazmam gereken parentID yi nasıl bulacağım. yani bu klasör neyin altında?

create ederken problem oluşuyor. Çünkü iki aynı klasör adı varsa sql bana iki kayıt döndürüyor. ama ben sadece 1. kayıdı create edebiliyorum?

böyle bir örnek yapabilirmisiniz ?
ertug
Üye
Mesajlar: 82
Kayıt: 10 Ara 2004 05:41

Mesaj gönderen ertug »

Burada bir tasarım hatası söz konusu. Tabloda tekil bir alan olmalı (unique key), ki bu da muhtemelen FolderID olacaktır. Yapacağınız sorgu FolderName üzerinden değil de FolderID üzerinden olmalı. Bu sayede çoklu sonuçlar almazsınız.

Eğer "TreeView"daki elemanların FolderID'lerini tutmak istiyorsanız, genelde kullandığım metodu vereyim. Biraz karışık olabilir.

Yeni bir uygulama oluşturun. (Form1) üzerine (TreeView1), (Button1) ve (Label1) koyun.

(TreeView1)e veri eklemek için:

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
  aTreeNode: TTreeNode;
begin
  aTreeNode := TreeView1.Items.AddFirst(nil, 'İlk');
  aTreeNode.Data := Pointer(1); { <- bu hardcoded 1 yerine veritabanından veri atamalısınız. Yapılan iş, elemanın "Tag"ine sayı atamak gibi düşünülebilir. Ama "Data"nın türü Pointer olduğundan sayıyı "Pointer"a typecast etmeliyiz (ikisi de 4 byte, cast edilebilir) }
  aTreeNode := TreeView1.Items.AddChild(aTreeNode, 'İkinci');
  aTreeNode.Data := Pointer(2);
end;
Verilerin "FolderID"lerini okumak için

Kod: Tümünü seç

procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
  if Assigned(Node) then
    Label1.Caption := IntToStr(Integer(Node.Data));  //yukardaki "cast"in tersini yapıyoruz
end;
Anlaşılmayan bir nokta varsa çekinmeden sorunuz.

Ertuğ Kaya
Cevapla