动手生成 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.
效果如下
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)