同上

解决方案 »

  1.   

    TreeView如要静态写入,只要在items中添加具体的结构,就行了,如要改变TreeView的背景色
    和节点色就在oncustomdrw和oncustomdrwitem事件中写入。
      

  2.   

    unit TreeTest;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Buttons, DB, ADODB, ComCtrls, ExtCtrls, Grids, DBGrids,
      DBCtrls, Mask;type
      TForm1 = class(TForm)
        Panel1: TPanel;
        TreeView1: TTreeView;
        Panel2: TPanel;
        DataSource1: TDataSource;
        ADOConnection1: TADOConnection;
        ADOQuery1: TADOQuery;
        Panel3: TPanel;
        BitBtn1: TBitBtn;
        BitBtn2: TBitBtn;
        BitBtn3: TBitBtn;
        Panel4: TPanel;
        Panel5: TPanel;
        DBGrid1: TDBGrid;
        DBGrid2: TDBGrid;
        ADOQuery2: TADOQuery;
        DataSource2: TDataSource;
        BitBtn4: TBitBtn;
        DBNavigator1: TDBNavigator;
        DBEdit1: TDBEdit;
        ADOQuery1DEPID: TStringField;
        ADOQuery1NAME: TStringField;
        ADOQuery1UPDEP: TStringField;
        ADOQuery1NUMBER: TIntegerField;
        procedure FormShow(Sender: TObject);
        procedure ADOQuery1AfterPost(DataSet: TDataSet);
        procedure BitBtn1Click(Sender: TObject);
        procedure BitBtn3Click(Sender: TObject);
        procedure TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
        procedure TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
          State: TDragState; var Accept: Boolean);
      private
         procedure AddSubChild(FNodeName:String;Node:TTreeNode=nil);
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.AddSubChild(FNodeName: String; Node: TTreeNode=nil);
    var
      LocalName:String;
      AddChild:TTreeNode;
      ADOQueryTemp:TADOQuery;
    begin
      ADOQueryTemp:=TADOQuery.Create(nil);
      ADOQueryTemp.Connection:=ADOConnection1;
      with ADOQueryTemp do
       begin
           ADOQueryTemp.Close;
           ADOQueryTemp.SQL.Clear;
           ADOQueryTemp.SQL.Add('select * from master where updep='''+FNodeName+'''');
           ADOQueryTemp.Open;
           ADOQueryTemp.First;
           while not eof do
             begin
               LocalName:=ADOQueryTemp.fieldByName('Depid').AsString;
               AddChild:=TreeView1.Items.AddChild(Node,FieldByName('name').AsString);
               AddSubChild(LocalName,AddChild);
               Next;
             end;
       end;
    end;procedure TForm1.FormShow(Sender: TObject);
    begin
        AddSubChild('S',nil);
    end;procedure TForm1.ADOQuery1AfterPost(DataSet: TDataSet);
    var
      InsertQuery:TADOQuery;
      ParentID:String;
      InsertName:String;
      InsertNode:TTreeNode;
    begin
      InsertQuery:=TADOQuery.Create(nil);
      InsertQuery.Connection:=ADOConnection1;
      TreeView1.Items.Clear;
      AddSubChild('S',nil);
      TreeView1.Items.Owner.FullExpand;end;procedure TForm1.BitBtn1Click(Sender: TObject);
    begin
       DBGrid1.DataSource.DataSet.Append;
    end;procedure TForm1.BitBtn3Click(Sender: TObject);
    var
      DeleteItem:String;
    begin
      ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Add('delete from master where name='''+TreeView1.Selected.Text+'''');
      ADOQuery1.ExecSQL;
      ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Add('select * from master');
      ADOQuery1.Open;
      TreeView1.Selected.Delete;
    end;procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
    var
      TargetNode,SourceNode:TTreeNode;
    begin
      TargetNode:=TreeView1.GetNodeAt(X,Y);
      if TargetNode<>nil then
      begin
         SourceNode:=TreeView1.Selected;
         SourceNode.MoveTo(TargetNode,naAddChildFirst);
         TargetNode.Expand(false);
         TreeView1.Selected:=TargetNode;
      end;
    end;procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    var
      TargetNode,SourceNode:TTreeNode;
    begin
      TargetNode:=TreeView1.GetNodeAt(X,Y);
      if (Source=Sender) and(TargetNode<>nil) then
        begin
          Accept:=True;
          SourceNode:=TreeView1.Selected;
          while(TargetNode.Parent<>nil)and (TargetNode<>SourceNode) do
            begin
                TargetNode:=TargetNode.Parent;
                if TargetNode=SourceNode then
                  Accept:=false;
            end;
        end
        else
         Accept:=false;
    end;end.