怎么动态生成TREEVIEW
如何动态生成TREEVIEW?
我现在有一个TREEVIEW.想通过读取数据表记录自动生成树结构....
如
+A部门
+A_A部门
A1员工
A2员工
+A_B部门
A3员工
+B部门
+B_A部门
B1员工
...
类似于以上树结构如何代码生成?
数据库表结构为:
id name sjid(上级ID)
A A部门 0
A_A A_A部门 A
A1 A1员工 A_A
...
------解决方案--------------------
var
List:TStringList;
Node:TTreeNode;
Index:Integer;
------------------------
TreeView.Items.BeginUpdate;
try
TreeView.Items.Clear;
List:= TStringList.Create;
try
List.Sorted:= True;
cdsTree.First;
while not cdsTree.Eof do
begin
//如果是顶接点
if cdsTree.FieldByName('你的上级ID').AsInteger= 0 then
begin
Node:=TreeView.Items.AddChild(nil, cdsTree.FieldByName(mName).AsString)
end else
begin
Index:= List.IndexOf(cdsTree.FieldByName('你的上级ID').AsString);
Node:= TreeView.Items.AddChildFirst(TTreeNode(List.Objects[index]),
cdsTree.FieldByName('你的字段名称').AsString);
end;
List.AddObject(cdsTree.FieldByName('ID').AsString, Node);
cdsTree.Next;
end;
finally
List.Free;
cdsTree.Close;
end;
finally
TreeView.Items.EndUpdate;
end;
------解决方案--------------------
ps:
打开结果集
注意排序
SELECT * FROM table Order BY 上级ID,ID
------解决方案--------------------
一.用循环,递归的办法添加
二.定义一个记录,存放ID,父节点ID..其它信息,然后一次性加载全部节点,再根据父节点调整节点位置
------解决方案--------------------
给你一个简单的参考一下:
procedure TForm1.Button1Click(Sender: TObject);
var node:ttreenode;
begin
with adoquery1 do
begin
sql.clear;
sql.text:='select * from table1 where SALESID=''''';
OPEN;
while not eof do
begin
node:=treeview1.Items.Add(nil,fieldbyname('name').AsString);
add_child(node,adoquery1); //添加子节点
next;
end;
end;
end;
procedure TForm1.add_child(parent_node: TTreenode; ado_parent: Tadoquery);
var ado_add:tadoquery;
child_node:ttreenode;
begin
ado_add:=tadoquery.Create(nil);
ado_add.Connection:=adoconnection1;
ado_add.SQL.Clear;
ado_add.SQL.Text:='select * from table1 where salesid='''+ado_parent.fieldbyname('parent_id').AsString+'''';
ado_add.Open;
while not ado_add.Eof do
begin
child_node:=treeview1.Items.AddChild(parent_node,ado_add.fieldbyname('name').AsString);
add_child(child_node,ado_add);
ado_add.Next;
end;
end;
------解决方案--------------------
递归
------解决方案--------------------
递归很慢的
我现在有一个TREEVIEW.想通过读取数据表记录自动生成树结构....
如
+A部门
+A_A部门
A1员工
A2员工
+A_B部门
A3员工
+B部门
+B_A部门
B1员工
...
类似于以上树结构如何代码生成?
数据库表结构为:
id name sjid(上级ID)
A A部门 0
A_A A_A部门 A
A1 A1员工 A_A
...
------解决方案--------------------
var
List:TStringList;
Node:TTreeNode;
Index:Integer;
------------------------
TreeView.Items.BeginUpdate;
try
TreeView.Items.Clear;
List:= TStringList.Create;
try
List.Sorted:= True;
cdsTree.First;
while not cdsTree.Eof do
begin
//如果是顶接点
if cdsTree.FieldByName('你的上级ID').AsInteger= 0 then
begin
Node:=TreeView.Items.AddChild(nil, cdsTree.FieldByName(mName).AsString)
end else
begin
Index:= List.IndexOf(cdsTree.FieldByName('你的上级ID').AsString);
Node:= TreeView.Items.AddChildFirst(TTreeNode(List.Objects[index]),
cdsTree.FieldByName('你的字段名称').AsString);
end;
List.AddObject(cdsTree.FieldByName('ID').AsString, Node);
cdsTree.Next;
end;
finally
List.Free;
cdsTree.Close;
end;
finally
TreeView.Items.EndUpdate;
end;
------解决方案--------------------
ps:
打开结果集
注意排序
SELECT * FROM table Order BY 上级ID,ID
------解决方案--------------------
一.用循环,递归的办法添加
二.定义一个记录,存放ID,父节点ID..其它信息,然后一次性加载全部节点,再根据父节点调整节点位置
------解决方案--------------------
给你一个简单的参考一下:
procedure TForm1.Button1Click(Sender: TObject);
var node:ttreenode;
begin
with adoquery1 do
begin
sql.clear;
sql.text:='select * from table1 where SALESID=''''';
OPEN;
while not eof do
begin
node:=treeview1.Items.Add(nil,fieldbyname('name').AsString);
add_child(node,adoquery1); //添加子节点
next;
end;
end;
end;
procedure TForm1.add_child(parent_node: TTreenode; ado_parent: Tadoquery);
var ado_add:tadoquery;
child_node:ttreenode;
begin
ado_add:=tadoquery.Create(nil);
ado_add.Connection:=adoconnection1;
ado_add.SQL.Clear;
ado_add.SQL.Text:='select * from table1 where salesid='''+ado_parent.fieldbyname('parent_id').AsString+'''';
ado_add.Open;
while not ado_add.Eof do
begin
child_node:=treeview1.Items.AddChild(parent_node,ado_add.fieldbyname('name').AsString);
add_child(child_node,ado_add);
ado_add.Next;
end;
end;
------解决方案--------------------
递归
------解决方案--------------------
递归很慢的