是这样的,对一棵treeview
我想获得:
1,获得这棵树的全部最终子节点(即叶子),(也就是所有没有儿子的节点),
2,但是我需要记录这个叶子的父亲,祖父,。一直到根节点的某一个data的值
这个值以越靠近叶子为准:也就是说叶子的这个值存在,以叶子为准,没有的,找它的父亲,再没有的,找他的祖父,
谢谢!
我想获得:
1,获得这棵树的全部最终子节点(即叶子),(也就是所有没有儿子的节点),
2,但是我需要记录这个叶子的父亲,祖父,。一直到根节点的某一个data的值
这个值以越靠近叶子为准:也就是说叶子的这个值存在,以叶子为准,没有的,找它的父亲,再没有的,找他的祖父,
谢谢!
2。反过来遍历它的父节点直到根节点
node : TTreeNode;lst := TStringList.Create;for i:=0 to TreeView1.Items.Count-1 do
begin
if TreeView1.Item[i].Count = 0 then //是最终子节点
lst.add( IntToStr(i) );
end;所有的最终子节点的Index都在lst中保存.
for i:=0 to lst.Count-1 do
begin
node := TreeView1.Items[StrToInt(lst.Strings[i])].Parent;//得到父节点!
end;
2、不是很明白你的意思;
在BOM查询中有一个《尾阶材料清单》//《多阶材料用途清单》,你是想实现这样的功能吗?
tmpdata : string;
for i := 0 to tree.count -1 do
begin
if tree.items[i].haschildren = False then
begin
tmpdata := '';
tmpNode := tree.items[i];
while tmpdata = '' do
begin
tmpdata := getdata(tmpNode);
if tmpdata = '' then
begin
if tmpNode.index <> 0 then
tmpNode := tmpNode.parent
else
break;
end;
end;
//这个tmpdata的内容就是你需要的预警值
end;
end;
按你的需求你的《品号(物料编号)基本信息档(表)》中应该包含一个 ‘预警值’ 字段,
当然,你可以在《品号(物料编号)基本信息新增/编辑》模块修改这个值,
如果你的‘品号(物料编号)’是根据规则树自动生成的,你可以再规则树中对应的数据表中包含如下字段
id, parent, name, 预警值...
b, a, 化工原料类 5000
c, b, 胺类 1000
d, c, 甲胺 0
如上预警值包含在规则表中,在展树时写入节点DATA属性,在新增‘品号(物料编号)’时去判断如果当前节点的这个预警值为0,则找节点的父,
问题的关键是我要得到所有符合条件的叶子
所以必须找一下上级节点比较才能得出!
1 化工类 N 2000
101 化工原料类 N 1000
10101 胺类 N 800
1010101 甲胺 N 700
102 化工办成品
2 塑胶类
。
3
。。当然上述id对应你的‘物料编号’规则
如果你的规则表预警值改变了,你直接针对改变部分到品号(物料编号)基本信息档(表)》更新一下即可
假设有一全局量存储你要的数据,并赋有初值;
搜索下级节点前,先判断相关的DATA值,若其为合法值,修改预定的全局量,否则,搜索下级节点
就行了.