不知那位英雄可赐教求treeview初始化的思路

解决方案 »

  1.   

    procedure DataSetToTreeView(DataSet: TDataSet; var TreeView: TTreeView; NodeRoot: string);
    var Nodes: array of TTreeNode;
        Strs: array of string;
        i: integer;
    begin
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      with DataSet do
      begin
        Close;
        Open;
        //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        SetLength(Nodes, FieldCount+1);
        SetLength(Strs, FieldCount);
        Nodes[0] := TreeView.Items.AddChild(nil, NodeRoot);
        for i:=Low(Strs) to High(Strs) do Strs[i] := #255;
        //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        First;
        while not Eof do
        begin
          for i:=Low(Strs) to High(Strs) do
            if Strs[i]<>Fields[i].AsString then
            begin
              Strs[i] := Fields[i].AsString;
              Nodes[i+1] := TreeView.Items.AddChild(Nodes[i],Fields[i].AsString);
            end;
          Next;
        end;
        Close;
      end;
    end;
      

  2.   

    我程序里的一段,和数据库关联,你自己研究一下吧:procedure TMDIChild.LoadTreeView;
    var
      strsql,tid:string;
    begin
      try
        
        DataModule3.ADOTable3.open;
        DataModule3.ADOTable3.Locate('DTname',RzComboBox1.Text,[lopartialkey]);
        tid:=inttostr(DataModule3.ADOTable3.FieldByName('id').value);
        strsql:='select * from T where TypeID='+tid;
        DQ.Active :=false;
        DQ.SQL.Clear ;
        DQ.SQL.Add(strsql);
        DQ.Active :=true;
        DQ.Filtered :=true;
        DQ.Filter := 'Parent=0';
        U_DiGui(0,RzTreeView1.TopItem );//&acute;&Oacute;&micro;±&Ccedil;°0&sup2;&atilde;&iquest;&ordf;&Ecirc;&frac14;&micro;&Yacute;&sup1;é&frac12;¨&Ecirc;÷
      except
        showmessage('×&Ouml;&micro;&auml;&Agrave;&iuml;&Atilde;&raquo;&Oacute;&ETH;&Ecirc;&yacute;&frac34;&Yacute;&pound;&iexcl;');
      end;
    end;
    procedure TMDIChild.U_DiGui(parentID:Cardinal;ParentNode:TTreeNode);
    var
      tmpTBData:array of TableData;
      i,j:integer;
      tmpNode:TTreeNode;begin
      RzProgressBar.TotalParts :=DQ.RecordCount;
      RzProgressBar.PartsComplete :=0;
      j:=DQ.RecordCount;
      setlength(tmpTBData,j);//±&pound;&acute;&aelig;&micro;&Yacute;&sup1;&aelig;&Eacute;&Iuml;&Ograve;&raquo;&sup2;&atilde;&frac12;á&micro;&atilde;&Ouml;&micro;
      for i:=0 to j-1 do begin
        tmpTBData[i].ID := Cardinal(DQ.fieldbyname('ID').value);
        tmpTBData[i].Name  := DQ.fieldbyname('Name').value;
        tmpTBData[i].ParentID  := Cardinal(DQ.fieldbyname('Parent').value);
        DQ.Next;
      end;
      for i:=0 to j-1 do begin //&micro;&Yacute;&sup1;&aelig;&micro;÷&Oacute;&Atilde;&frac12;¨&Aacute;&cent;&Euml;ù&Oacute;&ETH;&frac12;á&micro;&atilde;
        tmpNode:=RzTreeView1.Items.AddChild(ParentNode,tmpTBData[i].Name);
        RzProgressBar.PartsComplete:=RzProgressBar.PartsComplete+1;
     //   tmpNode.ImageIndex:=2;
        new(pData);
        pData^.ID:=tmpTBData[i].ID;
        tmpNode.Data:=pData;
        DQ.Filter := 'Parent=' + IntToStr(Integer(tmpTBData[i].ID));
        if DQ.RecordCount >0 then begin
          U_DiGui(tmpTBData[i].ID,tmpNode );
        end;
      end;
    end;