BOM表,如下:
父阶    子阶    需求量
a        b        1
a        c        3
b        d        1
c        g        2
c        E        8
.................如何得到表中任一物品BOM构成的树型结构?(即,以该物品为root的其各个子阶构成的树型结构)
用递归的方法该怎么实现?非常想要源码.http://community.csdn.net/Expert/topic/2849/2849392.xml?temp=.1997949
这里有个例子没完全看明白,应该可以,treenode参数是做什么用的?

解决方案 »

  1.   

    PTreerec = ^TTreerec;
       TTreerec = record
         classNo: string;     //子编号
         Classnm: string;     //类别名称
         pclassno : String;   //父类别.
      end;procedure TSingleXc.AddItem(FTreeNode: TTreeNode; Classno: PTreerec;
      Pclassno: string);
    var
      I,K:integer;
      MyList:TList;
      TempItem:PTreerec;
      LTreeNode: TTreeNode;
    begin
      MyList:=Tlist.Create;
      try
        for i:=0 to FItemList.Count-1 do
        Begin
          TempItem:=PTreerec(Fitemlist.Items[i]);
          if uppercase(TempItem.pclassno)=Pclassno then
            MyList.Add(TempItem);
        end;
        For I:=0 to MyList.Count-1 do
        Begin
          For K:=0 to Fitemlist.Count-1 do
          Begin
            if uppercase(PTreerec(Mylist.Items[i]).classno)
              =uppercase(Ptreerec(Fitemlist.Items[k]).classNo ) then
            Begin
              Fitemlist.Delete(k);
              Break;
            end;
          end;
        end;
        for I:=0 to MyList.Count -1 do
        Begin
          TempItem:=PTreerec(Mylist.Items[i]);
          LTreeNode:=TTreeNode.Create(nil);
          LTreeNode:=Tv_class.Items.AddChild(FTreeNode,'['+Ptreerec(mylist.items[i]).classNo +']'+ Ptreerec(mylist.items[i]).Classnm);
          if Ptreerec(mylist.items[i]).pclassno =''  then
            LTreeNode.ImageIndex :=1
          else
            LTreeNode.ImageIndex :=2;
          LTreeNode.SelectedIndex :=3;
          //LtreeNode.Expand(True);
          AddItem(LTreeNode,TempItem ,TempItem.classno );  //递归.
        end;
      finally
        MyList.Free;
      end;end;
      

  2.   

    PTreerec = ^TTreerec;
       TTreerec = record
         classNo: string;     //子编号
         Classnm: string;     //类别名称
         pclassno : String;   //父类别.
      end;procedure TSingleXc.AddItem(FTreeNode: TTreeNode; Classno: PTreerec;
      Pclassno: string);
    var
      I,K:integer;
      MyList:TList;
      TempItem:PTreerec;
      LTreeNode: TTreeNode;
    begin
      MyList:=Tlist.Create;
      try
        for i:=0 to FItemList.Count-1 do
        Begin
          TempItem:=PTreerec(Fitemlist.Items[i]);
          if uppercase(TempItem.pclassno)=Pclassno then
            MyList.Add(TempItem);
        end;
        For I:=0 to MyList.Count-1 do
        Begin
          For K:=0 to Fitemlist.Count-1 do
          Begin
            if uppercase(PTreerec(Mylist.Items[i]).classno)
              =uppercase(Ptreerec(Fitemlist.Items[k]).classNo ) then
            Begin
              Fitemlist.Delete(k);
              Break;
            end;
          end;
        end;
        for I:=0 to MyList.Count -1 do
        Begin
          TempItem:=PTreerec(Mylist.Items[i]);
          LTreeNode:=TTreeNode.Create(nil);
          LTreeNode:=Tv_class.Items.AddChild(FTreeNode,'['+Ptreerec(mylist.items[i]).classNo +']'+ Ptreerec(mylist.items[i]).Classnm);
          if Ptreerec(mylist.items[i]).pclassno =''  then
            LTreeNode.ImageIndex :=1
          else
            LTreeNode.ImageIndex :=2;
          LTreeNode.SelectedIndex :=3;
          //LtreeNode.Expand(True);
          AddItem(LTreeNode,TempItem ,TempItem.classno );  //递归.
        end;
      finally
        MyList.Free;
      end;end;
      

  3.   

    SQL下展BOM树:
    http://community.csdn.net/Expert/topic/3162/3162148.xml?temp=.2161066
      

  4.   

    我有在Sql Server2000下的这样的存储过程.
    E-mail:[email protected]