TreeView Node 怎麼分層??? |
尚未結案
|
f0906
一般會員 發表:1 回覆:1 積分:0 註冊:2004-09-14 發送簡訊給我 |
我的程式有用到資料庫MSSQL 2000
用DBGRID顯示資料表的內容
資料表有三個欄位 菜單ID 食物ID 食材
想用TreeView來顯示結構
顯示成 菜單ID
|
食物ID
|
食材ID 我資料表時才欄位裡的內容是這樣的---> 青菜*9/秋刀魚*8/豆府*8/蘿蔔*2 我現在程式只做到 菜單ID
|
食物ID
|
青菜*9/秋刀魚*8/豆府*8/蘿蔔*2 我想要把程式改成 菜單ID
|
食物ID
|
青菜*9
秋刀魚*8
豆府*8
蘿蔔*2 不知各位大大懂我的意思嗎??? 我把我的程式PO上來好了: ---------------------------------------------------------------------
procedure TForm3.f0906(t:String);
var
i,i1,i2,i3,i4,i5:integer;
str,str2,str3,str4:String;
ptr:array [0..128] of String;
Node3,Node2:TTreeNode;
begin
str4:=t;
i2:=0;
i4:=0;
i1:=pos('/',t);
if i1<>0 then
begin
Node3:=T1.Items.AddChild(Node2,str4);
break;
end; while i1>0 do
begin
i2:=i2 1;
str:=copy(t,i1 1,100);
t:=str;
i1:=pos('/',t);
end;
if i2>0 then
begin
i4:=pos('/',str4);
for i3:=0 to i2 do
begin
str2:=copy(str4,i4 1,100);
str3:=copy(str4,1,i4-1);
str4:=str2;
i4:=pos('/',str4);
ptr[i3]:=str3;
if i4=0 then
begin
ptr[i3]:=str2;
end;
Node3:=T1.Items.AddChild(Node2,ptr[i3]);
end;
end;
end; procedure TForm3.B7Click(Sender: TObject);
var
i,cnmb,lo1,lo2:integer;
lvl1,lvl2,lvl3:String;
Node1,Node2,Node3:TTreeNode;
ptr:array [0..128] of string;
begin cnmb:=Query1.RecordCount;
T1.Visible:=true;
B7.Enabled:=false;
lvl1:='';
lvl2:='';
lvl3:='';
Node1:=nil;
Node2:=nil;
Node3:=nil;
With Query1 Do
begin
First;
DisableControls;
T1.Items.BeginUpdate;
while not Eof do
begin
if FieldByName('菜單ID').AsString<>lvl1 then
begin
lvl1:=FieldByName('菜單ID').AsString;
Node1 := T1.Items.AddChild(nil,lvl1);
end;
if FieldByName('食物ID').AsString<>lvl2 then
begin
lvl2:=FieldByName('食物ID').AsString;
Node2 := T1.Items.AddChild(Node1,lvl2);
end;
lvl3:=FieldByName('食材ID').AsString;
f0906(lvl3);
Next;
end;
end;
T1.Items.EndUpdate;
Query1.EnableControls; end; ---------------------------------------------------------
f0906是我另外寫用來判斷 食材ID裡是否有'/'這符號
如果沒有這符號 就直接 菜單ID
|
食物ID
|
青菜*9 如果有這符號 就成為 菜單ID
|
食物ID
|
青菜*9
秋刀魚*8
豆府*8
蘿蔔*2 所以f0906()是動態判斷的 所以在B7Click裡 有加入f0906(lvl3)
來判斷
但最後結果 跑不出來
不曉得各位大大看的懂程式意思嗎???
我是新手 程式寫的不好
請各位多多包函喔!!!! 這就是我的問題囉
請各位高手幫我看看吧
謝謝^^
|
pgdennis
資深會員 發表:41 回覆:526 積分:443 註冊:2002-05-23 發送簡訊給我 |
先假定你問題出在建tree好了
function SplitString(const Source,ch:string):TStringList; var temp:String; i:Integer; begin Result:=TStringList.Create; //如果是空自符串則返回空列表 if Source='' then exit; temp:=Source; i:=pos(ch,Source); while i<>0 do begin Result.add(copy(temp,0,i-1)); Delete(temp,1,i length(ch)-1);//如果ch長度大於1的話,原來的只刪除ch字符的第一個 i:=pos(ch,temp); end; Result.add(temp); end; procedure TForm1.Button1Click(Sender: TObject); var SL: TStringList; i:Integer; node:TTreenode; begin node:=treeview1.Items.Add(nil,'菜單ID') ; node:=treeview1.Items.AddChild(node,'食物ID') ; try SL:=SplitString('青菜*9/秋刀魚*8/豆府*8/蘿蔔*2','/'); for i:=0 to SL.Count-1 do if i=0 then node:=treeview1.Items.AddChild(node,SL.Strings[i]) else node:=treeview1.Items.Add(node,SL.Strings[i]); finally SL.Free; end; end;另外把上述的'菜單ID'等文字改成query.fieldbyname('').astring,這樣tree就是你要的了... 星期一,星期二...星期日..星期一..無窮迴圈@@
------
星期一,二...無窮迴圈@@ |
f0906
一般會員 發表:1 回覆:1 積分:0 註冊:2004-09-14 發送簡訊給我 |
引言: 先假定你問題出在建tree好了function SplitString(const Source,ch:string):TStringList; var temp:String; i:Integer; begin Result:=TStringList.Create; //如果是空自符串則返回空列表 if Source='' then exit; temp:=Source; i:=pos(ch,Source); while i<>0 do begin Result.add(copy(temp,0,i-1)); Delete(temp,1,i length(ch)-1);//如果ch長度大於1的話,原來的只刪除ch字符的第一個 i:=pos(ch,temp); end; Result.add(temp); end; procedure TForm1.Button1Click(Sender: TObject); var SL: TStringList; i:Integer; node:TTreenode; begin node:=treeview1.Items.Add(nil,'菜單ID') ; node:=treeview1.Items.AddChild(node,'食物ID') ; try SL:=SplitString('青菜*9/秋刀魚*8/豆府*8/蘿蔔*2','/'); for i:=0 to SL.Count-1 do if i=0 then node:=treeview1.Items.AddChild(node,SL.Strings[i]) else node:=treeview1.Items.Add(node,SL.Strings[i]); finally SL.Free; end; end;另外把上述的'菜單ID'等文字改成query.fieldbyname('').astring,這樣tree就是你要的了... 星期一,星期二...星期日..星期一..無窮迴圈@@ >>< face="Verdana, Arial, Helvetica"> --------------------------------------------------------------------- 多謝您的指導... 我的問題已經解決了... 我的程式功力還需加強... 感恩感恩^^... |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |