• 学习 TTreeView [15]


    本例效果图:

    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:	empcountry.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 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>
  • 相关阅读:
    百度贴吧营销实战之推广入口布局技巧
    微信加人限制2017版
    百度经验怎么赚钱之练就三星经验,轻松布局流量入口。
    百科词条 如何创建?客源何在?怎么赚钱?
    人物百科 从词条创建到最终盈利(简剖)
    百度文库营销技巧之文库不为人知的通过率 以及排名推广技巧
    百度知道一周练就5级账号(养号系列一)
    百度知道账号,快速升级必备36计(养号系列二)
    QQ运动,新楛的马桶还在香,营销人不应摒弃。
    裂变营销 流量分散年代 你那样的不可或缺
  • 原文地址:https://www.cnblogs.com/jijm123/p/11374359.html
Copyright © 2020-2023  润新知