zoukankan      html  css  js  c++  java
  • 动手生成 Delphi xe DBTreeview 三级行政图树 省市县

    表结构及记录

    object tarea: TFDQuery
        Connection = FDConnection1
        SQL.Strings = (
          'select *'
          'from tArea  order by fParentCode')
        Left = 160
        Top = 240
      end

     object tv: TTreeView
        Left = 0
        Top = 0
        Width = 554
        Height = 320
        Align = alClient
        Indent = 19
        TabOrder = 1
        ExplicitLeft = 40
        ExplicitTop = 32
        ExplicitWidth = 121
        ExplicitHeight = 97
      end

    代码

    procedure TForm1.FormCreate(Sender: TObject);
      var
        nodes:ttreenodes;
        node:ttreenode ;
        CurItem ,CurItem1:Ttreenode ;
        nodestr:string;
        lastparent,temp:string;
        i,j:integer   ;
    begin
             TV.Items.Clear;
         nodes:=TV.Items;
         Tarea.Active:=true;
         node:=nodes.add(nil,Tarea.FieldByName('fCode').Value+'_'+Tarea.FieldByName('fNAME').Value);
         Tarea.Next;
         while NOT Tarea.Eof  do
         BEGIN
              if Tarea.FieldByName('fParentCode').AsString='' then
                 nodes.add(nil,Tarea.FieldByName('fCode').Value+'_'+Tarea.FieldByName('fNAME').Value);  //省份

               if Tarea.FieldByName('fParentCode').AsString<>lastparent then
                //当前记录 fParentCode跟上条记录 fParentCode  不相等,表明是换一个父代了
                //需查找
               begin
                  CurItem := TV.Items.GetFirstNode;
                    while CurItem <> nil do
                       begin
                        if copy( CurItem.Text,1,pos('_',CurItem.Text)-1) =Tarea.FieldByName('fParentCode').Value then
                           begin
                            CurItem.Selected:=true;
                            break;
                            end;
                           CurItem := CurItem.GetNext;
                       end;
                  nodes.addCHILD(CurItem,Tarea.FieldByName('fCode').Value+'_'+Tarea.FieldByName('fNAME').Value);  //
               end;

              if (Tarea.FieldByName('fParentCode').AsString<>'')
                                  AND
                  (Tarea.FieldByName('fParentCode').AsString=lastparent)
                  //当前记录 fParentCode跟上条记录 fParentCode  相等,表明是同一个父代了,直接添加就行
                  then
                  BEGIN
                     nodes.addCHILD(CurItem,Tarea.FieldByName('fCode').Value+'_'+Tarea.FieldByName('fNAME').Value);  //
                  END;


               lastparent:= Tarea.FieldByName('fParentCode').AsString;
               Tarea.Next;
         END;
         nodes.GetFirstNode;


    end;

    end.

    效果如下


  • 相关阅读:
    C# 向共享文件夹上传及下载文件
    Generate the Jobs script from msdb Database
    用水晶报表做条码打印
    多语言系统的实现
    用DataBaseMail发图片并茂的邮件
    浅析WINFORM工具条的重用实现
    具有代表性的财务报表--应收帐
    C#实现Combobox自动匹配字符
    动态列报表
    真正通用的SQL分页存储过程
  • 原文地址:https://www.cnblogs.com/jijm123/p/11336431.html
Copyright © 2011-2022 走看看