請問這個樹形數據顯示到TTreeView上怎麼這麼慢呀 |
答題得分者是:bigdogchina
|
popmailzjw
一般會員 發表:7 回覆:18 積分:5 註冊:2002-05-11 發送簡訊給我 |
数据结构如下:
=========================================================
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 發送簡訊給我 |
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 發送簡訊給我 |
> 我用?形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 發送簡訊給我 |
不好意思,插個花:
關於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 =================================
人生在勤,不索何獲
業精於勤荒於嬉,行成於思毀於隨
臨淵羡魚不如退而結網
------
人生在勤,不索何获? |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |