如何以Locate方式查詢TreeView的Node |
答題得分者是:Justmade
|
mcho
初階會員 發表:57 回覆:106 積分:42 註冊:2002-11-11 發送簡訊給我 |
|
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
你可以用一個 TClientDataSet 來記住你要 locate 的欄位和相對TreeNode 的 Absolute index,這樣你就可以用 TClientDataSet 來locate 然後用得出的 absolute index 直接去到相對的 Node 了。 不連結數量庫而使用 TClientDataSet
1. 雙擊 該 ClientDataSet
2. 右擊,選 New Field 來加入欄位
3. 加入所有欄位後右擊該 ClientDataSet, 選 Create DataSet 即可 你可於每次開該 Form 時動態 insert 入 該 ClientDataSet 中,或在 Filename 輸入檔案名讓該 ClientDataSet 自動存取資料到該檔案中。
|
mcho
初階會員 發表:57 回覆:106 積分:42 註冊:2002-11-11 發送簡訊給我 |
Hi! Justmade:你好!謝謝你!
你指ClientDataSet是Midas page 的ClientDataSet嗎?
因為我用ADOQuery利用下列函式讀入的:
procedure TForm1.ConStruct_Tree(Parent_Node:TTreeNode;
Parent_Text:String);
//建立動態TreeViewvar
Tmp_Query:TAdoQuery;
Tmp_Str:String;
Tmp_Node:TTreeNode;
begin
//下SQL指令找資料
Tmp_Query:=QueryCreate;
Tmp_Str:='SELECT * FROM TREES '
' WHERE PARENT="' Parent_Text '"'
' Order By PARENT, Child';
OpenSQL(Tmp_Query,Tmp_str);
//再將資料一個個塞入Treeview中
while not Tmp_Query.Eof do
begin
Tmp_Node:=trvmain.items.AddChild(Parent_Node,Tmp_Query.FieldByName('child').AsString);
Try
//遞迴...
ConStruct_Tree(Tmp_Node,Tmp_Query.FieldByName('child').AsString);
except
messagebox(Form1.handle,'資料庫有問題,請先檢查資料庫','檢查資料庫',mb_ok); end;
Tmp_Query.Next;
end;
Tmp_Query.Free;
//TrvMain.Focused()
end;
要如何利用ClientDataSet可否做一範例? 何明昌
------
何明昌 |
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
你是用 Delphi 5 的哦,就是 MIDAS 那個啦。 實作:
1. 加入 1 個 TClientDataSet (CDS) 2. 雙擊 CDS 3. 右擊 Editor,選 New Field 來加入你會用來 Locate 的欄位。 例如 : Field : Parent Type : String Size : 20 Field Type : Data 4. 加入其他你會用來 locate 的field 5. 加入存 absolute index 的 field Field : NodeIDX Type : Integer Field Type : Data 6. 右擊該 ClientDataSet, 選 Create DataSet 7. 在你動讀入TreeView 的程式碼每加入一個 Node 同時將相關資料 insert 入 CDS CDS.Insert; CDSParent.Value := Tmp_Query.FieldByName('parent').AsString .... CDSNodeIDX.Value := TempNode.AbsoluteIndex; CDS.Post; 8. 要 locate 時 if CDS.Locate('Parent',*parent value*,[*options*]) then TreeView.selected := TreeView.Items[CDSNodeIDX.Value];差不多就這樣,因為我的腦袋 complier 的 debugger 功能不強,可能有些錯都不定,試試看罷。 |
mcho
初階會員 發表:57 回覆:106 積分:42 註冊:2002-11-11 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |