TreeView的節點唯一對應資料庫ID欄位的問題

2021-06-20 09:31:31 字數 1781 閱讀 8063

參看帖子

可以用乙個 tstrings 來維護這個對應關係,在增加乙個 node 的之後,增加乙個 object 到 tstrings,刪除乙個 node 之後,在 tstrings 也同時刪除那個 item。做 clear 的時候,先 treeview.items.clear, 再 strings.clear。下面是乙個例子(增加、刪除節點時根本不用重新整理的):

var fidlist: tstrings;

procedure tform1.formcreate(sender: tobject);

begin

// 建立 tstrings 的物件 fidlist

fidlist := tstringlist.create;

end;

procedure tform1.formdestroy(sender: tobject);

begin

// 清除物件 fidlist

treeview1.items.clear; // 很重要,不然會出錯

fidlist.destroy;

end;

procedure tform1.addnodeclick(sender: tobject);

var node: ttreenode;

text: string;

begin

// 實際操作的時候,text 和 id 都是從資料庫中讀出的

text := 'text' + inttostr(treeview1.items.count);

node := treeview1.items.addchild(nil, text);

fidlist.addobject('id_' + text, node);

end;

procedure tform1.treeview1deletion(sender: tobject; node: ttreenode);

begin

// 刪除節點時同時刪除關聯

fidlist.delete(fidlist.indexofobject(node));

end;

procedure tform1.delnodeclick(sender: tobject);

begin

// 刪除節點

if treeview1.selected <> nil then

treeview1.selected.delete;

end;

procedure tform1.getnodeclick(sender: tobject);

var node: ttreenode;

begin

// 通過 id 訪問 node

if fidlist.indexof(edit1.text) >= 0 then

begin

node := ttreenode(fidlist.objects[fidlist.indexof(edit1.text)]);

showmessage(node.text);

end;

end;

procedure tform1.showselidclick(sender: tobject);

begin

// 取得乙個節點對應的 id 值

if treeview1.selected <> nil then

showmessage(fidlist.strings[fidlist.indexofobject(treeview1.selected)]);

end;

Cayley凱萊定理 一一對應

過 n 個有標誌頂點的樹的數目等於 n 此定理說明用 n 1 條邊將 n 個已知的頂點連線起來的連通圖的個數是 n 也可以這樣理解,將n個城市連線起來的樹狀網路有 n 種可能方案.所謂樹狀,指的是用 n 1 條邊將 n 個城市連線起來,即無環。當然,建造乙個樹狀網路一般是求其長度最短或造價最少等.c...

DLL程式設計一一對應標頭檔案約定

vc程式設計中我們一般採用 stdcall呼叫約定,並且生成的dll希望在c編譯環境下也能成功執行,所以我們通常在編寫dll時,在標頭檔案中一般新增如下定義 define exports 1 ifdef cplusplus ifdef exports define dll export extern...

hibernate 註解 一對多 唯一索引

今天被hibernate和mysql整了一下,切身感受到索引的重要性。我用的是hibernate註解的一對多對映,如下 onetomany cascade cascadetype.all,fetch fetchtype.lazy jointable name user followby joinco...