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

2016-02-19 13:21 48 1 收藏

下面图老师小编跟大家分享我的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;

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

  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;

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

  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.
  

来源:https://www.tulaoshi.com/n/20160219/1603954.html

延伸阅读
标签: Web开发
我用一段原代码来向你解释如何利用JSP连接到数据库,使用起来非常简单,CUT然后PASTE,原代码中我给出了详细的注释。 !--首先导入一些必要的packages-- !--开始导入packages-- %@ page info="database handler"% %@ page import="java.io.*"% %@ page import="java.util.*"% %@ page import="java.sql.*"% %@...
标签: Web开发
create table test(test1 varchar(20),test2 varchar(20) 然后向这个表写入一条测试纪录 那么现在开始我们的jsp和数据库之旅吧。   testoracle.jsp如下: %@ page contentType="text/html;charset=gb2312"%    %@ page import="java.sql.*"% html    body &nb...
一个程序连接数据库中间就需要有一个数据库连接引擎 笔者在使用Delphi的过程中,共使用过几种连接方式连接Access,SqlServer,Oracle,IBM UDB,IBM AS/400... 1.BDE     这是使用Delphi最多的一种方式,建立一个BDE别名可以在控制面板中的BDE Administration中添加,不过我习惯在SQL Explorer中建立,因为...
标签: ASP
  下面将简单介绍一下几种ADO连接方式:ODBC DSN,ODBC DSN-Less, OLE DB Provider,和"MS Remote" Provider. 1。ODBC DSN连接 I.DSN     oConn.Open "DSN=AdvWorks;" & _         "UID=Admin;" & _      ...
正在看的ORACLE教程是:Oracle 数据表分区的策略。本文描述通过统计分析出医院信息系统需分区的表,对需分区的表选择分区键,即找出包括在你的分区键中的列(表的属性),对大型数据的管理比较有意义, 本文的工作在Oracle8.1.6下实现。 Oracle虽然是一个大型的DBMS,但如果不对记录比较多的表进行处理,仍然发挥不了Oracle管理大型数据...

经验教程

923

收藏

41
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部