是这样的,对一棵treeview
我想获得:
1,获得这棵树的全部最终子节点(即叶子),(也就是所有没有儿子的节点),
2,但是我需要记录这个叶子的父亲,祖父,。一直到根节点的某一个data的值
这个值以越靠近叶子为准:也就是说叶子的这个值存在,以叶子为准,没有的,找它的父亲,再没有的,找他的祖父,
谢谢!  

解决方案 »

  1.   

    先找到叶子节点然后反过来遍历它的父节点直到根节点,保存符合条件的data值
      

  2.   

    1.TREEVIEW好象有这样的方法
    2。反过来遍历它的父节点直到根节点
      

  3.   

    lst : TStringList;
    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;
      

  4.   

    1,遍历树,判断是否有子节点
    2、不是很明白你的意思;
    在BOM查询中有一个《尾阶材料清单》//《多阶材料用途清单》,你是想实现这样的功能吗?
      

  5.   

    你可以先把预警值当做DATA(用ADDOBJECT方法存,自己写个函数GETDATA取)存进每个节点,以下应该可以实现你的功能(代码自己写吧,呵呵)。tmpnode : TNode;
    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;
      

  6.   

    你这个问题就是个安全存量的问题,
    按你的需求你的《品号(物料编号)基本信息档(表)》中应该包含一个 ‘预警值’ 字段,
    当然,你可以在《品号(物料编号)基本信息新增/编辑》模块修改这个值,
    如果你的‘品号(物料编号)’是根据规则树自动生成的,你可以再规则树中对应的数据表中包含如下字段
    id,  parent,  name,        预警值...
    b,   a,       化工原料类    5000
    c,   b,      胺类          1000
    d,   c,      甲胺          0
    如上预警值包含在规则表中,在展树时写入节点DATA属性,在新增‘品号(物料编号)’时去判断如果当前节点的这个预警值为0,则找节点的父,
      

  7.   

    预警值已经在数据库里了,也已生成treeview了,(我用的dxdbtreeview)
    问题的关键是我要得到所有符合条件的叶子
    所以必须找一下上级节点比较才能得出!
      

  8.   

    当然,有可能你的‘物料编号’不是依据规则树自动生成的,并且你的这个‘预警值’ 又可能随时变化(按类别),那你可以这样来做:规则表:id,       name,       是否尾节点     预警值...
    1         化工类         N            2000
    101       化工原料类     N             1000
    10101     胺类          N              800
    1010101   甲胺          N              700
    102       化工办成品

    2         塑胶类

    3
    。。当然上述id对应你的‘物料编号’规则
    如果你的规则表预警值改变了,你直接针对改变部分到品号(物料编号)基本信息档(表)》更新一下即可
      

  9.   

    就按我上次给你的递归程序来做,在函数中加入下面的处理过程:
    假设有一全局量存储你要的数据,并赋有初值;
    搜索下级节点前,先判断相关的DATA值,若其为合法值,修改预定的全局量,否则,搜索下级节点
    就行了.