数据表结构: dm          cm
            1           五金
            101         产品类
            10101       型钢类
            101010050   瓦片磁钢
            101010097   不锈钢锻件
            2           毛胚
            201         磁针
            20101       .....
            201010027   .....
            3          半成品
            301         .....
            30101       .....
            依次类推
要实现以下树:
    五金
      产品类
         型钢类
           瓦片磁钢
             不锈钢锻件
    毛胚
      磁针
       ....
    半成品
      .....
请教高手!

解决方案 »

  1.   

    你可以键一个表把这些东西都存下来
    比如
     ID    Name   PID
     1     五金    0
    101    产品类  1
    10101  型钢类  101
             
    这样的话你就可以通过 做两个函数直接在TreeView中显示出树型效果了。
    //寻找给定PID的父节点
    function TfrmUManage.FindParent(pid: string): Ttreenode;
    var
      i:integer;
      pp:^string;
      k:string;
    begin
      result:=nil;
      if pid='0' then
         exit;  for i:=tv.Items.Count-1 downto 0 do
        begin
           new(pp);
           pp:=tv.Items[i].data;
           k:=pp^;
           if k=pid then
              result:=tv.Items[i];
        end;
    end;
    //装载权限树
    procedure TfrmUManage.LoadTree;
    var
      pp:^string;
      node:TtreeNode;
      k:integer;
    begin
      with dstDefine do
        begin
          close;
          commandtext:='';
          commandtext:='select * from tblQuoteDefine ORDER BY PID';
          Open;
          first;
        end;
      tv.Items.Clear;
      while not dstDefine.Eof do
        begin
           New(pp);
           Node:=tv.Items.AddChild(FindParent(dstDefine['PID']),dstDefine['Qname']);
           pp^:=dstDefine['QID'];
           Node.Data:=pp;
           case node.Level of
             0:begin
                node.SelectedIndex:=1;
                Node.ImageIndex:=0;
               end;
             1:begin
                  node.SelectedIndex:=2;
                  Node.ImageIndex:=2;
               end;
             2:begin
                 k:=JudgeQuote(String(pp^));
                 node.SelectedIndex:=k;
                 Node.ImageIndex:=k;
               end;
           end;
           dstDefine.Next;
        end;
    end;