線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:4051
推到 Plurk!
推到 Facebook!

請問這個樹形數據顯示到TTreeView上怎麼這麼慢呀

答題得分者是:bigdogchina
popmailzjw
一般會員


發表:7
回覆:18
積分:5
註冊:2002-05-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-07-30 11:04:44 IP:218.18.xxx.xxx 未訂閱
数据结构如下: ========================================================= classid classname parentclass A 輔料 NULL B 工程零配件 NULL C 固定資產 NULL D 雜項 NULL A-01 日常輔料 A A-02 生產輔料 A A-03 彩印輔料 A A-04 辦公輔料 A A-01-001 布碎 A-01 A-01-002 手套 A-01 A-01-003 掃把 A-01 A-01-004 書寫品 A-01 A-01-005 衛生品 A-01 A-01-006 用具 A-01 A-01-001-0002 小布碎 A-01-001 A-01-001-0003 大布碎 A-01-001 A-01-002-0001 工業膠手套 A-01-002 A-01-002-0002 線手套 A-01-002 A-01-002-0003 家用膠手套 A-01-002 A-01-002-0004 家用膠手套-2 A-01-002 A-01-002-0005 無紡布鞋套 A-01-002 A-01-003-0001 金絲掃把 A-01-003 A-01-003-0002 拖把 A-01-003 A-01-003-0003 竹掃把 A-01-003 A-01-004-0001 油性箱頭筆 A-01-004 A-01-004-0002 水性箱頭筆 A-01-004 A-01-004-0003 毛筆 A-01-004 A-01-004-0004 進口箱頭筆 A-01-004 A-01-004-0005 無塵粉筆 A-01-004 A-01-005-0001 洗衣粉 A-01-005 A-01-005-0002 肥皂 A-01-005 A-01-005-0003 毛巾 A-01-005 A-01-005-0004 口罩 A-01-005 A-01-005-0005 無紡布口罩 A-01-005 A-01-005-0006 紙口罩 A-01-005 A-01-005-0007 活性碳口罩 A-01-005 A-01-006-0001 雕刻刀片 A-01-006 A-01-006-0002 膠水瓶 A-01-006 A-01-006-0003 膠桶 A-01-006 A-01-006-0004 水瓢 A-01-006 A-01-006-0005 雞毛掃 A-01-006 A-01-006-0006 刷子 A-01-006 A-01-006-0007 刀片 A-01-006 A-01-006-0008 噴壺 A-01-006 A-01-006-0009 保安刀片 A-01-006 A-01-006-0010 垃圾斗 A-01-006 A-01-006-0011 雕刻刀架 A-01-006 A-01-006-0012 吸咀 A-01-006 A-01-006-0013 菜刀 A-01-006 A-01-006-0014 一次性膠杯 A-01-006 A-01-006-0015 耳塞 A-01-006 A-01-006-0016 膠盆 A-01-006 A-02-002 樹脂板 A-02 A-02-003 生粉 A-02 A-02-004 燃油 A-02 A-02-005 膠水 A-02 A-02-006 包裝帶 A-02 A-02-007 釘線 A-02 A-02-008 啤具 A-02 A-02-009 化工品 A-02 A-02-011 其它 A-02 A-02-012 膠紙 A-02 A-02-013 海綿 A-02 A-02-014 四色水墨 A-02 A-02-015 雜色水墨 A-02 A-02-016 黑色水墨 A-02 A-02-017 特殊水墨 A-02 A-02-018 水墨添加劑 A-02 A-02-019 BASE料 A-02 A-02-020 弧形模具 A-02 A-02-002-0001 3.94mm樹脂板1 A-02-002 A-02-002-0002 9.6mm橡膠版 A-02-002 ================================================================== 我用树形TTreeView把它显示出来怎么要20几秒,才7000条数据呀,我写的算法如下,大家看怎么改。
popmailzjw
一般會員


發表:7
回覆:18
積分:5
註冊:2002-05-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-07-30 11:35:04 IP:218.18.xxx.xxx 未訂閱
function TgoodsClassFrm0.FindNode(classID: string): TTreeNode; var b, e: integer; //begin,end,mid found: boolean; str: string; begin if CompareText(Mstr(classTree.Items.Item[mid 1].Text, '(', ')'), classID) = 0 then begin result := classTree.Items.Item[mid 1]; exit; end; found := false; //mid:=0; b := mid 1; e := classTree.Items.Count - 1; while (b <= e) and (not found) do begin //2 {if CompareText(Mstr(classTree.Items.Item[b].Text, '(', ')'), classID) = 0 then begin mid:=b; found := true; break; end; } mid := (b e) div 2; //str := ; str := Mstr(classTree.Items.Item[mid].Text, '(', ')'); if CompareText(str, classID) < 0 then b := mid 1;// else if CompareText(str, classID) = 0 then found := true ;//else if CompareText(str, classID) > 0 then e := mid - 1; //comparestr //end; //case end; //2 if found then result := classTree.Items.Item[mid] else result := nil; end; procedure TgoodsClassFrm0.createTree; var root, node: TTreeNode; classID, classN, pclass: string; label go; begin //1 root := classTree.Items.AddFirst(nil, '┮ΤJ?だ摸'); with adosp, classTree.Items {purchdm.Query1} do begin close; sql.Clear; sql.Add('select classID, className,parentclass from goodsClass union all-- order by parentclass,classid'); sql.Append(' select full_id,prod_name,parentclass=fclass_id ''-'' sclass_id ''-'' tclass_id from Product'); sql.Append(' order by parentclass, classid'); open; mid := 0; node := root; while not eof do begin pclass := trim(fieldbyname('parentclass').AsString); if pclass = 'A-02-016' then msg1(pclass); if fieldbyname('parentclass').IsNull then goto go; if pclass = Mstr(node.Text, '(', ')') then goto go; node := FindNode(trim(fieldbyname('parentclass').AsString)); go: AddChild(node, '(' trim(fieldbyname('classID').AsString) ') ' trim(fieldbyname('className').AsString)); next; end; close; end; root.Expand(false); end;
SnoopyChen
一般會員


發表:1
回覆:17
積分:18
註冊:2003-07-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-07-30 23:18:12 IP:211.21.xxx.xxx 未訂閱
> 我用?形TTreeView把它?示出?怎么要20几秒,才7000??据呀,我?的算法如下,大家看怎么改。 記得以前試過TTreeView的效能極差, 資料量在幾百筆內感覺不出, 但上千筆之後每插入一筆效能就開始下降, 建議換個元件試試!! 我曾用Virtual Treeview取代, 效果十分不錯, 上萬筆的資料很 快就出來了, 只是要自行記錄各節點的內容, 在響應事件時提供 要繪出的字串, 參考網址:(open source) http://www.soft-gems.net/VirtualTreeview/VT.php You will also find Virtual Treeview (version 3.4.0) on the Delphi 7 companion CD.
bigdogchina
版主


發表:238
回覆:523
積分:312
註冊:2003-04-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-07-31 09:59:25 IP:211.162.xxx.xxx 未訂閱
不好意思,插個花: 關於TreeView載入資料的效能,站內的前輩已有過相關討論,不妨看看別人的idea,或許對自己會有所幫助: http://delphi.ktop.com.tw/topic.php?topic_id=46373 http://delphi.ktop.com.tw/topic.php?topic_id=46570 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=44484    ================================= 人生在勤,不索何獲 業精於勤荒於嬉,行成於思毀於隨 臨淵羡魚不如退而結網
------
人生在勤,不索何获?
系統時間:2024-05-14 4:22:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!