将Treeview中增加的内容保存到数据库中,启动程序时再加载数据库中的内容.
现在存在一个问题,如何获取当前Node的层数?
例如:
一个分类的Treeview;
大类:软件,子类:编程软件,子类下面的子类:Delphi.
我希望能够是取得“软件的Node为第1层,编程软件为第2层,Delphi为第3层”,将其存入数据库,再读取。

解决方案 »

  1.   

    定义一个记录指针:
    ------------------------------
       PItem=^TPItem;
         TPItem=Record
         mid,parentid,index:Integer;
       end;
    {(节点序号,此为一次递增的),caption(节点描述),parentid(父节点序号),index(同级序号)}
    ---------------------------------------------
    var 
        NodeL,ChildNode:TTreeNode;
        x:PItem;
    begin
      inherited;
      treList.Items.Clear;
      NodeL:=treList.Items.Add(Nil,'树');
      NodeL.ImageIndex:=2;
      NodeL.SelectedIndex:=2;
      DataSet.First;
      while Not DataSet.Eof do
      begin
        New(x);  //mid,parentid,index
        x.mid:=DataSet.FieldBynaMe('mid').AsInteger;
        x.index:=DataSet.FieldBynaMe('index').AsInteger;
        x.parentid:=DataSet.FieldBynaMe('parentid').AsInteger;
        ChildNode:=treList.Items.AddChildObject(NodeL,DataSet.FieldBynaMe('caption').AsString,Tobject(x));                       //这样每个结点都保存有mid,parentid,index,操作起来就简单多了。
        ChildNode.ImageIndex:=1;
        ChildNode.SelectedIndex:=0;
        DataSet.Next;
      end;
      TreList.TopItem.Expanded:=True;
    end;
    -----------------------------------------
    取结点的mid,parentid,index时可能这样:
      mid:=PItem(trelist.Selected.Data).mid;
      parentid:=PItem(trelist.Selected.Data).parentid;
      

  2.   

    谢谢 "97866(纬宇)-(纟〓◣)"我可能说得不清楚:现在数据库中是没有存内容的,我是希望在增加Treeview时将每个Node的层数,父节点,及内容写入数据库;再进行读取。
    数据库定义如下:
    intno  Typelevel   Typeno  typename   Masterinto
    其中intno为自动增加型, TypeLevel为层数, TypeNo为节点代码,TypeName为节点描述;
    Masterinto为父节点的值。希望能再次得到您的帮助!
      

  3.   

    如果新增的是第一层则:
      x.Typelevel:=1;
      x.Typeno:=节点代码;
      x.typename:=节点描述;
      x.Masterinto:=0;
      Node:=treList.Items.AddChildObject(NodeL,节点描述,Tobject(x));
    如果新增的是子结点则:
      x.Typelevel:=PItem(父结点.Data).Typelevel+1;
      x.Typeno:=节点代码;
      x.typename:=节点描述;
      x.Masterinto:=PItem(父结点.Data).Typelevel;
      Node:=treList.Items.AddChildObject(NodeL,节点描述,Tobject(x));
    保存时则:
      遍历树-------
      Ado.Sql.Text:='Insert Into 表 Values('+IntToStr(PItem(当前结点.Data).Typelevel)
                    +','''+PItem(当前结点.Data).Typeno+''','''
                    +PItem(当前结点.Data).Typename+''','
                    +IntToStr(PItem(当前结点.Data).Masterinto)+')';
     Ado.ExecSql;