我做了一个关于动态增加、修改、删除树形结构的程序!愿与大家分享(附源代码)!!!
来源:互联网 发布:mac os 升级失败 编辑:程序博客网 时间:2024/06/07 09:10
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;
- 我做了一个关于动态增加、修改、删除树形结构的程序!愿与大家分享(附源代码)!!!
- 刚做了一个用JDBC把ORACLE数据转移到SYBASE的小程序,想和大家分享。有意者可以发邮件给我!呵呵!
- 赞一个,写出了我的心声!!分享给大家!
- 分享给大家一个嵌入式linux驱动的入门程序解析(源代码)
- SQL语句动态修改表结构(增加删除列)
- 我刚刚做了一个英文歌词的网站,大家支持
- 我用Silverlight做的一个简单的浏览图片的程序(附源码)
- iOS马甲包4.3被拒后,所做的修改。结果上传成功了,分享给大家。
- 动态修改程序的源代码
- 源码共享:我自己做的一个BBS的源代码,大家一起进步...
- 做了一个GRE的实验。把配置粘下来给大家分享。
- 结构体数组做映射(写了个风格还算靠谱的程序, 欢迎大家找茬拍砖, 共同进步)
- 我搜集了很多的开源的关于全文检索的资料,和大家分享
- JDBC中的添加、删除、修改操作的共用方法与大家分享
- 我做了一个成语接龙的小程序
- 今天堂哥给我介绍了一个很好的博客,给大家分享一下
- java 自己写的五子棋程序 源代码和大家分享
- 我编了一个赫夫曼编译器的程序,请大家帮我调调。
- ASP项目中的公共翻页模块
- ASP项目中的通用条件查询模块
- 独具量身定做特色的管理软件--数据大师
- CVS使用经验谈
- 在RedHat Linux 7.3下安装Apache + PHP + Mysql + JDK + Resin
- 我做了一个关于动态增加、修改、删除树形结构的程序!愿与大家分享(附源代码)!!!
- 对于(学习c++)的c程序员的建议
- 思考c++编程-译自c++ programming language 1.7节
- 什么是异常,我们为什么要关心它--The Java Tutorial--Exception第一节
- 输入N个点的坐标,由程序判断该N个点是否能构成一个凸多边形。(VB)
- TextBox使用技巧
- 用VB编写异步多线程下载程序
- Q B a s i c N i b b l e s
- 辨断你的Windows是正版还是盗版