本例效果图:
<?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>
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 := 0 to ClientDataSet1.FieldDefs.Count - 1 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.附数据库样本: