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

本例效果图:

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

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.


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

你可能感兴趣的:(treeview)