procedure TForm1.BitBtn3Click(Sender: TObject); begin query1.sql.text:='select * from table order by fatherarea' query1.open; Query1.First; while not Query1.Eof do begin if Query1.FieldByName('fatherarea').AsInteger=0 then TreeView1.Items.AddObject(TreeView1.TopItem,Query1.FieldByName('areaclcode').AsString+Query1.FieldByName('areaclname').AsString,pointer(Query1.FieldByName('areacl').asinteger)) else begin TreeView1.Items.AddChildObject(TreeView1.Items[getindex(pointer(Query1.FieldByName('fatherarea').AsInteger))],Query1.FieldByName('areaclcode').AsString+Query1.FieldByName('areaclname').AsString,pointer(Query1.FieldByName('areacl').asinteger)) end; Query1.Next; end; end;function TForm1.getindex(idvalue:pointer): integer; var i:integer; inde:integer; begin inde:=0; for i:=0 to TreeView1.Items.Count-1 do begin if TreeView1.Items[i].Data=idvalue then begin inde:=i; break; end; end; Result:=inde; end;
unit Main;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, Db, ADODB, StdCtrls;type TfrmMain = class(TForm) TreeView1: TTreeView; ADOConnection1: TADOConnection; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } function getindex(idvalue: Integer): integer; public { Public declarations } end;var frmMain: TfrmMain;implementation{$R *.DFM}procedure TfrmMain.Button1Click(Sender: TObject); begin with TADOQuery.Create(nil) do begin Connection := ADOConnection1; sql.text:='select * from Tree order by Parent_ID'; open; First; while not Eof do begin if FieldByName('Parent_ID').AsInteger=0 then begin with TreeView1.Items.Add(TreeView1.TopItem, FieldByName('Node_Name').AsString) do begin StateIndex := FieldByName('ID').AsInteger; end; end else begin with TreeView1.Items.AddChild(TreeView1.Items[getindex(FieldByName('Parent_ID').AsInteger)], FieldByName('Node_Name').AsString) do begin StateIndex := FieldByName('ID').AsInteger; end; end; Next; end; end; end;function TfrmMain.getindex(idvalue: Integer): integer; var i:integer; inde:integer; begin // inde:=0; for i:=0 to TreeView1.Items.Count-1 do begin if TreeView1.Items[i].StateIndex = idvalue then begin inde:=i; break; end; end; Result:=inde; end;end.
begin
query1.sql.text:='select * from table order by fatherarea'
query1.open;
Query1.First;
while not Query1.Eof do
begin
if Query1.FieldByName('fatherarea').AsInteger=0 then TreeView1.Items.AddObject(TreeView1.TopItem,Query1.FieldByName('areaclcode').AsString+Query1.FieldByName('areaclname').AsString,pointer(Query1.FieldByName('areacl').asinteger))
else
begin
TreeView1.Items.AddChildObject(TreeView1.Items[getindex(pointer(Query1.FieldByName('fatherarea').AsInteger))],Query1.FieldByName('areaclcode').AsString+Query1.FieldByName('areaclname').AsString,pointer(Query1.FieldByName('areacl').asinteger))
end;
Query1.Next;
end;
end;function TForm1.getindex(idvalue:pointer): integer;
var
i:integer;
inde:integer;
begin
inde:=0;
for i:=0 to TreeView1.Items.Count-1 do
begin
if TreeView1.Items[i].Data=idvalue then
begin
inde:=i;
break;
end;
end;
Result:=inde;
end;
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, Db, ADODB, StdCtrls;type
TfrmMain = class(TForm)
TreeView1: TTreeView;
ADOConnection1: TADOConnection;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
function getindex(idvalue: Integer): integer;
public
{ Public declarations }
end;var
frmMain: TfrmMain;implementation{$R *.DFM}procedure TfrmMain.Button1Click(Sender: TObject);
begin
with TADOQuery.Create(nil) do
begin
Connection := ADOConnection1;
sql.text:='select * from Tree order by Parent_ID';
open;
First;
while not Eof do
begin
if FieldByName('Parent_ID').AsInteger=0 then
begin
with TreeView1.Items.Add(TreeView1.TopItem,
FieldByName('Node_Name').AsString) do
begin
StateIndex := FieldByName('ID').AsInteger;
end;
end
else
begin
with TreeView1.Items.AddChild(TreeView1.Items[getindex(FieldByName('Parent_ID').AsInteger)],
FieldByName('Node_Name').AsString) do
begin
StateIndex := FieldByName('ID').AsInteger;
end;
end;
Next;
end;
end;
end;function TfrmMain.getindex(idvalue: Integer): integer;
var
i:integer;
inde:integer;
begin
//
inde:=0;
for i:=0 to TreeView1.Items.Count-1 do
begin
if TreeView1.Items[i].StateIndex = idvalue then
begin
inde:=i;
break;
end;
end;
Result:=inde;
end;end.
数据库:只有一个表Tree
ID:自动编号
Parent_ID:父节点编号
Node_Name:节点Caption
页面Form1
就一个TreeView和一个Button,都是默认值。