表名:TableName
字段:NodeNO(主键),ParentNO,NodeLevel,NodeType,NodeName
控件:Treeview
请问各位大侠如何生成树,树的层数不限,最好不用NodeLevel字段,如果实在不行也可用。

解决方案 »

  1.   

    此程序没有用NodeLevel:  
    TTreeViewData = record
           indexID : Integer;
           ParentID : Integer;
           NodeType: Integer;
      end;procedure TSQLTV.CreateTreeView(Node: TTreeNode; SQLStr: String; var TreeView: TTreeView);
    var
      tmpQ: TADOQuery;
      tmpNode: TTreeNode;
      TVData: ^TTreeViewData;
    begin
      tmpQ := TADOQuery.Create(nil);
      tmpQ.ConnectionString := ConStr;  try
        with tmpQ do
        begin
          Close;
          SQL.Clear;
          SQL.Add('select * from TreeView where ParentNo='+SQLStr);
          try
            Open;
          except
            ;
          end;      if RecordCount > 0 then
          begin
            First;
            while not Eof  do
            begin
              new(TVData);
              TVData.indexID := FieldByName('NodeNo').AsInteger;
              TVData.ParentID := FieldByName('ParentNo').AsInteger;
              tmpNode := Treeview.Items.AddChild(Node,FieldByName ('NodeName').Asstring);
              TVData.NodeType := FieldByName('NodeType').AsInteger;
              tmpNode.Data := TVData;
              CreateTreeView(tmpNode, FieldByName ('Index_id').Asstring, TreeView);
              Next;
            end;
          end;
        end;
      finally
        tmpQ.Free;
      end;
    end;//从库中读取数据形成TreeView
    procedure TSQLTV.OutputTreeView(var TreeView: TTreeView);
    var
      Node: TTreeNode;
      tmpQ: TADOQuery;
      TVData: ^TTreeViewData;
    begin
      TreeView.Items.Clear;
      try
        tmpQ := TADOQuery.Create(nil);
        tmpQ.ConnectionString := ConStr;
      except
        ;
      end;  tmpQ.Close;
      tmpQ.SQL.Clear;
      tmpQ.SQL.Add('select * from TreeView where parentNO = 0');
      try
        tmpQ.Open;
      except
        ;
      end;  if tmpQ.RecordCount > 0 then
      begin
        tmpQ.First;
        while not tmpQ.Eof do
        begin
          new(TVData);
          TVData.indexID := tmpQ.FieldByName('NodeNo').AsInteger;
          TVData.ParentID := tmpQ.FieldByName('ParentNO').AsInteger;
          TVData.NodeType := tmpQ.FieldByName('NodeType').AsInteger;
          Node := Treeview.Items.Add(nil, tmpQ.FieldByName ('NOdename').Asstring);
          Node.Data := TVData;
          CreateTreeView(node, tmpQ.FieldByName ('NodeNo').Asstring, TreeView);
          tmpQ.Next;
        end;
      end;
    end;
      

  2.   

    var
      TVData : ^TTreeViewData;
      vType: Integer;
    begin
        TVData := TreeView.Selected.Data;
        if TVData <> nil then
        begin
          vType := TVData.NodeType;
        end;
    end;