TreeView--->table(100分)

  • 主题发起人 主题发起人 Junk
  • 开始时间 开始时间
J

Junk

Unregistered / Unconfirmed
GUEST, unregistred user!
各位高手,如何把TreeView的内容保存到Table中,主要如何保存节点号。是否可以给个例子,先谢谢各位!!!
 
TreeView1.SaveToStream(Stream);

(Table1.Fields[0] as TBlobField).LoadFromStream(Stream);
 
JohnsonGuo的方法是可以的。
如果你想每个节点保存为一条纪录,或你想保存TreeNode.Data中的附加
信息。你就要对树进行遍历。(这是我以前做过的东西,有一些无关的东
西我删掉了,比如对TreeNode.Data的保存,所以显得有些罗嗦)
procedure SaveTreeToDB(STree: TTreeview; TreeDB: TTable);
var
i: Integer;
ANode: TTreeNode;
begin
with TreeDB do
begin
ExEmptyTable(TreeDB);//这是清空以前数据的函数,你可以自己写
if not Active then Open;
if Assigned(STree) then
try
with STree.Items do
if Count > 0 then
begin
ANode := GetFirstNode;
while ANode<> nil do
begin
Append;
FieldByName('ID').AsInteger := GetUniqueNo;//产生唯一号的函数
FieldByName('Level').AsInteger:=ANode.Level;
FieldByName('Text').AsString:=ANode.Text;
Post;
ANode := ANode.GetNext;
end;
end;
finally
Close;
end;
end;
end;

procedure LoadTreeFromDB(STree: TTreeview; TreeDB : TTable);
var
ANode, NextNode: TTreeNode;
ALevel: Integer;
CurrStr: string;
begin
with STree.Items do
begin
BeginUpdate;
try
try
Clear;
if not TreeDB.Active then TreeDB.Open;
TreeDB.First;
ANode := nil;
while not TreeDB.Eof do
begin
Level:= TreeDB.FieldByName('Level').AsInteger;
CurrStr:= TreeDB.FieldByName('Text').AsInteger;
if ANode = nil then
ANode:= AddChild(nil, CurrStr);
else if ANode.Level = ALevel then
ANode:= AddChild(ANode.Parent, CurrStr);
else if ANode.Level = (ALevel - 1) then
ANode := AddChild(ANode, CurrStr);
else if ANode.Level > ALevel then
begin
NextNode := ANode.Parent;
while NextNode.Level > ALevel do
NextNode := NextNode.Parent;
ANode := AddChild(NextNode.Parent, CurrStr);
end;
TreeDB.Next;
end;
finally
EndUpdate;
TreeDB.Close;
end;
except
Owner.Invalidate; // force repaint on exception
raise;
end;
end;
end;
 
也可以先保存到一个文件.....
 
用dbtreeview更好控制一点。
到http://www.net-wing.net/kangwei/ 下载ABC 5.0组件里面就有dbtreeview了或
1stclass 2000也有。
 
谢谢各位,特别是Grape,您的方法最适合我。分钱了!
 
后退
顶部