`
ivfh
  • 浏览: 59956 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

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

阅读更多
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.

 

分享到:
评论

相关推荐

    PHP DBTreeView-开源

    1. 下载dbtreeview-distrib-1.0.2压缩包,解压后将文件夹上传到服务器的适当位置。 2. 引入PHP DBTreeView的CSS和JavaScript文件到您的HTML页面。 3. 创建PHP脚本来连接数据库,获取数据,并将其格式化为...

    dbtree (数据库连接treeview函数)

    这个项目可能包含了实现数据库连接和数据在treeview中显示的特定功能。 在提供的压缩包文件中,我们可以看到以下几个关键文件: 1. **A.BAT**:这可能是一个批处理文件,用于自动化执行某些命令或脚本,比如编译或...

    Virtual-TreeView-7.4.zip

    "dbtreeview"标签表明Virtual-TreeView支持与数据库的紧密集成。这使得开发者可以轻松地将数据库中的记录以树形结构显示,用户可以通过节点的展开和折叠来查看不同级别的数据。控件提供了与各种数据源(如TDataSet)...

    dbtreeview

    "dbtreeview"是一个基于Delphi开发的源代码项目,主要用于解决大数据量时树形视图控件(TreeView)显示性能问题。在多年前,开发者就已经创建并个人使用此工具,通过利用Dataset连接数据,提升了在处理大量数据时的...

    delphi自定义控件_treeview控件加强

    本主题将深入探讨如何对Delphi的内置TreeView控件进行增强,以实现更丰富的功能,例如增删改及拖拽操作。我们将以一个名为`TmyTreeView`的自定义控件为例进行讲解。 首先,`TmyTreeView`是对原生`TTreeView`控件的...

    dbtreeview 1.31 demo

    2. **数据绑定**:dbtreeview可以直接绑定到数据集(如TDataSet或TDatasource),这样当数据库中的数据发生变化时,控件会自动更新。同时,用户对控件的操作(如节点的展开、折叠、选择)也能反馈到数据集,实现了...

    DBTREEVIEw

    总的来说,DBTREEVIEW是一个强大的工具,结合了VirtualTreeView、DynamicTreeView和ThemeManager等组件,提供了一种高效、灵活且美观的方式来在Delphi 7应用中展示数据库数据。它适合那些需要处理复杂数据结构,并...

    Delphi结合数据库生成Treeview树控菜单视图类.rar

    这个类通过数据库中的数据自动添加到Treeview控件中,不过数据控件用的是ADO组件,另外数据库中存放Treeview节点数据表的结构位:ID:integer;PID:Integer;Caption:string;字段名成可以不同,但是类型必须相同!  ...

    DBTreeView

    继承于DBTree,专用于显示树形结构添加了新的属性: DataSet 数据集 KeyField 关键字段,即代码字段 CaptionField 节点显示字段 HeadCaption 第一个节点显示内容方法: BuildTree 生成树

    VB.NET中层次数据绑定TreeView的实现

    在VB.net中,由于数据绑定功能的加强及语言特性的增强,可以很容易的实现TreeView与层次数据的绑定,本文将首先建立一个继承自TreeView的 dbTreeView,然后用一个单位(部门)的层次数据与dbTreeView进行数据绑定,并...

    由特定数据库表格式(3个字段)生成TreeView树型

    7. **XVJIE2002_DBTreeView.gif**:这可能是一个示例图,展示了如何在TreeView中显示从数据库中获取的数据。 8. **db1.mdb**:这是一个Microsoft Access数据库文件,很可能包含了3个字段的表,供程序读取并构建...

    如何把数据库的列名作为根节点添加到dbtreeview

    如何把数据库的列名作为根节点添加到dbtreeview

    delphi实现myTreeView\myDBTreeView带数据库存取

    - 这个控件可以直接与数据库进行连接,如通过ADO(ActiveX Data Objects)或BDE(Borland Database Engine)等数据访问技术,与各种数据库(如SQL Server、Oracle、MySQL等)进行交互。 - 数据库操作可能包括:...

    ExpressDBTree Suite 1.34 + source code

    1.34 for VCL / Borland Compilers Included in Packs: ExpressQuantumPack for Delphi and C++Builder, VCL Subscription &lt;br&gt;Components TreeView DBTreeView TreeView Edit DBTreeView Edit ...

    Fix DBTreeView

    要求也不高,只需要继承于TTreeView,载入数据表树结构,展示出一个TreeView,能简单的拖动,删除树结构的操作就行, 求人不如求自,既然简单的就自己来做一个控件吧!经过三天参看源码和网络技术资料搜索,基本学会...

    Delphi读取数据库并建立Treeview树状视图目录

    内容索引:Delphi源码,数据库应用,Treeview,树控 Delphi读取数据库并建立Treeview树状视图目录,内部建立两组资料,一级仅12条数据,另一组则1200多条数据,并含四种测试方法,通过本程序可测试在读取两组不同资料时...

    DBTree控件(BCB)

    1. 数据绑定:DBTree控件能够直接与数据库连接,自动加载并显示数据表中的记录。开发者可以设置数据源,如SQL查询或ADO连接,使得树形节点与数据库记录一一对应。 2. 层级结构:DBTree控件支持多层节点,每个节点...

    支持双缓冲的C#树形控件和列表视图

    在C#编程中,开发用户界面时,树形控件(TreeView)和列表视图(ListView)是非常常用的数据展示组件。本项目针对这两个控件进行了性能优化,实现了双缓冲技术,提高了显示效率,降低了闪烁现象,提升了用户体验。...

    delphi7_myDBTreeView带数据库存取v1.5

    数据源通常连接到一个数据访问组件(如TTable、TQuery或TADOQuery),这样myDBTreeView就可以显示数据集中的字段,并允许用户进行增删改查操作。myDBTreeView的每个节点都对应数据集中的一个记录,节点的展开和折叠...

    delphi_myDBTreeView带数据库存取v1.2

    TmyDBtreeview 对treeview控件加强 增加数据感知功能 实现增删改及拖拽操作 实现对数据库存取操作 +++++++++++++++++++++ 增加dataactive属性 可在设计期间读树

Global site tag (gtag.js) - Google Analytics