我有一张叫部门信息的表,里面包括的内容有部门编码、部门名称等。
我在TreeView里将部门信息按照隶属关系进行排列,形如
_所有部门
|_人力资源部
| |_教育科
| |_培训科
|
|_行政部
| |_管理科
.....我希望在点击某一个节点时,会动态组成一个SQL语句来查询该部门的员工信息,
在员工信息的表里与之相对应的是部门编码,比如某个员工属于人力资源部的教育科,而该教育科的部门编码是0101,则员工信息记录里的部门编码字段就是0101
现在的问题是,我在点击某一个节点时,能够获得部门名称,但我希望是用部门编码来组成SQL语句,
一种很笨的方法是,先根据部门名称来查询出部门编码,再用这个部门编码与员工信息相对应。
请问有没有一种方法,可以在生成这个部门树的同时,能够将部门编码也放在节点的信息里,
这样,我在点击节点时,能够方便的获得编码。或者说碰到这类问题,大家有没有更好的解决方法。
先谢谢各位了。
我在TreeView里将部门信息按照隶属关系进行排列,形如
_所有部门
|_人力资源部
| |_教育科
| |_培训科
|
|_行政部
| |_管理科
.....我希望在点击某一个节点时,会动态组成一个SQL语句来查询该部门的员工信息,
在员工信息的表里与之相对应的是部门编码,比如某个员工属于人力资源部的教育科,而该教育科的部门编码是0101,则员工信息记录里的部门编码字段就是0101
现在的问题是,我在点击某一个节点时,能够获得部门名称,但我希望是用部门编码来组成SQL语句,
一种很笨的方法是,先根据部门名称来查询出部门编码,再用这个部门编码与员工信息相对应。
请问有没有一种方法,可以在生成这个部门树的同时,能够将部门编码也放在节点的信息里,
这样,我在点击节点时,能够方便的获得编码。或者说碰到这类问题,大家有没有更好的解决方法。
先谢谢各位了。
Data属性是个指针类型呢,具体怎么用呢,能不能写个示例?
使用TTreeNode的AddObject方法,把附属信息放到一个类里。
--------------------------
我没有找到你说的AddObject方法,能不能解释得详细一些?
PMyNodeData = ^TMyNodeData;
TMyNodeData = record
Code: String;
...
end;var
P: PMyNodeData;
begin
P := new(PMyNodeData);
P^.Code := 'aaaaa';
...
Node.Data := P;
...
end;
记的删除接点(窗体Destroy)的时候别忘记了释放指针
你的方法,应用在对一个节点的处理上是可以的,
我现在希望的是在对部门树进行初始化(也就是生成部门树)时将部门编码就放在节点里,你的做法
是不是每个节点都要对应一个结构指针呢?
就用 TreeNode 的 Data
可以指向一个 record 也可指向一个 Class的实例。很简单的。
是不是每个节点都要对应一个结构指针呢?
也不一定。不需要附加信息的就设为 nil 就可以
执行前先判断一下如果只保存 Integer 编号。
也可以用强行转化
把 Integer 转为 Pointer 保存在 Data 里。
不过最好还是用 record 。方便以前扩展。
你的想法和我不谋而合,我已经采用了你说的强制转化类型的方法,我知道这不是很好的方法,但因为编码全部是数字型的,应该问题不大。
我看了好像也没有其它可以用来借助的属性了。其实我是想最好是存放STRING型的,不知有没有更好的方法?
帮忙看看
var
myNode:TTreeNode;myNode.StateIndex := QryTmp.FieldByName('FitemId').AsInteger;这样就每个节点都有一个ID值了
点击节点的时候就可以直接读取
不知道符合你的要求没有
StateIndex 被借用了没有其它影响吧。会不会占了系统定义的东西,或者说我放进去的值会被系统修改了?
呵呵,终于找到一个知音,我就是用StateIndex,只要你程序中不写没有问题,系统不会修改,况且还需要定义stateimage才能改啊,该方法只能用于integer型
你刚才说的要定义stateimage才能改是什么意思?那我要借用StateIndex时也要定义stateimage吗?