请问,如何将下方查询出数据结构 显示成树形?就是如果一个节点有子类,就可点击+号扩展看到.....(可能是无限的子类,最基础的父类ID已定为0)高人帮看看,可否提供示例代码?谢了...
自动编号 部门名 父ID
-----------------------------
33 电脑部 37
34 行政部 36
35 工程部 38
36 生产部 39
37 货仓部 38
38 深圳公司 0
39 上海公司 0
40 北京公司 0
...
自动编号 部门名 父ID
-----------------------------
33 电脑部 37
34 行政部 36
35 工程部 38
36 生产部 39
37 货仓部 38
38 深圳公司 0
39 上海公司 0
40 北京公司 0
...
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, StdCtrls, ComCtrls;type
TForm1 = class(TForm)
TreeView1: TTreeView;
Button1: TButton;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;type
TRelateInfo = record
id: integer;
pid: integer;
end;
type PRelateInfo = ^TRelateInfo;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
mTn: TTreeNode;
mPrt: PRelateInfo;
i,j: integer;
begin
AdoQuery1.Active := False;
AdoQuery1.SQL.Text := 'SELECT * FROM test4 ORDER BY pid';
AdoQuery1.Open;
TreeView1.Items.Clear;
//添加全部节点,暂无隶属关系
while not AdoQuery1.Eof do
begin
mTn := TreeView1.Items.AddChild(nil,AdoQuery1.FieldValues['dname']);
new(mPrt);
mPrt^.id := AdoQuery1.FieldValues['id'];
mPrt^.pid := AdoQuery1.FieldValues['pid'];
mTn.Data := mPrt;
AdoQuery1.Next;
end; //遍历全部节点,修改隶属关系
i:=0;
while i<TreeView1.Items.Count do
begin
if PRelateInfo(TreeView1.Items.Item[i].Data)^.pid = 0 then
begin
Inc(i);
Continue;
end
else
begin
j:=0;
while j<TreeView1.Items.Count do
begin
if j=i then
begin
Inc(j);
Continue;
end;
if PRelateInfo(TreeView1.Items.Item[j].Data)^.id = PRelateInfo(TreeView1.Items.Item[i].Data)^.pid then
begin
TreeView1.Items.Item[i].MoveTo(TreeView1.Items.Item[j],naAddChild);
break;
end;
Inc(j);
end;
if j=TreeView1.Items.Count then
ShowMessage('非法数据:'+TreeView1.Items.Item[i].Text);
Inc(i);
end;
end;
//清空隶属关系变量,回收内存
//如果后续程序需要利用该关系变量,可在from的onDestroy事件中释放
for i:=0 to TreeView1.Items.Count -1 do
begin
mTn := TreeView1.Items.Item[i];
mPrt := mTn.Data;
Dispose(mPrt);
mTn.Data := nil;
end;
end;end.
keyID=自动编号 displayfield=部门名 ParentID=父ID