请教:关于用treeview现实多级部门的问题。 小弟现在做一人事程序,因为部门中要求可以设置多层级别,现在想用treeview来显示。可不知道具体数据库字段该如何设置,treeview该如何显示呢?恳请各位大虾帮帮忙了!小弟没弄过,一点思路也没有! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 建一个表保存部门结构关系,他们应该是树形结构, 然后用第归方法搜索出来,显示在treeview中帮你顶啦。 数据库表构建成 PUID, UID相关联(爷子关系)的表DEPARTMENT 表字段可如下。 GUID, 主关键字。 UID, 部门ID PUID, 上一层部门ID, NAME, 部门名称。 DESCRIPTION, 部门描述。 .....建好表后,在程序中加载时。用每三方控件比,比如TDBTreeView,直接挂上Datasource,指定相应属性就OK了。一种方法就是你用TTreeView,有一些麻烦,便是程序员对代码本身和业务表现的可操作性更强。 实现上,肯定是你的每一个TreeNode节点对应着一条部门记录,如果没有层次,这时候数据是离散的,创建下面的结构并为每一个节点创建一个实例来记录它的对应关系。 Relation = record UID: Integer; PUID: Integer; NAME: String[50]; end;var Relation: PRelation;begin New(Relation); TreeView1.Items.AddChildObject(ParentNode, Relation^.NAME, Relation); //这样就添加了一个节点,他与上一节点的关系也记录在Relation结构对象中,访问时也很方便。 //访问时想要得到信息,直接访问TTreeNode.Data属性就得到相应的结构对象。 注意:1.记得在TreeView事件OnDeletion中删除资源。 Dispose(Node.Data); 2.是每个TreeNode节点对象关联着一个结构对象指针(PRelation;),不是所有的节点关联一个。 如果数据中库中不同的表,可以用View或特殊SQL来构造树形数据集。 如ORACLE的start with语句,很方便构建树形数据集。 用View来union也是一个不错的选择。 构造好树形数据集后最好用第三方控件或自己写个控件来显示,让节点跟记录(DataSet)绑定在一起,这样操作很方便。 请问 TDBTreeView 哪有下载啊? 同意 HeLZ(尘心累矣)的建表方式 但不須要用到三方控件,直接用TREEVIEW就很簡單前段時間剛問過這個問題,已經解決了,代碼如下----------------數據表------------------id upid name1 0 一級目錄13 1 二級目錄12 3 三級目錄15 0 一級目錄24 5 二級目錄21 0 一級目錄3----------------程序如下------------------//定義目錄樹指針type pmyid = ^Tpmyid; Tpmyid = record nodeid: string; nodename: string; end;...........//遞歸載入子目錄procedure TfrmMain.ReadNode(ownNode: TTreeNode; NodeId: string);//OwnNode:Pater node NodeId:self nodeid;var curNode: TtreeNode; curID, curName: string; adoquery: TAdoQuery; myid: pmyid;begin adoquery := Tadoquery.create(parent); adoquery.Connection := AdoCon; adoquery.sql.text := 'select * from tree1 where up_id=''' + NodeID + ''''; with adoquery do begin open; first; while not eof do begin curID := FieldByName('id').AsString; curName := fieldByName('Crop_name').AsString; new(myid); myid^.nodeid := curID; myid^.nodename := curName; curNode := treeview1.Items.AddChildObject(ownNode, curName, myid); ReadNode(curNode, curid); next; end; close; free; end;end;//載入根目錄procedure TfrmMain.LoadData;var CurNode:TTreeNode; MyID:pMyID;begin new(MyID); MyID^.nodeid:='0'; CurNode:=Treeview1.Items.AddChildObject(nil,'公司',MyID); //載入要目錄 ReadNode(CurNode,'0');end;----------------------------------------- 其实很简单的,在部门表中应设置部门层次字段和上级部门ID字段,部门层次字段决定TreeView的Level,上级部门ID决定其父结点。 fastreport高手救命,预览正常,打印到40行就不打印了。怎么办? 圖片存到內存流,再從內存流中讀取圖片的格式 请教!UML的问题高手》》》》 DBGrid问题,我出100分 问:这个SQL语句应该怎么写 如何从这些信息当中得到算法?急!正在求救....等待救世主.... 系统信息 一个声明变量参数的问题,说来回答? 如何实现我的程序在ctri+del+alt 中看不见?????高分哈?? 当locate查找记录后,查找到的记录为当前的活动记录吗? 如果不是,请问该如何把查找到的记录设为当前的活动记录? 随机生成字符串的问题 有没有这样的数据关联下拉控件
帮你顶啦。
GUID, 主关键字。
UID, 部门ID
PUID, 上一层部门ID,
NAME, 部门名称。
DESCRIPTION, 部门描述。
.....建好表后,在程序中加载时。用每三方控件比,比如TDBTreeView,直接挂上Datasource,指定相应属性就OK了。一种方法就是你用TTreeView,有一些麻烦,便是程序员对代码本身和业务表现的可操作性更强。
实现上,肯定是你的每一个TreeNode节点对应着一条部门记录,如果没有层次,这时候数据是离散的,创建下面的结构并为每一个节点创建一个实例来记录它的对应关系。 Relation = record
UID: Integer;
PUID: Integer;
NAME: String[50];
end;var
Relation: PRelation;
begin
New(Relation);
TreeView1.Items.AddChildObject(ParentNode, Relation^.NAME, Relation);
//这样就添加了一个节点,他与上一节点的关系也记录在Relation结构对象中,访问时也很方便。
//访问时想要得到信息,直接访问TTreeNode.Data属性就得到相应的结构对象。
注意:1.记得在TreeView事件OnDeletion中删除资源。
Dispose(Node.Data);
2.是每个TreeNode节点对象关联着一个结构对象指针(PRelation;),不是所有的节点关联一个。
如ORACLE的start with语句,很方便构建树形数据集。
用View来union也是一个不错的选择。 构造好树形数据集后最好用第三方控件或自己写个控件来显示,让节点跟记录(DataSet)绑定在一起,这样操作很方便。
但不須要用到三方控件,直接用TREEVIEW就很簡單
前段時間剛問過這個問題,已經解決了,代碼如下
----------------數據表------------------
id upid name
1 0 一級目錄1
3 1 二級目錄1
2 3 三級目錄1
5 0 一級目錄2
4 5 二級目錄2
1 0 一級目錄3
----------------程序如下------------------
//定義目錄樹指針
type
pmyid = ^Tpmyid;
Tpmyid = record
nodeid: string;
nodename: string;
end;
...........
//遞歸載入子目錄
procedure TfrmMain.ReadNode(ownNode: TTreeNode; NodeId: string);
//OwnNode:Pater node NodeId:self nodeid;
var
curNode: TtreeNode;
curID, curName: string;
adoquery: TAdoQuery;
myid: pmyid;
begin
adoquery := Tadoquery.create(parent);
adoquery.Connection := AdoCon;
adoquery.sql.text := 'select * from tree1 where up_id=''' + NodeID + '''';
with adoquery do
begin
open;
first;
while not eof do
begin
curID := FieldByName('id').AsString;
curName := fieldByName('Crop_name').AsString;
new(myid);
myid^.nodeid := curID;
myid^.nodename := curName;
curNode := treeview1.Items.AddChildObject(ownNode, curName, myid);
ReadNode(curNode, curid);
next;
end;
close;
free;
end;
end;
//載入根目錄
procedure TfrmMain.LoadData;
var
CurNode:TTreeNode;
MyID:pMyID;
begin
new(MyID);
MyID^.nodeid:='0';
CurNode:=Treeview1.Items.AddChildObject(nil,'公司',MyID); //載入要目錄
ReadNode(CurNode,'0');
end;
-----------------------------------------