TreeView節點問題 |
答題得分者是:小傑克
|
boss1215
一般會員 發表:6 回覆:10 積分:3 註冊:2009-03-09 發送簡訊給我 |
麻煩各位大大幫我看一下該如何修改..
[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 發送簡訊給我 |
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 發送簡訊給我 |
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 發送簡訊給我 |
|
小傑克
資深會員 發表:5 回覆:209 積分:357 註冊:2009-02-16 發送簡訊給我 |
根據下面程式,你得到的結果應該是, 加入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 發送簡訊給我 |
|
boss1215
一般會員 發表:6 回覆:10 積分:3 註冊:2009-03-09 發送簡訊給我 |
感謝小傑克詳細的解說..
我寫的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 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |