关于将数据库读入treeview的问题?(up都有分)

laoli 2002-11-12 12:48:23
能否将一个数据库一次性按类别读入treeview里(不论节点多少),
然后,在程序运行中,无论点击哪一个节点都可以,用一个事件来触发
查询,查询当前点击节点的相关字段。最好能提供相关代码.........
...全文
74 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
xjl 2002-11-15
  • 打赏
  • 举报
回复
那我蹴Up了
sxwsg 2002-11-15
  • 打赏
  • 举报
回复
给我也最好能发一个
sxwsg@hotmail.com
QQ:30271342
laoli 2002-11-15
  • 打赏
  • 举报
回复
太好啦
我的QQ:51416
email:lgj2000@163.net
setfocus 2002-11-13
  • 打赏
  • 举报
回复
我正在写!写完发给你!EMAIL留下!
hfycl 2002-11-13
  • 打赏
  • 举报
回复
up
BENJOE 2002-11-13
  • 打赏
  • 举报
回复
我最近写的一个有关部门设置的程序可能对你有用,有需要告诉我。
simni 2002-11-13
  • 打赏
  • 举报
回复
UP
blueshu 2002-11-13
  • 打赏
  • 举报
回复
偶可以帮你搞定,有没有qq?
redlegend_126_com 2002-11-13
  • 打赏
  • 举报
回复
不过用treeview显示数据库,会很慢的,不好用,最好自己编写一个控件!!!
blueshu 2002-11-12
  • 打赏
  • 举报
回复
要看你的数据结构吧
不分level的话就很easy了,你没说清楚啊
laoli 2002-11-12
  • 打赏
  • 举报
回复
to xzhifei(飞)
太复杂,能否简单点,不知是否有相关的VCL控件。


本想给分的,但是一给分就要结贴了,没办法,等有更好的答案就每人都有分。。。
xzhifei 2002-11-12
  • 打赏
  • 举报
回复
赚分来了,源代码很简单:
procedure LoadTree(treeDB:TDBDataSet);//初始化树
procedure UpdateTree(curNode:TTreenode; nodeTxt:string; state:string);//更新树
function GetNodeLevel(sFormat,sCode:string):integer; //获得节点层数
function GetNodeItem(sCode:string):integer;//获得item

{ Public declarations }
end;

const
CTreeCodeFormat='122222';
cTreeMaxLevel=6;
CTreeRootTXT='所有图书';

var
tsgzlfrom: Ttsgzlfrom;
_err:integer;
curUser:string[10];
mystate:string;
gNodeId:string;
gNodelevel:integer;
gNode:TtreeNode;
mynode:array[0..6] of TTreenode;
i,Already,CurMode:integer;
currow:integer;
iniFile:string;
HasSub:String;

level:Integer;


implementation

uses bgNewunit;


{$R *.DFM}

procedure TtsgzlFrom.LoadTree(treeDB:TDBDataSet);//初始化树
var curID,nodeTxt:string;
level,num:integer;
begin
//初始化变量
Screen.Cursor:=crHourGlass;
tree.Enabled:=True;
tree.Items.Clear;
level:=1 ;
num:=1;
tree.items.clear;
//设置根节点
mynode[level]:=Tree.items.add(Tree.Topitem,cTreeRootTxt);
mynode[level].ImageIndex:=0;
mynode[level].SelectedIndex:=1;
//遍历数据表,利用编码字段记录排序规律,依次添加树节点
with TreeDb do
begin
try
if not Active then open;
first;
while not Eof do
begin
curID:=trim(FieldByName('tsglb').AsString);
nodeTxt:=curID+'-'+trim(FieldByName('tsglbn').AsString);
level:=GetNodeLevel(cTreeCodeFormat,curID);
//这里返回代码的层次数
if level>0 then
begin
//增加下一节点时,用添加子节点的方法可轻松实现节点间的层次关系。
//注意:这里的父节点是用当前节点的上一级节点mynode[level-1]
mynode[level]:=Tree.Items.AddChild(Mynode[level-1],NodeTxt);
mynode[level].ImageIndex:=2;
mynode[level].SelectedIndex:=3;
end;
next;//下一条记录
end;
finally;
close;
End;
mynode[1].expand(False);
Screen.Cursor:=crHourGlass;
end;
end;

function TtsgzlFrom.GetNodeLevel(sFormat,sCode:string):integer;
var i,iLen:integer;
begin
level:=-1 ;
iLen:=0;
if (sFormat<>'') and (sCode<>'') then
for i:=1 to Length(sFormat) do //分析编码格式,找出当前代码层次
begin
iLen:=iLen+StrToInt(sFormat[i]);
if Length(sCode)=iLen then
begin
level:=i;
break;
end;
end;
result:=level;
end;

Function TtsgzlFrom.GetNodeItem(sCode:string):integer;//获得item
var i,iCount,val:integer;
tmp:string;
begin
Result:=0;
iCount:=Tree.Items.Count;
if iCount=0 then exit;
val:=0;
for i:=1 to iCount-1 do
begin
Tmp:=Tree.Items.Item[i].Text;
Tmp:=Copy(Tmp,0,pos('-',Tmp)-1);
if Tmp=sCode then begin
val:=i;
Break;
end;
end;
result:=val;
end;

procedure TtsgzlFrom.UpdateTree(curNode:TTreenode; nodeTxt:string; state:string);
Begin
if state='add' then
begin
curNode:=Tree.Items.addchild(curNode,nodeTxt);
curNode.ImageIndex:=2;
curnode.SelectedIndex:=3;
end;
if state='del' then curNode.delete;
if state='edi' then curNode.Text:=nodeTxt;
end;


CloneCenter 2002-11-12
  • 打赏
  • 举报
回复
以前有许多这样的代码,搜索一下,会有收获的。
fangchangjiang 2002-11-12
  • 打赏
  • 举报
回复
up
funboy88 2002-11-12
  • 打赏
  • 举报
回复
可以实现,只是有些烦,现在没空写啦,

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧