现在的位置: 首页 > 综合 > 正文

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

2013年06月27日 ⁄ 综合 ⁄ 共 1479字 ⁄ 字号 评论关闭
本例效果图:



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.

附数据库样本:

<?xml version="1.0" standalone="yes"?><datapacket version="2.0"><metadata><fields><field attrname="Name" fieldtype="string" width="24"></field><field attrname="Capital" fieldtype="string" width="24"></field><field attrname="Continent" fieldtype="string" width="24"></field><field attrname="Area" fieldtype="r8"></field><field attrname="Population" fieldtype="r8"></field></fields> <params default_order="1" primary_key="1" lcid="2057"></params></metadata><rowdata><row name="Argentina" capital="Buenos Aires" continent="South America" area="2777815" population="32300003"></row><row name="Bolivia" capital="La Paz" continent="South America" area="1098575" population="7300000"></row><row name="Brazil" capital="Brasilia" continent="South America" area="8511196" population="150400000"></row><row name="Canada" capital="Ottawa" continent="North America" area="9976147" population="26500000"></row><row name="Chile" capital="Santiago" continent="South America" area="756943" population="13200000"></row><row name="Colombia" capital="Bagota" continent="South America" area="1138907" population="33000000"></row><row name="Cuba" capital="Havana" continent="North America" area="114524" population="10600000"></row><row name="Ecuador" capital="Quito" continent="South America" area="455502" population="10600000"></row><row name="El Salvador" capital="San Salvador" continent="North America" area="20865" population="5300000"></row><row name="Guyana" capital="Georgetown" continent="South America" area="214969" population="800000"></row><row name="Jamaica" capital="Kingston" continent="North America" area="11424" population="2500000"></row><row name="Mexico" capital="Mexico City" continent="North America" area="1967180" population="88600000"></row><row name="Nicaragua" capital="Managua" continent="North America" area="139000" population="3900000"></row><row name="Paraguay" capital="Asuncion" continent="South America" area="406576" population="4660000"></row><row name="Peru" capital="Lima" continent="South America" area="1285215" population="21600000"></row><row name="United States of America" capital="Washington" continent="North America" area="9363130" population="249200000"></row><row name="Uruguay" capital="Montevideo" continent="South America" area="176140" population="3002000"></row><row name="Venezuela" capital="Caracas" continent="South America" area="912047" population="19700000"></row></rowdata></datapacket>

抱歉!评论已关闭.