我做了一个关于动态增加、修改、删除树形结构的程序!愿与大家分享(附源代码)!!!

原创 2001年07月26日 09:31:00

    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;

成功离你有多远

有句泰国谚语:"经验是一把梳子,秃顶后才能得到"。在秃顶之际,我愿与你们分享我的梳子,为你们未来的职业生涯作参考。  主动寻求基层经验  我大学时学的是物理。毕业前几个月,我到印度利华有限公司应聘计算...
  • changyuenan
  • changyuenan
  • 2005年09月28日 17:55
  • 782

ListView视图动态增加与删除控件条目,内容

ListView视图动态增加与删除控件条目,内容
  • xiaozenbin
  • xiaozenbin
  • 2017年02月05日 17:35
  • 722

修改类名小工具(含源代码)

修改类名小工具程序下载: RenameClass_exe.zip运行环境: WinXP (win7没测试过)。测试了VC6和VS2008的工程,都可以修改类名代码下载:RenameClass_src....
  • jacky_qiu
  • jacky_qiu
  • 2010年12月04日 11:00
  • 1757

从孙子兵法看企业价值观和企业文化

孙子曰:“兵者,国之大事也.死生之地,存亡之道“,这个就是国家这个大企业永恒不变的价值观。而孙子又曰:”兵无常势,水无常形“,你怎么用兵,形式多种多样,不应拘泥形式。也就是说只要你的核心价值观是对的,...
  • zhubaitian
  • zhubaitian
  • 2015年06月28日 13:38
  • 1157

extjs4.2 treePanel 实现动态的增、删、改

关于树是怎么生成的我就不解释了 我们主要讲的是 treePanel 实现动态的增、删、改 首先我们要有一个树 然后在树上加入监听事件: listeners: { ...
  • qq_25391785
  • qq_25391785
  • 2017年12月22日 10:16
  • 108

JS实现动态添加和删除DIV

前言 在做项目的过程中,做到关于添加个人的教育这一块的时候,需要使用动态添加和删除div的操作。这个大家应该不陌生,在很多网站注册的时候都会要求对于自己的教育的经历进行完善。如下图 实...
  • chenfanglincfl
  • chenfanglincfl
  • 2013年12月03日 11:32
  • 7437

使用Oracle数据库实现树形结构表的子-父级迭代(递归)查询和删除,通过级联菜单简单举例

前言: 我们在开发中,常常遇到单表的子-父id级联的表结构,在树形的深度不确定的情况下,一次查询出某个树形结构下的所有具有子-父级关系的数据变得十分困难。 这时,我们使用oracle提供的CONNEC...
  • eguid_1
  • eguid_1
  • 2017年01月22日 11:04
  • 2071

javascript动态添加、修改、删除对象的属性和方法

上一节介绍了如何引用一个对象的属性和方法,现在介绍如何为一个对象添加、修改或者删除属性和方法。在其他语言中,对象一旦生成,就不可更改了,要为一个对象添加修改成员必须要在对应的类中修改,并重新实例化,而...
  • zhouqixiang
  • zhouqixiang
  • 2007年12月16日 14:27
  • 35179

jQuery实现表格行的动态增加与删除(改进版)

http://www.blogjava.net/absolutedo/archive/2009/03/13/259488.html
  • huangxiaoya1993
  • huangxiaoya1993
  • 2014年07月30日 15:24
  • 994

修改商品时图片的增加与删除

修改商品时,会将原有的图片信息展示,我们的操作可删除可增加,数据库图片的字段:xxx.png,yyy.png,zzz.png 删除,yyy.png这张图片,再增加一张新图片 一、图片上传后得到的图...
  • Tracyclock
  • Tracyclock
  • 2017年05月12日 15:39
  • 207
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:我做了一个关于动态增加、修改、删除树形结构的程序!愿与大家分享(附源代码)!!!
举报原因:
原因补充:

(最多只允许输入30个字)