我做一个通讯录!
在treeview的里,可以建立“分类”就是可以允许建立无限个子目录,但是这个表不知道该怎么做!
我用的是access,做了一个表,如下:
ID(自动编号) 名称 所属ID
1 八中 0
2 20中 0
3 1班 1
4 4班 2
5 同事 0
6 宏帮公司 5
7 开发组 6
----------------------------------“0”代表根,“1”代表属于id=1的子目录
大概Tree样子是
+八中
-1班+20中
-4班+同事
+宏帮公司
-开发组这个在程序初始化的时候,我怎么才能将数据都表示在treeview里??
我刚开始学这个请高手帮帮我!
在treeview的里,可以建立“分类”就是可以允许建立无限个子目录,但是这个表不知道该怎么做!
我用的是access,做了一个表,如下:
ID(自动编号) 名称 所属ID
1 八中 0
2 20中 0
3 1班 1
4 4班 2
5 同事 0
6 宏帮公司 5
7 开发组 6
----------------------------------“0”代表根,“1”代表属于id=1的子目录
大概Tree样子是
+八中
-1班+20中
-4班+同事
+宏帮公司
-开发组这个在程序初始化的时候,我怎么才能将数据都表示在treeview里??
我刚开始学这个请高手帮帮我!
var
TreeNode:TTreeNode;
...
ADOQuery.sql.add('select * from yourtablename');
ADOQuery.active:=true;
ADOQuery.Recordset.movefirst;
while not ((ADOQuery.Recordset.eof) and (ADOQuery.Recordset.bof)) do
begin
if ADOQuery1.Recordset.Fields.Item[2]=0 then
TreeNode:=TreeView1.Items.Add(nil,ADOQuery1.Recordset.Fields.Item[1]);
....//其余的类似
ADOQuery.Recordset.movenext;
end;
上面代码是临时写的,只是一个思想可能有错,你可以参考一下
这样写好象有点不友好
var
Fathernode:Ttreenode;
begin
str_sql:='select ID,name from tanle1 where ...';
run_query_sql(adoqry,str_sql);
fa_gname:=adoqry.fieldbyname('name').asstring;
treename.Items.Clear;
Fathernode:=treename.Items.add(nil,fa_gname);
while not adoqry.Eof do
begin
//查询子节点,并把字段赋值给Atype。略。
treename.Items.addchild(Fathernode,Atype);
adoqry.next;
end;
end;
谢谢:
这好象是个2层的,那子节点的子节点怎么办
先定义
PNodeInfo=^TNodeInfo; //指针类型,存储对应节点信息
TNodeInfo=Packed Record
NodeId:String; //节点
NodeName:string; //节点名称
ParentId:string; //父节点
end;定义函数procedure Tform.CreateTree(Id: integer;ParentNode:TTreeNode);
var
QryTmp:TSQLQuery;
MyNode:TTreeNode;
TmpNodeInfo:PNodeInfo;
begin
QryTmp:=TSQLQuery.Create(self);
QryTmp.SQLConnection:=SQLConnection;
QryTmp.SQL.Add('Select Nodeid,Parentid,Nodename From Policy_tree Where ParentId='+IntToStr(Id)+' Order by NodeId');
QryTmp.Open;
MyNode:=nil;
while not QryTmp.Eof do
begin
New(TmpNodeInfo);
TmpNodeInfo.Nodeid:=Trim(QryTmp.Fields[0].AsString);
TmpNodeInfo.Parentid:=Trim(QryTmp.Fields[1].AsString);
TmpNodeInfo.Nodename:=Trim(QryTmp.Fields[2].AsString);
MyNode:=TView.Items.AddChildObject(ParentNode,QryTmp.Fields[2].AsString,TmpNodeInfo); //把所有节点当作子节点遍历
CreateTree(QryTmp.Fields[0].AsInteger,MyNode); //递归调用
QryTmp.Next;
end;
QryTmp.Free;
end;调用
//显示树型
CreateTree(0,nil);
结点多的时候回很慢的,超过2000就不行
http://expert.csdn.net/Expert/topic/1919/1919940.xml?temp=.4958612
-----------------------------------------
树视图同数据库的关联
awin.y365.com Delphi梦工场 前 言 树形图用于显示按照树形结构进行组织的数据,其用途比较广泛,如计算机中的文件系统(Windows95中的资源管理器)、企业或公司的组成结构等。VB、PB、Delphi等工具提供了一个功能很强的树型控件TTreeView,可以用来描述复杂的层次关系。由于树形图结构较复杂,使用起来常不知如何下手。笔者结合电信综合统计管理系统中指标维护这一具体实例,详细阐述在Delphi下如何将树型控件的使用与数据库联系起来,实现数据分任意多层显示,方便地进行增加、修改、删除操作,而且用拖放技术实现各层数据之间的移动、复制。笔者希望通过对该实例的阐述,达到抛砖引玉的效果,与各位同仁相互交流,共同进步。 一、指标树的建立 具体方法是:创建一个数据库,设计指标表t_pub_index,包含index_id、parent_id、index_name字段,其它字段根据实际业务而定,指标名称index_name将在树型控件的节点上显示,index_id字段保存节点的唯一标识号,parent_id表示当前节点的父节点号,标识号组成了一个“链表”,记录了树上节点的结构。设计一窗体Frm_sys_index,其上放置TreeView控件tv_zb、Query控件Query1及其它指标属性编辑显示控件。一个树的节点又包含文本(Text)和数据(Data)。Text为String类,用来显示指标或指标目录名称。Data则为无定形指针(Untyped Pointer),可以指向一个与节点相联系的数据结构,该结构与数据库指标表相应域关联,如指标ID、上级节点ID。 Query控件的表达式为: select index_id, parent_id, index_name from t_pub_index start with index_id=0 connect by prior index_id=parent_id 其中start with 和connect by 是Oracle的SQL语句的保留字,使一条记录的parent_id列的值等于前一记录的index_id列的值,并以parent_id等于0的记录开始。 建树的基本思路是: procedure TFrm_sys_index.createtree; var curValue: indexPointer; //指向与节点相联系的数据结构的指针 curNode : TTreeNode; //当前节点 curid : integer; //当前节点标识号 begin curNode := nil; curid := -1; Query_index.Open; Query_index.first; while not Query_index.Eof do begin new(curValue); With curValue^ do 将数据库指标表t_pub_index各字段值赋curValue 所指数据结构 while(curid <> curValue.parent_id) do //当前节点的标识号不等于当前记录的父节点号 begin curNode := curNode.parent; curid:= indexPointer(curNode.data).index_id; end; curNode := tv_zb.Items.AddChildObject(curNode, curValue^.index_name,curValue); //在当前节点上添加子节点,显示节点指标名称,所带指针指向一个与指标数据相联系的数据结构 curid := indexPointer(curNode.data).index_id; Query_index.next; end; Query_index.close; end;
但我的表中设计是包含部门级别的。例如你的上面可以修改成如下:
ID(自动编号) 一级 二级 三级
1 八中 一班
2 八中 二班
3 20中 四班
4 同事 宏帮公司 开发组
其实这个表是临时的,我可能要建立很多层,所以只能用这个表了