在delphi的demo下有个演示文件。

解决方案 »

  1.   

    我找不到啊,在demo 的哪个文件夹里啊
      

  2.   

    procedure LoadTree(treeDB: TClientDataSet);
    var
            nodeTxt:string;
            level:integer;
            mynode:array[0..3] of TTreenode;
    begin
            TreeView.Items.Clear;
            level:=0 ;
            mynode[level]:=TreeView.Items.Add(nil,'根结点');
            with treeDB do
            begin
                    First;
                    while not Eof do
                    begin
                            nodeTxt:=Trim(FieldByName('Name').AsString);
                            level:=FieldByName('Level').AsInteger;
                            if level>0 then
                            begin
                                    if level=1 then
                                            mynode[level]:=
                                            TreeView.Items.AddChild(mynode[level-1],nodeTxt)
                                    else
                                            mynode[level]:=
                                            TreeView.Items.AddChild(mynode[level-1],nodeTxt);
                            end;
                            Next;
                    end;
            end;  
    end;
    //先试试这个,有问题在联络
      

  3.   

    好象不行啊,level=1的都是根接点
      

  4.   

    这个简单,稍微修改一下就可以了
    procedure LoadTree(treeDB: TClientDataSet);
    var
            nodeTxt:string;
            level:integer;
            mynode:array[0..3] of TTreenode;
    begin
            TreeView.Items.Clear;
            with treeDB do
            begin
                    First;
                    while not Eof do
                    begin
                            nodeTxt:=Trim(FieldByName('Name').AsString);
                            level:=FieldByName('Level').AsInteger;
                            if level>0 then
                            begin
                                    if level=1 then
                                            mynode[level]:=TreeView.Items.Add(nil,nodeTxt)        
                                    else
                                            mynode[level]:=
                                            TreeView.Items.AddChild(mynode[level-1],nodeTxt);
                            end;
                            Next;
                    end;
            end;  
    end;
      

  5.   

    那不行的 要求必须是level=1的 其实这是一个森林,我对treeview不熟,所以向大家请教,我用第归实现 速度太慢了,
      

  6.   

    这个简单,稍微修改一下就可以了
    procedure LoadTree(treeDB: TClientDataSet);
    var
            nodeTxt:string;
            level:integer;
            mynode:array[0..3] of TTreenode;
    begin
            TreeView.Items.Clear;
            with treeDB do
            begin
                    First;
                    while not Eof do
                    begin
                            nodeTxt:=Trim(FieldByName('Name').AsString);
                            level:=FieldByName('Level').AsInteger;
                            if level>0 then
                            begin
                                    if level=1 then
                                            mynode[level]:=TreeView.Items.Add(nil,nodeTxt)        
                                    else
                                            mynode[level]:=
                                            TreeView.Items.AddChild(mynode[level-1],nodeTxt);
                            end;
                            Next;
                    end;
            end;  
    end;
      

  7.   

    mynode[level]:=
                                            TreeView.Items.AddChild(mynode[level-1],nodeTxt);
      

  8.   

    var  
      nodetemp:TTreenode;
      pstr:^string;
      str:string;
    begin
      with query(你的查询) do
      begin
        close;
        sql.clear;
        sql.text:='select id,name,parent_id from your_table where parent_id=-1';
      end;
      treeview1.Items.BeginUpdate;//这样会提高速度,系统不会每增加一个接点就重画树
      with query do
      begin
        open;
        if eof then exit;
        nodetemp:=nil;
        while not eof do
        begin
          new(pstr);
          pstr^:=fieldbyname('id').AsString;
          nodetemp:=treeview1.Items.AddObject(nil,fieldbyname('name').AsString,pstr);
          next;
        end;
      end;
      while nodetemp<>nil do
      begin
        CreateTree(query,nodetemp);
        nodetemp:=nodetemp.getPrevSibling;
      end;  treeview1.Items.EndUpdate;
      if treeview1.Items.Count>0 then
      treeview1.FullExpand;
      treeview1.Items[0].Selected:=true;
    end;procedure TDlasc.CreateTree(QuerySource:TADOQuery;NodeParent:TTreeNode);
    var
      pstr1, pstr2 : ^string;
      i : integer;
      NodeTemp : TTreeNode;
    begin
      QuerySource.close;
      pstr1 := NodeParent.Data;
      QuerySource.Sql.Text := 'SELECT id,name,parent_id FROM your_table WHERE parent_id = ' + '''' + pstr1^ + '''';
      QuerySource.open;
      QuerySource.First;
      if QuerySource.RecordCount = 0 then exit;  NodeTemp := nil;
      for i := 0 to QuerySource.RecordCount - 1 do
      begin
        new(pstr2);
        pstr2^ := QuerySource.FieldByName('id').AsString;
        NodeTemp := TreeView1.Items.AddChildObject(NodeParent,
          QuerySource.FieldByName('name').AsString, pstr2);
        QuerySource.Next;
      end;  while NodeTemp <> nil do
      begin
        CreateTree(QuerySource, NodeTemp);
        NodeTemp := Nodetemp.getPrevSibling;
      end;
    end;