我用treeview+accesss写的个程序,treeview分很多级,每级上都有N多个节点,算下来有6000多个,但是现在问题出来了,程序打开时,加载这个树要N长时间,肯定不行。我想逐级展开这个树,也就是开始只加载一级或者两级结节,点击后判断还有没有子节点,有的话就展开,没有的话就执行命令,查了很多贴子,都不行,因为每个人的数据表结构都不一样,一般都只发一段代码,还是搞不清楚,我想要个例子,代码加数据表结构的,能不能给一个,马上给分,或者我把表结构贴在下面,大家给段简单的代码也行。表如下:ID NAME SJBH(表示结点关系的标记) ZL(点击结点后显示出的资料)
1 一年级 0 及格
2 二年级 0 及格
3 张三 1 不及格
4 李四 1 极格
5 王五 2 不及格
SJBH的意思就是根据前面的ID显示,如果SJBH是0,就是最上一级,SJBH是1的话,就为在ID为1的子结点,SJBH为2的话就是ID为2的子结点
我觉得这个表的结构也不怎么样,最好能有个简单的代码加表结构的例子看一看
[email protected]
如果方便的话,请帮一下忙,我非常的急!
1 一年级 0 及格
2 二年级 0 及格
3 张三 1 不及格
4 李四 1 极格
5 王五 2 不及格
SJBH的意思就是根据前面的ID显示,如果SJBH是0,就是最上一级,SJBH是1的话,就为在ID为1的子结点,SJBH为2的话就是ID为2的子结点
我觉得这个表的结构也不怎么样,最好能有个简单的代码加表结构的例子看一看
[email protected]
如果方便的话,请帮一下忙,我非常的急!
ID NAME SJBH(表示结点关系的标记) ZL(点击结点后显示出的资料)
1 一年级 0 及格
2 二年级 0 及格
3 张三 1 不及格
4 李四 1 极格
5 王五 2 不及格
//
//--------
ds.Filter := 'SJBH=0';
ds.Filtered:=true;
ds.first
while not ds.eof do
beign
...
...
anode:= treeview.items.add(nil,Field('Name'));
anode.tag:=id;
next;
end;
////节点点击
ds.Filtered:=False;
ds.Filter:='SJBH='+IntToStr( anode.tag);
ds.Filtered:=True;
ds.first;
///.... 同上。
unit uEamNavTree;interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, ImgList,DBClient,Menus;
CONST
SQLPROJECTCLASSCODE='SYS_PROJECTCLASS_GET';
GET_PROJECTS_BY_PROJECTCLASSCODE='SYS_PROJECTS_GET';
type
TEamNavTree=class(TTreeView)
private
FMenuItem: TMenuItem;
FOnChange: TTVChangedEvent;
procedure Collapsing(Sender: TObject; Node: TTreeNode;var AllowCollapse: Boolean);
public
constructor create(AOwner:TComponent);override;
procedure BuildTreeView();
property MenuItem:TMenuItem read FMenuItem write FMenuItem;//MnuEnterPriseManager
property OnChange: TTVChangedEvent read FOnChange write FOnChange;
end;
implementationuses uBaseDM, uPlugIn, uPluginInterface;{ TEamNavTree }procedure TEamNavTree.BuildPlugIn(Node: TTreeNode;
ClassCode: String);
var
BaseDM:TBaseDM;
PlugInControl:TPlugInControl;
TmpNode:TTreeNode;
cds:TClientDataSet;
strFileName:string;
begin
cds:=TClientDataSet.Create(nil);
try
BaseDM:=TBaseDM.Instance;
if Node=nil then Exit;
BaseDM:=TBaseDM.Instance;
if BaseDM.OpenData(GET_PROJECTS_BY_PROJECTCLASSCODE,ClassCode,cds) then
begin
while not cds.Eof do
begin
strFileName:=cds.fieldByname('APPLICATIONNAME').AsString;
PlugInControl:=TPlugInControl.Create(strFileName);
PlugInControl.Caption:=cds.fieldByName('NAME').AsString;
TmpNode:=Items.AddChildObject(Node,cds.fieldByName('NAME').AsString,PlugInControl);
if PlugInControl.Enabled then
begin
TmpNode.SelectedIndex:=3;
TmpNode.ImageIndex:=3;
end
else
begin
TmpNode.SelectedIndex:=4;
TmpNode.ImageIndex:=4;
end;
cds.Next;
end;
end;
finally
FreeAndNil(cds);
end;end;procedure TEamNavTree.BuildTree(Node: TTreeNode;
ParentID: integer);
var
BaseDM:TBaseDM;
PlugInControl:TPlugInControl;
TmpNode:TTreeNode;
cds:TClientDataSet;begin
cds:=TClientDataSet.Create(nil);
try
BaseDM:=TBaseDM.Instance;
if Node=nil then Exit;
BaseDM:=TBaseDM.Instance;
if BaseDM.OpenData(SQLPROJECTCLASSCODE,IntToStr(ParentID),cds) then
begin
while not cds.Eof do
begin
TmpNode:=Items.AddChild(Node,cds.fieldByName('NAME').AsString);
//子分类
BuildTree(TmpNode,cds.fieldByName('ID').AsInteger);
//分类下的项目
BuildPlugIn(TmpNode,cds.fieldByName('CODE').AsString);
if TmpNode.HasChildren then
begin
TmpNode.ImageIndex:=1;
TmpNode.SelectedIndex:=1;
end
else
begin
TmpNode.ImageIndex:=2;
TmpNode.SelectedIndex:=2;
end;
cds.Next;
end;
end; finally
FreeAndNil(cds);
end;end;procedure TEamNavTree.BuildTreeView;
var
Node:TTreeNode;
begin
end;procedure TEamNavTree.Collapsing(Sender: TObject; Node: TTreeNode;
var AllowCollapse: Boolean);
begin
AllowCollapse:=not( Node.Level=0);
end;constructor TEamNavTree.create(AOwner: TComponent);
begin
inherited;
OnCollapsing:=Collapsing;
end;end.