Learn TTreeView [15] - connection to the database (as for "DING its" and "DELPHI" long live two friends reply)

Effect of the present embodiment FIG:

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}

procedureTForm1.FormCreate (Sender: TObject);
 var 
  I: Integer; 
  Node: TTreeNode; 
  List: a TStringList; 
  S: String ;
 the begin
   {country.xml Delphi is an exemplary data file, can also be used} country.cds 
  ClientDataSet1.FileName: = 'C: \ TEMP \ country.xml' ; 
  ClientDataSet1.Active: = True; 
  DataSource1.DataSet: = ClientDataSet1; 
  DBGrid1.DataSource: = to DataSource1; {four rows above the data member is to mount each other, may be provided in the design } set {} establish List 
  List: = TStringList.Create; 
  List.Sorted: = True;            {specified sort} 
  List.Duplicates: = dupIgnore;   {} to avoid duplication {} the added data to the TreeView for I: = 0
  

  

  
   to ClientDataSet1.FieldDefs.Count - . 1  do 
  the begin 
    Node: = TreeView1.Items.Add ( nil , ClientDataSet1.FieldDefs [I] .Name); {field name} 

    {avoid duplicate data, to the first data} List 
    List.Clear ;
    ClientDataSet1.First; the while Not ClientDataSet1.Eof do the begin 
      List.Add (ClientDataSet1.Fields [I] .Value);
      ClientDataSet1.Next; End ;
     {the data added to the List} the TreeView for S in List do TreeView1.Items .AddChild (Node, S);
   End ;
  List.Free; End ; Procedure
     
    
    
    



TForm1.TreeView1Change (Sender: TObject; the Node: TTreeNode);
 the begin 
  IF Node.Parent <> nil  the then 
  the begin
     {Filter the following SQL query statement in fact, if the other database is replaced} 
    ClientDataSet1.Filter: = Node.Parent.Text + '=' '' + Node.text + '' '' ; 
    ClientDataSet1.Filtered: = True; End the else ClientDataSet1.Filtered: = False; {cancel misplaced when selected field name} End ; End .

   


 
Attached sample database:

<?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>

 

Guess you like

Origin www.cnblogs.com/jijm123/p/11374359.html