我的DBTreeView--TreeView直接连接数据表

fly哼哼哈哈123

fly哼哼哈哈123

2016-02-19 13:21

下面图老师小编跟大家分享我的DBTreeView--TreeView直接连接数据表,一起来学习下过程究竟如何进行吧!喜欢就赶紧收藏起来哦~
unit Unit1;

  interface

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  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

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  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://m.tulaoshi.com/bianchengyuyan/)
展开更多 50%)
分享

猜你喜欢

我的DBTreeView--TreeView直接连接数据表

编程语言 网络编程
我的DBTreeView--TreeView直接连接数据表

在IE中直接连接SQL数据库

SQLServer
在IE中直接连接SQL数据库

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

MYSQL教程:检查数据表和修复数据表

编程语言 网络编程
MYSQL教程:检查数据表和修复数据表

数据表中数据的管理

编程语言 网络编程
数据表中数据的管理

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

MySQL 客户端不输入用户名和密码直接连接数据库的2个方法

编程语言 网络编程
MySQL 客户端不输入用户名和密码直接连接数据库的2个方法

用Jdbc-odbc直接连接access文件

编程语言 网络编程
用Jdbc-odbc直接连接access文件

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

优化大师磁盘碎片整理

优化大师磁盘碎片整理

文件与Olevariant

文件与Olevariant
下拉加载更多内容 ↓