下面图老师小编跟大家分享我的DBTreeView--TreeView直接连接数据表,一起来学习下过程究竟如何进行吧!喜欢就赶紧收藏起来哦~
【 tulaoshi.com - 编程语言 】
unit Unit1;interface
  uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    StdCtrls, DB, DBTables, ComCtrls, Grids, DBGrids, ExtCtrls,
    DBCtrls, Mask, ImgList;
  
  type
    TForm1 = class(TForm)
      TreeView1: TTreeView;
      ImageList1: TImageList;
      DataSource1: TDataSource;
      DBEdit1: TDBEdit;
      Label1: TLabel;
      Label2: TLabel;
      DBEdit2: TDBEdit;
      Table1: TTable;
      Label3: TLabel;
      DBNavigator1: TDBNavigator;
      Label4: TLabel;
      DBEdit3: TDBEdit;
      DBEdit4: TDBEdit;
      procedure FormCreate(Sender: TObject);
      procedure TreeView1Change(Sender: TObject; Node: TTreeNode);
      procedure DataSource1StateChange(Sender: TObject);
      procedure Table1AfterInsert(DataSet: TDataSet);
      procedure Table1BeforeDelete(DataSet: TDataSet);
      procedure Table1BeforeEdit(DataSet: TDataSet);
      procedure Table1AfterDelete(DataSet: TDataSet);
      procedure Table1AfterPost(DataSet: TDataSet);
    private
      function  GetFieldList: TStringList;
      { Private-Declarationen }
    public
      { Public-Declarationen }
    end;
  var
    Form1: TForm1;
    FieldList: TStringList;
  implementation
  uses TreeFunc;
{$R *.DFM}
  
  function TForm1.GetFieldList: TStringList;
  begin
       FieldList.clear;
       FieldList.add(Table1.fieldbyname('Country').asstring);
       FieldList.add(Table1.fieldbyname('city').asstring);
       FieldList.add(Table1.fieldbyname('Company').asstring);
       Result := FieldList;
  end;
  procedure TForm1.FormCreate(Sender: TObject);
  begin
       FieldList := TStringList.create;
       TreeView1.items.BeginUpdate;//forbid treeview update
       Table1.first;
       while not Table1.eof do
         begin
            TreeAddItem(TreeView1, GetFieldList, Table1.getBookmark, false);//生成结点
            Table1.next;
         end;
       FieldList.clear;
       TreeView1.Alphasort;
       TreeView1.items.Endupdate;
  //make first record selected:
       TreeView1.items[2].selected := true;
  end;
  procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
  begin
       Datasource1.enabled := Node.data  nil;
       if DataSource1.enabled then Table1.Gotobookmark(node.data);
  end;
  procedure TForm1.DataSource1StateChange(Sender: TObject);
  var
     ItemList: TStringList;
     Node: TTreeNode;
  begin
  end;
  procedure TForm1.Table1AfterInsert(DataSet: TDataSet);
  begin
       FieldList.clear;
  end;
  procedure TForm1.Table1BeforeDelete(DataSet: TDataSet);
  begin
       GetFieldList;
  end;
  procedure TForm1.Table1BeforeEdit(DataSet: TDataSet);
  begin
       GetFieldList;
  end;
  procedure TForm1.Table1AfterDelete(DataSet: TDataSet);
  var
     CascadeDeleteLevel: Integer;
  begin
       CascadeDeleteLevel := 0;
       TreeDeleteItem(TreeView1, FieldList, CascadeDeleteLevel);
  end;
  procedure TForm1.Table1AfterPost(DataSet: TDataSet);
  begin
       TreeView1.items.beginUpdate;
       if FieldList.count  0 then TreeDeleteItem(TreeView1, Fieldlist, 0);
       TreeView1.selected := TreeAddItem(TreeView1, GetFieldlist, Table1.getbookmark, True);
       TreeView1.items.endUpdate;
  end;
  end.
  ///------------------------
  unit TreeFunc;
interface
  uses
    Windows, Messages, SysUtils, Classes, Graphics, ComCtrls, DB, Forms, Dialogs;
  function  TreeFindItem(Sender: TTreeView; NodeItem: TTreeNode; Name: String): TTreeNode;
  function  TreeAddItem(Sender: TTreeView; ItemList: TStrings; Bookmark: TBookmark; Resort: Boolean): TTreeNode;
  function  TreeGetItem(Sender: TTreeView; ItemList: TStrings): TTreeNode;
  procedure TreeDeleteItem(Sender: TTreeView; ItemList: TStrings; Level: Integer);
implementation
  
  function TreeAddItem(Sender: TTreeView; ItemList: TStrings; Bookmark: TBookmark; Resort: Boolean): TTreeNode;
  var
     ThisNode, Node: TTreeNode;
     I: Integer;
  begin
       Node := nil;   //nil = level 0 has no parent node
                      //this is checked by TreeFindItem
       for I := 0 to Itemlist.count -1 do
          begin //for
            ThisNode := TreeFindItem(Sender, node, Itemlist[i]);
            if ThisNode  nil then
              Node := ThisNode
            else
              begin
                 if I  Itemlist.count -1 then
                   begin
                      if I = 0 then
                        Node := Sender.items.Add(Node, Itemlist[i])
                      else
                        Node := Sender.items.AddChild(Node, Itemlist[i]);
                   end
                 else
                   begin
                      if I = 0 then
                        Node := Sender.items.AddObject(Node, Itemlist[i], Bookmark)
                      else
                        Node := Sender.items.AddChildObject(Node, Itemlist[i], Bookmark);
                   end;
                 Node.stateIndex := Node.level + 1;
                 if Resort and (Node.parent  nil) then Node.parent.alphasort;
              end;
          end; //for
       Result := Node;
  end;
  function TreeFindItem(Sender: TTreeView; NodeItem: TTreeNode; Name: String): TTreeNode;
  begin
       if NodeItem = nil then NodeItem := Sender.items.getfirstnode
       else NodeItem := NodeItem.getfirstchild;
  //NodeItem is now the first item of the desired level
  //if this level has no items, NodeItem is nil
       if (NodeItem  nil) and (NodeItem.text  Name) then
       repeat
             NodeItem := NodeItem.getnextsibling;
       until (NodeItem = nil) or (NodeItem.text = Name);
       Result := NodeItem;
  end;
  function TreeGetItem(Sender: TTreeView; ItemList: TStrings): TTreeNode;
  begin
       Result := TreeAddItem(Sender, Itemlist, nil, false);
  end;
  procedure TreeDeleteItem(Sender: TTreeView; ItemList: TStrings; Level: Integer);
  var
     Node, Parent: TTreeNode;
  begin
       Node := TreeGetItem(Sender, ItemList);
       while Node.level = Level do
       begin
            Parent := Node.parent;
            Node.delete;
            if (Parent = nil) or (Parent.hasChildren) then break;
            Node := Parent;
       end;
  end;
  
  end.
  
来源:http://www.tulaoshi.com/n/20160219/1603954.html
看过《我的DBTreeView--TreeView直接连接数据表》的人还看了以下文章 更多>>