怎样才能用TREEVIEW控件去表示一个数据库里的表的数据?
例如:
在人员表里有:ID(人员ID) name(人员姓名) company(人员所属分公司)
deparment(人员所在部门)在树图中显示为:
+ --总公司
|_____A分公司
| |______市场部
| | |________张三
| |_______人事部
|
|______B分公司
|______市场部
|________李四请问各路高手这问题怎么解决?,还有就是有没有关于TREENODE的具体使用方法?
谢谢各位!!
例如:
在人员表里有:ID(人员ID) name(人员姓名) company(人员所属分公司)
deparment(人员所在部门)在树图中显示为:
+ --总公司
|_____A分公司
| |______市场部
| | |________张三
| |_______人事部
|
|______B分公司
|______市场部
|________李四请问各路高手这问题怎么解决?,还有就是有没有关于TREENODE的具体使用方法?
谢谢各位!!
第二,问题开始简单,用递推算法,查询添加分公司节点->查询添加部门节点->查询添加人员结点,走完每条路线之后再返回。
第三,利用几个临时变量,如:当前结点下的记录数、当前结点的句柄、父结点的句柄等,结点句柄利用TTreeNode类型定义。利用你的Query组件与算法完成你的程序吧!
Type
TNodeObject = class(TObject)
Id:integer;
Name :string;
company:string;
deparment:string;
end; procedure makeTree;
procedure MakeFirstLayer;
procedure MakeSecondLayer(FatherNode :TTreeNode);
procedure MakethirdLayer(FatherNode :TTreeNode);procedure Tform1.makeTree;
var
Root: TTreeNode;
begin
Root :=TreeView.Items.AddFirst(nil,'总公司') ;
MakeFirstLayer;
end;procedure Tform1.makeTree;
var
sql: string;
rs: _Recordset;
objNode: TNodeObject;
childNode: TTreeNode;
name: string;
begin
sql := 'select distinct company from t_BaseInfor';
rs := ADOConn.Execute(sql);
while not rs.EOF do
begin
name := rs.Fields['company'].Value;
childNode := TreeView.Items.AddChild(TreeView.Items.GetFirstNode, name);
objNode := TNodeObject.Create;
objNode.company :=Name;
childNode.Data := objNode;
MakeSecondLayer(childNode);
rs.MoveNext;
end;
rs.Close;
end;procedure Tform1.MakeSecondLayer(FatherNode: TTreeNode);
var
sql: string;
rs: _Recordset;
objNode: TNodeObject;
childNode: TTreeNode;
companyName ,name: string;
begin
companyName := TNodeObject(FatherNode.Data).company ;
sql :='select distinct deparment from t_BaseInfor where company=''' +trim(companyName) +'''';
rs := ADOConn.Execute(sql);
while not rs.EOF do
begin
name := rs.Fields['deparment'].Value ;
childNode := TreeView.Items.AddChild(FatherNode, name);
objNode := TNodeObject.Create;
objNode.company := TNodeObject(FatherNode.Data).company;
objNode.deparment := name;
childNode.Data := objNode;
MakethirdLayer(childNode);
rs.MoveNext;
end;
rs.Close;
end;procedure Tform1.MakethirdLayer(FatherNode: TTreeNode);
var
sql: string;
rs: _Recordset;
objNode: TNodeObject;
childNode: TTreeNode;
companyName,deparmentName,name: string;
id :integer;
begin
companyName := TNodeObject(FatherNode.Data).company ;
deparmentName :=TNodeObject(FatherNode.Data).deparment; sql :='select ID, name from t_BaseInfor where company=''' +trim(companyName) +''' and deparment=''' +trim(deparmentName) +'''';
rs := ADOConn.Execute(sql);
while not rs.EOF do
begin
name := rs.Fields['name'].Value ;
id := rs.Fields['Id'].Value ;
childNode := TreeView.Items.AddChild(FatherNode, name);
objNode := TNodeObject.Create;
objNode.company := TNodeObject(FatherNode.Data).company;
objNode.deparment := TNodeObject(FatherNode.Data).deparment;
objNode.id := id;
objNode.Name :=Name;
childNode.Data := objNode;
rs.MoveNext;
end;
rs.Close;
end;
2 读取数据库中的部门,添加为总公司的subitems;
3 读取数据库中做有人员,分别添加到部门下面。难度不大,都是些基本功。
可以试一下的!!