将Treeview中增加的内容保存到数据库中,启动程序时再加载数据库中的内容.
现在存在一个问题,如何获取当前Node的层数?
例如:
一个分类的Treeview;
大类:软件,子类:编程软件,子类下面的子类:Delphi.
我希望能够是取得“软件的Node为第1层,编程软件为第2层,Delphi为第3层”,将其存入数据库,再读取。
现在存在一个问题,如何获取当前Node的层数?
例如:
一个分类的Treeview;
大类:软件,子类:编程软件,子类下面的子类:Delphi.
我希望能够是取得“软件的Node为第1层,编程软件为第2层,Delphi为第3层”,将其存入数据库,再读取。
------------------------------
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;
数据库定义如下:
intno Typelevel Typeno typename Masterinto
其中intno为自动增加型, TypeLevel为层数, TypeNo为节点代码,TypeName为节点描述;
Masterinto为父节点的值。希望能再次得到您的帮助!
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;