全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2533
推到 Plurk!
推到 Facebook!

TreeView節點問題

答題得分者是:小傑克
boss1215
一般會員


發表:6
回覆:10
積分:3
註冊:2009-03-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-03-16 18:27:47 IP:211.72.xxx.xxx 訂閱
麻煩各位大大幫我看一下該如何修改..

[code delphi]
procedure TForm1.Button1Click(Sender: TObject);
var
Rootnode,Newnode: TTreeNode;
begin
Treeview1.Items.Clear;
treeview1.Items.BeginUpdate;
with ADOMFB do
begin
sql.clear;
sql.add('select * from MF_BOM where BOM_NO like' QuotedStr('%' edit1.Text '%'));
close;
open;
rootnode:=treeview1.items.add(nil,ADOMFB.fieldbyname('BOM_NO').ASString (adomfb.FieldByName('NAME')).asstring);
TreeView1.Selected := TreeView1.Items.item[0];
TreeView1.SetFocus;
while not ADOMFB.eof do
begin
with ADOTFB do
begin
sql.Clear;
sql.Add('select distinct T.BOM_NO,T.PRD_NO,T.NAME,U.UNIT,T.QTY,U.PRD_KND,U.USEIN_NAME from TF_BOM AS T, TF_UKS AS U');
sql.Add('where T.BOM_NO=U.BOM_NO AND T.PRD_NO=U.PRD_NO AND T.BOM_NO like' QuotedStr('%' edit1.Text '%'));
/ / 在EDIT輸入查詢值後DBGrid直接出現查到的資料
close;
open;
first;
DBGrid1.Fields[0].DisplayLabel:='母件料號'; //設定DBGrid欄位名稱
DBGrid1.Fields[1].DisplayLabel:='子件料號';
DBGrid1.Fields[2].DisplayLabel:='品名';
DBGrid1.Fields[3].DisplayLabel:='單位';
DBGrid1.Fields[4].DisplayLabel:='數量';
DBGrid1.Fields[5].DisplayLabel:='大類';
DBGrid1.Fields[6].DisplayLabel:='組件位置';

while not adoTFB.Eof do
begin
Newnode:=treeview1.Items.AddChild(rootnode,adoTFB.fieldbyname('PRD_NO').AsString '->' ADOTFB.FieldByName('NAME').AsString);
next;
end;
end;
next;
end;
end;
treeview1.Items.EndUpdate;
end;

[/code]

1.例如 A 子節點下 還有B. C 子節點 ,而 B 子節點之下或許還有 D,都是由ADO連結sql而來
要如何能指定A節點?並設立以下的子節點

2.該如何點選Treeview中的節點.例如點選A..DBGrid會出現 A 的資料?



------
Wa
小傑克
資深會員


發表:5
回覆:209
積分:357
註冊:2009-02-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-03-16 23:13:52 IP:59.112.xxx.xxx 訂閱
http://delphi.ktop.com.tw/board.php?cid=30&fid=66&tid=97432

參考一下這個

第二個問題....點A之後 在treeview 有個node展開的事件, 裡面再用A的資料去查詢 例如 select .... from xxtable where XX=A 然後把dbgrid 指到那個query就可以
------
額有朝天骨,眼中有靈光
編輯記錄
小傑克 重新編輯於 2009-03-16 23:20:39, 註解 無‧
boss1215
一般會員


發表:6
回覆:10
積分:3
註冊:2009-03-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-03-18 15:25:00 IP:220.132.xxx.xxx 訂閱
TO 小傑克..
這篇我有研讀過很多次..才剛學程式..所以我仍做不出要的結果
問題二~~我知道寫在Treeview1click事件中..但該我如何寫出A節點(為其中一個子節點)的位置??是被選取的呢?



===================引 用 小傑克 文 章===================
http://delphi.ktop.com.tw/board.php?cid=30&fid=66&tid=97432

參考一下這個

第二個問題....點A之後 在treeview 有個node展開的事件, 裡面再用A的資料去查詢 例如 select .... from xxtable where XX=A 然後把dbgrid 指到那個query就可以
------
Wa
小傑克
資深會員


發表:5
回覆:209
積分:357
註冊:2009-02-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-03-18 18:32:00 IP:59.112.xxx.xxx 訂閱
我仔細看了一下你的程式.....幫你標幾個地方你注意一下
------
額有朝天骨,眼中有靈光
編輯記錄
小傑克 重新編輯於 2009-03-18 18:33:12, 註解 無‧
小傑克 重新編輯於 2009-03-18 18:59:07, 註解 無‧
小傑克 重新編輯於 2009-03-19 01:18:03, 註解 無‧
小傑克 重新編輯於 2009-03-19 01:48:30, 註解 無‧
小傑克
資深會員


發表:5
回覆:209
積分:357
註冊:2009-02-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-03-19 02:28:05 IP:59.112.xxx.xxx 訂閱
根據下面程式,你得到的結果應該是, 加入RootNode 以後開始跑 MFB的Loop , 假設MFB有5筆資料, 會Loop 5次, 這5次你都是用 相同的sql 去開啟
ADOTFB 假設 AdoTFB有三筆資料, 你是把這3筆加到 RootNode底下,連續5次,也就是一個RootNode 底下15個子node 而且都是重複的

底下是我的想法,你參考一下,依據你的需求, 點中Node的時候要開啟子node,並且DBGrid也顯示, 你可以在On Expanding 事件中才去
Open ADOTFB , 在原來Button1Click事件中 ADOTFB那段全部移過去
而且根據我看你的需求, 你用AddChild 不能解決, 要用AddChildObject ,這樣才能幫你多存一段資訊來關聯


===================引 用 boss1215 文 章===================
麻煩各位大大幫我看一下該如何修改..

[code delphi]
procedure TForm1.Button1Click(Sender: TObject);
var
Rootnode,Newnode: TTreeNode;
begin
Treeview1.Items.Clear;
treeview1.Items.BeginUpdate;
with ADOMFB do
begin
sql.clear;
sql.add('select * from MF_BOM where BOM_NO like' QuotedStr('%' edit1.Text '%'));
close;
open;
rootnode:=treeview1.items.add(nil,ADOMFB.fieldbyname('BOM_NO').ASString (adomfb.FieldByName('NAME')).asstring); //我注意到你在這邊放入第一個點
TreeView1.Selected := TreeView1.Items.item[0];
TreeView1.SetFocus;

while not ADOMFB.eof do
begin

with ADOTFB do //你的程式大腸包小腸, 建議你把 With 都拿掉,直接寫 ADOTFB.Sql.Clear .....會比較清楚
begin
sql.Clear; //這段SQL 顯然沒和 ADOMFB 關聯到, 那為何會放在 while not ADOMFB.eof do 裡面
sql.Add('select distinct T.BOM_NO,T.PRD_NO,T.NAME,U.UNIT,T.QTY,U.PRD_KND,U.USEIN_NAME from TF_BOM AS T, TF_UKS AS U');
sql.Add('where T.BOM_NO=U.BOM_NO AND T.PRD_NO=U.PRD_NO AND T.BOM_NO like' QuotedStr('%' edit1.Text '%'));
/ / 在EDIT輸入查詢值後DBGrid直接出現查到的資料
close;
open;
first;

{這段標Label 應該拉到function 最前面去寫, 這放在query loop裡面是沒意義的,白跑好幾次}
DBGrid1.Fields[0].DisplayLabel:='母件料號'; //設定DBGrid欄位名稱
DBGrid1.Fields[1].DisplayLabel:='子件料號';
DBGrid1.Fields[2].DisplayLabel:='品名';
DBGrid1.Fields[3].DisplayLabel:='單位';
DBGrid1.Fields[4].DisplayLabel:='數量';
DBGrid1.Fields[5].DisplayLabel:='大類';
DBGrid1.Fields[6].DisplayLabel:='組件位置';

while not adoTFB.Eof do
begin
Newnode:=treeview1.Items.AddChild(rootnode,adoTFB.fieldbyname('PRD_NO').AsString '->' ADOTFB.FieldByName('NAME').AsString);
next;
end;
end;
next; //這看起來是ADOMFB的NEXT , 但你這整段 while not AdoMFB 的loop 都沒用到 AdoMFB的任何欄位
end;
end;
treeview1.Items.EndUpdate;
end;

[/code]

1.例如 A 子節點下 還有B. C 子節點 ,而 B 子節點之下或許還有 D,都是由ADO連結sql而來
要如何能指定A節點?並設立以下的子節點

2.該如何點選Treeview中的節點.例如點選A..DBGrid會出現 A 的資料?



------
額有朝天骨,眼中有靈光
編輯記錄
小傑克 重新編輯於 2009-03-19 03:19:51, 註解 無‧
老大仔
尊榮會員


發表:78
回覆:837
積分:1088
註冊:2006-07-06

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-03-19 03:43:25 IP:59.114.xxx.xxx 未訂閱
插個花一下...
剛剛不小心看了回覆時間
發現了一件事...
小傑克大大居然還沒睡@@...
辛苦您了~
boss1215
一般會員


發表:6
回覆:10
積分:3
註冊:2009-03-09

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-03-24 11:56:27 IP:211.72.xxx.xxx 訂閱
感謝小傑克詳細的解說..
我寫的code..是試著照別人的code修改的..所以也不懂為什麼這樣寫
你的說明~讓我發現~原來我改的那麼愚笨

你給的意見~我會多加研究的...非常感謝你的幫忙

===================引 用 小傑克 文 章===================
根據下面程式,你得到的結果應該是, 加入RootNode 以後開始跑 MFB的Loop , 假設MFB有5筆資料, 會Loop 5次, 這5次你都是用 相同的sql 去開啟
ADOTFB 假設 AdoTFB有三筆資料, 你是把這3筆加到 RootNode底下,連續5次,也就是一個RootNode 底下15個子node 而且都是重複的

底下是我的想法,你參考一下,依據你的需求, 點中Node的時候要開啟子node,並且DBGrid也顯示, 你可以在On Expanding 事件中才去
Open ADOTFB , 在原來Button1Click事件中 ADOTFB那段全部移過去
而且根據我看你的需求, 你用AddChild 不能解決, 要用AddChildObject ,這樣才能幫你多存一段資訊來關聯


===================引 用 boss1215 文 章===================
麻煩各位大大幫我看一下該如何修改..

[code delphi]
procedure TForm1.Button1Click(Sender: TObject);
var
Rootnode,Newnode: TTreeNode;
begin
Treeview1.Items.Clear;
treeview1.Items.BeginUpdate;
with ADOMFB do
begin
sql.clear;
sql.add('select * from MF_BOM where BOM_NO like' QuotedStr('%' edit1.Text '%'));
close;
open;
rootnode:=treeview1.items.add(nil,ADOMFB.fieldbyname('BOM_NO').ASString (adomfb.FieldByName('NAME')).asstring); //我注意到你在這邊放入第一個點
TreeView1.Selected := TreeView1.Items.item[0];
TreeView1.SetFocus;

while not ADOMFB.eof do
begin

with ADOTFB do //你的程式大腸包小腸, 建議你把 With 都拿掉,直接寫 ADOTFB.Sql.Clear .....會比較清楚
begin
sql.Clear; //這段SQL 顯然沒和 ADOMFB 關聯到, 那為何會放在 while not ADOMFB.eof do 裡面
sql.Add('select distinct T.BOM_NO,T.PRD_NO,T.NAME,U.UNIT,T.QTY,U.PRD_KND,U.USEIN_NAME from TF_BOM AS T, TF_UKS AS U');
sql.Add('where T.BOM_NO=U.BOM_NO AND T.PRD_NO=U.PRD_NO AND T.BOM_NO like' QuotedStr('%' edit1.Text '%'));
/ / 在EDIT輸入查詢值後DBGrid直接出現查到的資料
close;
open;
first;

{這段標Label 應該拉到function 最前面去寫, 這放在query loop裡面是沒意義的,白跑好幾次}
DBGrid1.Fields[0].DisplayLabel:='母件料號'; //設定DBGrid欄位名稱
DBGrid1.Fields[1].DisplayLabel:='子件料號';
DBGrid1.Fields[2].DisplayLabel:='品名';
DBGrid1.Fields[3].DisplayLabel:='單位';
DBGrid1.Fields[4].DisplayLabel:='數量';
DBGrid1.Fields[5].DisplayLabel:='大類';
DBGrid1.Fields[6].DisplayLabel:='組件位置';

while not adoTFB.Eof do
begin
Newnode:=treeview1.Items.AddChild(rootnode,adoTFB.fieldbyname('PRD_NO').AsString '->' ADOTFB.FieldByName('NAME').AsString);
next;
end;
end;
next; //這看起來是ADOMFB的NEXT , 但你這整段 while not AdoMFB 的loop 都沒用到 AdoMFB的任何欄位
end;
end;
treeview1.Items.EndUpdate;
end;

[/code]

1.例如 A 子節點下 還有B. C 子節點 ,而 B 子節點之下或許還有 D,都是由ADO連結sql而來
要如何能指定A節點?並設立以下的子節點

2.該如何點選Treeview中的節點.例如點選A..DBGrid會出現 A 的資料?


------
Wa
系統時間:2024-05-08 5:28:43
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!