各位:  我的数据表中的数据如下所示:
  
zb_DM zb_MC
  05 雷达、指挥仪、电子对抗及声纳
  0501 警戒雷达
  050101 警-11(513)警戒雷达
  050105 警-11(513型装箱式)警戒雷达
  050111 警-12(513甲)警戒雷达  即用代码长度表示树节点的位置,长度为2位(如05),则表示一级树节点,长度为4位,则表示二级节点.  请问我如何写一些代码将数据表中的内容填到树控件中去???

解决方案 »

  1.   

    你的这个控件不可以吧,用dbtree等和数据库相关的控件可以。
    只要数据表中有3个字段、id、parentid、name
    然后设置控件的3个属性parentfield、listfield、keyfield就可以了!
      

  2.   

    可以的,挺简单的:首先你,select 出来长度为2位的建立树的第一层;
    再select 出来长度为4位的建立树的第二层,当然第二层select 语句要包括where条件了;
    依此类推就行了,没问题的。
      

  3.   

    function GradeToSpace(SpaceCount: integer): string;
    var
      I: integer;
      s: string;
    begin
      s := ' ';
      result := '';
      if SpaceCount <> 1 then
        for I := 1 to SpaceCount - 1 do
          begin
            result := result + s;
          end;
    end;procedure DeptToText(LsQuery: TadoQuery; LoadView: TTreeView;  LsName,LsGrade: string);
    var
      FileId: integer;
      f: textfile;
    begin
      FileId := FileCreate(ExtractFilePath(ParamStr(0)) + 'Dept.txt');
      FileClose(FileId);
      assignfile(f, ExtractFilePath(ParamStr(0)) + 'Dept.Txt');
      Append(f);
      with LsQuery do
        begin
          First;
          while not Eof do
            begin
              Writeln(f, GradeToSpace(length(FieldByName(LsGrade).asstring)/2)
                + FieldByName(LsName).AsString);
              Next;
            end;
          First;
        end;
      Flush(f);
      closefile(f);
      LoadView.Items.Clear;
      LoadView.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Dept.Txt');
      DeleteFile(Pchar((ExtractFilePath(ParamStr(0)) + 'Dept.Txt')));
      if loadview.Items.Count <>0 then
        loadview.Select(loadview.Items.Item[0]); 
    end;使用:
    adoquery1.sql.text :='select zb_DM,zb_MC from tablename order by zb_DM';
    adoquery1.open;
    DeptToText(adoquery1,'zb_MC','zb_DM');
      

  4.   

    太马虎了,调用写错了,应该是:
    使用:
    adoquery1.sql.text :='select zb_DM,zb_MC from tablename order by zb_DM';
    adoquery1.open;
    DeptToText(adoquery1,treeview1,'zb_MC','zb_DM');
      

  5.   

    这是我前面发的一个贴子.你对比一下.原理是相通的.
    我用的是分级试的.
    MENUID     NENUNAME   parents_name
    00         在职员工    NULL
    0001       生管部     在职员工
    000101     小海盗     生管部
    第一个为他的ID 第一个为节点的名称.第三个存的是他父节点的名称
    //------------------------------创建树BEGIN----------------------------------
    procedure TFrm_Set_Power.CreateNavigationTree(tvThis:TTreeView);
    Var
     sqlstr:String;
     myQ,Child:TAdoQuery;
     sqlstr2:String;
     i:integer;
    Begin
    i:=0;
    tvThis.Items.Clear();
    myQ:=TadoQuery.Create(self);
    myQ.ConnectionString:=Frm_Main_Menu.ADOConnection1.ConnectionString;
    myQ.Close();
    myQ.SQL.Clear();        sqlstr  := 'Select menuid,MenuName menuname,MenuUrl menuurl,SetParameters menuparam From T_SysMenuInfo menu';
            sqlstr:= sqlstr+' where parents_name=' ;
            sqlstr:= sqlstr+'''''';
            sqlstr:= sqlstr+' Order By MenuId' ; myQ.Close();
     myQ.SQL.Clear();
     myQ.SQL.Add(sqlstr);
     myQ.Open();
     myQ.First();
     While not myQ.Eof do
      Begin
       tvThis.Items.Add(tvThis.Selected,myQ.FieldByName('menuname').AsString);
         begin
           Child:=tAdoQuery.Create(Self);
           Child.ConnectionString:=Frm_Main_Menu.ADOConnection1.ConnectionString;//'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=sa;Initial Catalog=WORK;Data Source=sbsever';              sqlstr2:='Select menuid,MenuName menuname,MenuUrl menuurl,SetParameters menuparam From T_SysMenuInfo menu';
                  sqlstr2:= sqlstr2+' where parents_name=' ;
                  sqlstr2:= sqlstr2+''''+myQ.FieldByName('menuname').AsString+'''';
                  sqlstr2:= sqlstr2+' Order By MenuId' ;
           
         Child.Close();
         Child.SQL.Clear();
         Child.SQL.Add(sqlstr2);
         Child.Open();
         Child.First();
        for i:=i to tvThis.Items.Count-1  do
             if  tvThis.items.Item[i].Text=myQ.FieldByName('menuname').AsString then
          begin
           While not Child.Eof do
           Begin
             tvThis.Items.AddChild(tvThis.items.Item[i],Child.FieldByName('menuname').AsString);
             Child.Next;
           End;
           Child.Free;
           break;
         END;
      end;
       i:=i+1;
     myQ.Next;
     End;
     myQ.Free();
     sqlstr:='';
     sqlstr2:='';
    End;
    //-------创建树END-----