zoukankan      html  css  js  c++  java
  • 我的dbtreeview–treeview直接连接数据表_delphi教程

    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.

  • 相关阅读:
    java集合-方法
    Java线程池
    java疯狂讲义第18章类的加载和反射
    java疯狂讲义第16章多线程
    JAVA集合-HashMap的实现原理
    类加载-java new一个对象的过程发生了什么/Java对象创建过程
    JVM-java垃圾回收
    JVM-java内存区域
    JVM-java堆-新生代和老年代
    448. 找到所有数组中消失的数字
  • 原文地址:https://www.cnblogs.com/jijm123/p/11342093.html
Copyright © 2011-2022 走看看