本例效果图:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, DBGrids, DB, DBClient, StdCtrls, ComCtrls, ExtCtrls; type
  TForm1 = class(TForm)
    DataSource1: TDataSource;
    ClientDataSet1: TClientDataSet;
    DBGrid1: TDBGrid;
    TreeView1: TTreeView;
    Splitter1: TSplitter;
    procedure FormCreate(Sender: TObject);
    procedure TreeView1Change(Sender: TObject; Node: TTreeNode);
  end; var
  Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
  node: TTreeNode;
  List: TStringList;
  s: string;
begin
  {country.xml 是 Delphi 的数据示范文件, 也可以用 country.cds}
  ClientDataSet1.FileName := 'c:\temp\country.xml';
  ClientDataSet1.Active := True;
  DataSource1.DataSet := ClientDataSet1;
  DBGrid1.DataSource := DataSource1;
  {上面四行是让数据构件互相挂接, 也可以在设计时设定}   {建立 List}
  List := TStringList.Create;
  List.Sorted := True;          {指定排序}
  List.Duplicates := dupIgnore;  {避免重复}   {把数据加入到 TreeView}
  for i := to ClientDataSet1.FieldDefs.Count - do
  begin
    node := TreeView1.Items.Add(nil, ClientDataSet1.FieldDefs[i].Name); {字段名}     {为避免数据重复, 先把数据给 List}
    List.Clear;
    ClientDataSet1.First;
    while not ClientDataSet1.Eof do
    begin
      List.Add(ClientDataSet1.Fields[i].value);
      ClientDataSet1.Next;
    end;
    {把 List 中的数据加入到 TreeView}
    for s in List do TreeView1.Items.AddChild(node, s);
  end;   List.Free;
end; procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
  if Node.Parent <> nil then
  begin
    {下面的 Filter 其实就是 SQL 查询语句, 如果用其他数据库替换就是}
    ClientDataSet1.Filter := Node.Parent.Text + '=''' + Node.Text + '''';
    ClientDataSet1.Filtered := True;
  end else ClientDataSet1.Filtered := False; {选字段名时取消过虑}
end; end.

附数据库样本:

<?xml version="1.0" standalone="yes"?>
<DATAPACKET Version="2.0">
<METADATA>
<FIELDS>
<FIELD attrname="Name" fieldtype="string" WIDTH="24"/>
<FIELD attrname="Capital" fieldtype="string" WIDTH="24"/>
<FIELD attrname="Continent" fieldtype="string" WIDTH="24"/>
<FIELD attrname="Area" fieldtype="r8"/>
<FIELD attrname="Population" fieldtype="r8"/>
</FIELDS>
<PARAMS DEFAULT_ORDER="1" PRIMARY_KEY="1" LCID="2057"/>
</METADATA>
<ROWDATA>
<ROW Name="Argentina" Capital="Buenos Aires" Continent="South America" Area="2777815" Population="32300003"/>
<ROW Name="Bolivia" Capital="La Paz" Continent="South America" Area="1098575" Population="7300000"/>
<ROW Name="Brazil" Capital="Brasilia" Continent="South America" Area="8511196" Population="150400000"/>
<ROW Name="Canada" Capital="Ottawa" Continent="North America" Area="9976147" Population="26500000"/>
<ROW Name="Chile" Capital="Santiago" Continent="South America" Area="756943" Population="13200000"/>
<ROW Name="Colombia" Capital="Bagota" Continent="South America" Area="1138907" Population="33000000"/>
<ROW Name="Cuba" Capital="Havana" Continent="North America" Area="114524" Population="10600000"/>
<ROW Name="Ecuador" Capital="Quito" Continent="South America" Area="455502" Population="10600000"/>
<ROW Name="El Salvador" Capital="San Salvador" Continent="North America" Area="20865" Population="5300000"/>
<ROW Name="Guyana" Capital="Georgetown" Continent="South America" Area="214969" Population="800000"/>
<ROW Name="Jamaica" Capital="Kingston" Continent="North America" Area="11424" Population="2500000"/>
<ROW Name="Mexico" Capital="Mexico City" Continent="North America" Area="1967180" Population="88600000"/>
<ROW Name="Nicaragua" Capital="Managua" Continent="North America" Area="139000" Population="3900000"/>
<ROW Name="Paraguay" Capital="Asuncion" Continent="South America" Area="406576" Population="4660000"/>
<ROW Name="Peru" Capital="Lima" Continent="South America" Area="1285215" Population="21600000"/>
<ROW Name="United States of America" Capital="Washington" Continent="North America" Area="9363130" Population="249200000"/>
<ROW Name="Uruguay" Capital="Montevideo" Continent="South America" Area="176140" Population="3002000"/>
<ROW Name="Venezuela" Capital="Caracas" Continent="South America" Area="912047" Population="19700000"/>
</ROWDATA>
</DATAPACKET>

学习 TTreeView [15] - 连接数据库 (作为给 "丁永其" 和 "DELPHI万岁" 两位朋友的回复)的更多相关文章

  1. Ext.Net学习笔记15:Ext.Net GridPanel 汇总(Summary)用法

    Ext.Net学习笔记15:Ext.Net GridPanel 汇总(Summary)用法 Summary的用法和Group一样简单,分为两步: 启用Summary功能 在Feature标签内,添加如 ...

  2. SQL反模式学习笔记15 分组

    目标:查询得到每组的max(或者min等其他聚合函数)值,并且得到这个行的其他字段 反模式:引用非分组列 单值规则:跟在Select之后的选择列表中的每一列,对于每个分组来说都必须返回且仅返回一直值. ...

  3. 现代web开发需要学习的15大技术

    现代Web开发需要学习的15大技术 2016-06-08 13:08 快进到现在,我发现现代web开发再一次将发生压倒性的改变.信息资讯的铺天盖地令人迷惑,尤其对于初学者而言.首要原因是新的框架,例如 ...

  4. 并发编程学习笔记(15)----Executor框架的使用

    Executor执行已提交的 Runnable 任务的对象.此接口提供一种将任务提交与每个任务将如何运行的机制(包括线程使用的细节.调度等)分离开来的方法.通常使用 Executor 而不是显式地创建 ...

  5. [学习笔记]15个QA让你快速入门51单片机开发

    一.C语言相关 Q1:sbit与sfr代表是什么?有什么作用? Q2:#define OSC_FREQ  22118400L这句宏命令里的“L”是什么意思? Q3:我粘贴了别人的代码,怎么发现没有un ...

  6. 微信出现BUG,发送“ 两位数字+15个句号 ”,双方系统会卡崩……

    刚刚,有网友反映称,微信出现了新的bug.例如,在微信中发“两位数字+15个句号”(另一说法是任意数字,任意15个标点符号),如果有华为手机或者安卓手机收到,就会卡死. 用安卓手机的朋友可以试一下,不 ...

  7. android 智能指针的学习先看邓凡平的书扫盲 再看前面两片博客提升

    android 智能指针的学习先看邓凡平的书扫盲 再看前面两片博客提升

  8. 装饰者模式的学习(c#) EF SaveChanges() 报错(转载) C# 四舍五入 保留两位小数(转载) DataGridView样式生成器使用说明 MSSQL如何将查询结果拼接成字符串 快递查询 C# 通过smtp直接发送邮件 C# 带参访问接口,WebClient方式 C# 发送手机短信 文件 日志 写入 与读取

    装饰者模式的学习(c#) 案例转自https://www.cnblogs.com/stonefeng/p/5679638.html //主体基类 using System;using System.C ...

  9. USB小白学习之路(10) CY7C68013A Slave FIFO模式下的标志位(转)

    转自良子:http://www.eefocus.com/liangziusb/blog/12-11/288618_bdaf9.html CY7C68013含有4个大端点,可以用来处理数据量较大的传输, ...

随机推荐

  1. 一、冒泡排序Bubble sort

    https://www.cnblogs.com/kkun/archive/2011/11/23/2260312.html#3824357 #include<iostream> #inclu ...

  2. VUE this.$http.post 与后端flask 数据交互

    背景: 小鱼第一次前端用的VUE,然后前后端的交互调了几次,记录下来留给自己下次使用 前端 通过  form.XXX 获取数据,代码: <template> <el-form ref ...

  3. AtCoder NIKKEI Programming Contest 2019 C. Different Strokes (贪心)

    题目链接:https://nikkei2019-qual.contest.atcoder.jp/tasks/nikkei2019_qual_C 题意:给出 n 种食物,Takahashi 吃下获得 a ...

  4. GO语言基本数据类型

    一.整型 Go语言的数值类型分为以下几种:整数.浮点数.复数,其中每一种都包含了不同大小的数值类型,例如有符号整数包含 int8.int16.int32.int64 等,每种数值类型都决定了对应的大小 ...

  5. 51、[源码]-Spring容器创建-容器创建完成

    51.[源码]-Spring容器创建-容器创建完成 12.finishRefresh();完成BeanFactory的初始化创建工作:IOC容器就创建完成: 1).initLifecycleProce ...

  6. spark操作hive方式(scala)

    第一种方式: def operatorHive: Unit = { Class.forName("org.apache.hive.jdbc.HiveDriver") val url ...

  7. JAVA的变量,数据类型与运算符

    1. 变量 计算机处理数据,变量被用来存储处理的数据,之所以叫做变量因为你可以改变存储的值.更确切的说,一个变量指向着一块存储特定类型值的地址,换句话说,一个变量有名称.类型和值.一个变量有一个名称, ...

  8. 报警提示 System.NullReferenceException:“未将对象引用设置到对象的实例。

    System.NullReferenceException:“未将对象引用设置到对象的实例.是就因为Session在记录到服务器时,没有添加  IRequiresSessionState 所以运行时回 ...

  9. luogu 2934

    同 bzoj3694 需要先求出最短路树 #include <iostream> #include <cstdio> #include <algorithm> #i ...

  10. 【IOI2019】2048矩形模拟

    /* dos windows 25*80 */ #include <algorithm> #include <windows.h> #include <iostream& ...