给你一段代码参考: var id1,id2,id3:Integer; bootnode,tnode1,tnode2,tnode3:ttreenode; begin bootnode:=Dest_TreeView.Items.Add(Nil,'科目'); bootnode.ImageIndex:=1; bootnode.SelectedIndex:=0; Temp_Query1.Close; Temp_Query1.SQL.Clear; Temp_Query1.SQL.Add('Select * From T_KM Where (code like '''+Source_code+'%'') and (Len(code)=4)'); Temp_Query1.Open; For id1:=1 To Temp_Query1.RecordCount Do Begin tnode1:=Dest_TreeView.Items.AddChild(bootnode,'('+Temp_Query1.FieldByName('code').AsString+')'+ Temp_Query1.FieldByName('name').AsString); tnode1.ImageIndex:=1; tnode1.SelectedIndex:=0; Temp_Query2.Close; Temp_Query2.SQL.Clear; Temp_Query2.SQL.Add('Select * From T_KM Where (code like '''+Temp_Query1.FieldByName('code').AsString+ '%'') and (Len(code)=6)'); Temp_Query2.Open; For id2:=1 To Temp_Query2.RecordCount Do Begin tnode2:=Dest_TreeView.Items.AddChild(tnode1,'('+Temp_Query2.FieldByName('code').AsString+')'+ Temp_Query2.FieldByName('name').AsString); tnode2.ImageIndex:=1; tnode2.SelectedIndex:=0; Temp_Query3.Close; Temp_Query3.SQL.Clear; Temp_Query3.SQL.Add('Select distinct zsd1 From T_STTK where stid like '''+ Temp_Query2.FieldByName('code').AsString+'%'''); Temp_Query3.Open; For id3:=1 To Temp_Query3.RecordCount Do Begin tnode3:=Dest_TreeView.Items.AddChild(tnode2,Temp_Query3.FieldByName('zsd1').AsString); tnode3.ImageIndex:=2; tnode3.SelectedIndex:=2; Temp_Query3.Next; End; Temp_Query3.Close; Temp_Query2.Next; End; Temp_Query2.Close; Temp_Query1.Next; End; Temp_Query1.Close;end;
参考一下: type PMyRec = ^TMyRec; TMyRec = record pgh: string; pghmc: string; pghlb1mc: string; pghlb2mc: string; pghlb1: string; pghlb2: string; level: string; end; procedure TfyxmbF.GetXmTv; procedure TQueryF.SetPghTree; var TmpQuery, TmpQuery1, TmpQuery2: TQuery; i, j: Integer; TmpNode: TTreeNode; MyRecPtr: PMyRec; begin TmpQuery := TQuery.Create(nil); TmpQuery1 := TQuery.Create(nil); TmpQuery2 := TQuery.Create(nil); TmpQuery.DatabaseName := Query1.DatabaseName; TmpQuery1.DatabaseName := Query1.DatabaseName; TmpQuery2.DatabaseName := Query1.DatabaseName; try TmpQuery.DatabaseName := Query1.DatabaseName; TmpQuery.SQL.Text := 'SELECT DISTINCT PGHLB1MC,PGHLB1 FROM CBBPMGG ORDER BY PGHLB1'; TmpQuery.Open; TV_PGH.items.Clear; new(MyRecPtr); MyRecPtr^.level := '0'; MyRecPtr^.pghlb2mc := '所有品种'; //派工号类别2名称 TV_PGH.Items.AddChildObject(nil, MyRecPtr^.pghlb2mc, MyRecPtr); TV_PGH.Items[0].StateIndex := 1; TV_PGH.Items.BeginUpdate; for i := 0 to TmpQuery.RecordCount - 1 do begin //类别 new(MyRecPtr); MyRecPtr^.level := '1'; MyRecPtr^.pghlb2mc := TmpQuery.Fields[0].AsString; TmpNode := TV_PGH.Items.AddChildObject(TV_PGH.TopItem, MyRecPtr^.pghlb2mc, MyRecPtr); TmpQuery1.Close; TmpQuery1.SQL.Text := 'SELECT PGHLB2MC,PGHLB2 FROM CBBPMGG WHERE PGHLB1= ' + #39 + TmpQuery.Fields[1].AsString + #39 + ' ORDER BY PGHLB2'; TmpQuery1.Open; for j := 0 to TmpQuery1.RecordCount - 1 do begin //品种 new(MyRecPtr); MyRecPtr^.level := '2'; MyRecPtr^.pghlb2 := TmpQuery1.Fields[1].AsString; //派工号类别2 MyRecPtr^.pghlb2mc := TmpQuery1.Fields[0].AsString; //派工号类别2名称 TV_PGH.Items.AddChildObject(TmpNode, MyRecPtr^.pghlb2mc, MyRecPtr); TmpQuery1.Next; end; TmpQuery.Next; end; TV_PGH.Items.EndUpdate; finally TmpQuery1.Free; TmpQuery.Free; end; end;
procedure TForm1.Button1Click(Sender: TObject); var i,j,m,n:integer; s1,s2,s3,s4:string; node,subnode1,subnode2,subnode3:TTreeNode; i1,n1,i2,n2,i3,n3:integer; begin i1:=0; i2:=0; i3:=0; form1.Table1.Open; form1.Table1.First; i:=form1.Table1.RecordCount; if i>0 then begin for j:=0 to i-1 do begin s1:=form1.Table1.FieldValues['km']; s2:=form1.Table1.FieldValues['zh']; s3:=form1.Table1.FieldValues['jie']; s4:=form1.Table1.FieldValues['zsd']; m:=form1.TreeView1.Items.Count; if m>0 then begin for n:=0 to m-1 do begin if form1.TreeView1.Items.Item[n].Text=s1 then begin i1:=i1+1; n1:=n; end; end; if i1=1 then begin for n:=0 to m-1 do begin if (form1.TreeView1.Items.Item[n].Text=s2) and (form1.TreeView1.Items.Item[n].Parent.Text=s1) then begin i2:=i2+1; n2:=n; end; end; if i2=1 then begin for n:=0 to m-1 do begin if (form1.TreeView1.Items.Item[n].Text=s3) and (form1.TreeView1.Items.Item[n].Parent.Text=s2) and (form1.TreeView1.Items.Item[n].Parent.Parent.Text=s1) then begin i3:=i3+1; n3:=n; end; end; if i3=1 then begin subnode3:=form1.TreeView1.Items.AddChild(form1.TreeView1.Items.Item[n3],s4); end else begin subnode2:=form1.TreeView1.Items.AddChild(form1.TreeView1.Items.Item[n2],s3); subnode3:=form1.TreeView1.Items.AddChild(subnode2,s4); end; end else begin subnode1:=form1.TreeView1.Items.AddChild(form1.TreeView1.Items.Item[n1],s2); subnode2:=form1.TreeView1.Items.AddChild(subnode1,s3); subnode3:=form1.TreeView1.Items.AddChild(subnode2,s4); end; end else begin node:=form1.TreeView1.Items.Add(nil,s1); subnode1:=form1.TreeView1.Items.AddChild(node,s2); subnode2:=form1.TreeView1.Items.AddChild(subnode1,s3); subnode3:=form1.TreeView1.Items.AddChild(subnode2,s4); end; end else begin node:=form1.TreeView1.Items.Add(nil,s1); subnode1:=form1.TreeView1.Items.AddChild(node,s2); subnode2:=form1.TreeView1.Items.AddChild(subnode1,s3); subnode3:=form1.TreeView1.Items.AddChild(subnode2,s4); end; form1.Table1.Next; end; end; end;
我自己以前的一段代码:procedure TForm1.FormCreate(Sender: TObject); var node1,node2,node3,node4:TTreenode; i,ii,iii:integer; glass1,class1 :string; begin treeview1.Items.Clear; node1:=treeview1.Items.Add(nil,'ѧУ'); node1.ImageIndex:=0; query1.Open; for i:=1 to query1.RecordCount do begin node2:=treeview1.Items.AddChild(node1,query1.FieldByName('glass').Value); node2.ImageIndex:=1; query2.Close; query2.SQL.Clear; query2.SQL.Add('select * from class where glass='+#39+query1.FieldByName('glass').Value+#39); query2.Open; for ii:=1 to query2.RecordCount do begin node3:=treeview1.Items.AddChild(node2,query2.FieldByName('class').Value); node3.ImageIndex:=2; query3.Close; query3.SQL.Clear; query3.SQL.Add('select * from student where glass='+#39+query1.FieldByName('glass').Value+#39+'and class='+#39+query2.FieldByName('class').Value+#39); query3.Open; for iii:=1 to query3.RecordCount do begin node4:=treeview1.Items.AddChild(node3,query3.FieldByName('name_student').Value); node4.ImageIndex:=3; query3.Next; end; query2.Next; end; query1.Next; end; end;
var id1,id2,id3:Integer;
bootnode,tnode1,tnode2,tnode3:ttreenode;
begin
bootnode:=Dest_TreeView.Items.Add(Nil,'科目'); bootnode.ImageIndex:=1;
bootnode.SelectedIndex:=0;
Temp_Query1.Close;
Temp_Query1.SQL.Clear;
Temp_Query1.SQL.Add('Select * From T_KM Where (code like '''+Source_code+'%'') and (Len(code)=4)');
Temp_Query1.Open;
For id1:=1 To Temp_Query1.RecordCount Do
Begin
tnode1:=Dest_TreeView.Items.AddChild(bootnode,'('+Temp_Query1.FieldByName('code').AsString+')'+
Temp_Query1.FieldByName('name').AsString);
tnode1.ImageIndex:=1;
tnode1.SelectedIndex:=0;
Temp_Query2.Close;
Temp_Query2.SQL.Clear;
Temp_Query2.SQL.Add('Select * From T_KM Where (code like '''+Temp_Query1.FieldByName('code').AsString+
'%'') and (Len(code)=6)');
Temp_Query2.Open;
For id2:=1 To Temp_Query2.RecordCount Do
Begin
tnode2:=Dest_TreeView.Items.AddChild(tnode1,'('+Temp_Query2.FieldByName('code').AsString+')'+
Temp_Query2.FieldByName('name').AsString);
tnode2.ImageIndex:=1;
tnode2.SelectedIndex:=0;
Temp_Query3.Close;
Temp_Query3.SQL.Clear;
Temp_Query3.SQL.Add('Select distinct zsd1 From T_STTK where stid like '''+
Temp_Query2.FieldByName('code').AsString+'%''');
Temp_Query3.Open;
For id3:=1 To Temp_Query3.RecordCount Do
Begin
tnode3:=Dest_TreeView.Items.AddChild(tnode2,Temp_Query3.FieldByName('zsd1').AsString);
tnode3.ImageIndex:=2;
tnode3.SelectedIndex:=2;
Temp_Query3.Next;
End;
Temp_Query3.Close;
Temp_Query2.Next;
End;
Temp_Query2.Close;
Temp_Query1.Next;
End;
Temp_Query1.Close;end;
type
PMyRec = ^TMyRec;
TMyRec = record
pgh: string;
pghmc: string;
pghlb1mc: string;
pghlb2mc: string;
pghlb1: string;
pghlb2: string;
level: string;
end;
procedure TfyxmbF.GetXmTv;
procedure TQueryF.SetPghTree;
var
TmpQuery, TmpQuery1, TmpQuery2: TQuery;
i, j: Integer;
TmpNode: TTreeNode;
MyRecPtr: PMyRec;
begin
TmpQuery := TQuery.Create(nil);
TmpQuery1 := TQuery.Create(nil);
TmpQuery2 := TQuery.Create(nil);
TmpQuery.DatabaseName := Query1.DatabaseName;
TmpQuery1.DatabaseName := Query1.DatabaseName;
TmpQuery2.DatabaseName := Query1.DatabaseName;
try
TmpQuery.DatabaseName := Query1.DatabaseName;
TmpQuery.SQL.Text := 'SELECT DISTINCT PGHLB1MC,PGHLB1 FROM CBBPMGG ORDER BY PGHLB1';
TmpQuery.Open;
TV_PGH.items.Clear;
new(MyRecPtr);
MyRecPtr^.level := '0';
MyRecPtr^.pghlb2mc := '所有品种'; //派工号类别2名称
TV_PGH.Items.AddChildObject(nil, MyRecPtr^.pghlb2mc, MyRecPtr);
TV_PGH.Items[0].StateIndex := 1;
TV_PGH.Items.BeginUpdate;
for i := 0 to TmpQuery.RecordCount - 1 do
begin //类别
new(MyRecPtr);
MyRecPtr^.level := '1';
MyRecPtr^.pghlb2mc := TmpQuery.Fields[0].AsString;
TmpNode := TV_PGH.Items.AddChildObject(TV_PGH.TopItem, MyRecPtr^.pghlb2mc, MyRecPtr);
TmpQuery1.Close;
TmpQuery1.SQL.Text :=
'SELECT PGHLB2MC,PGHLB2 FROM CBBPMGG WHERE PGHLB1= ' + #39 +
TmpQuery.Fields[1].AsString + #39 + ' ORDER BY PGHLB2';
TmpQuery1.Open;
for j := 0 to TmpQuery1.RecordCount - 1 do
begin //品种
new(MyRecPtr);
MyRecPtr^.level := '2';
MyRecPtr^.pghlb2 := TmpQuery1.Fields[1].AsString; //派工号类别2
MyRecPtr^.pghlb2mc := TmpQuery1.Fields[0].AsString; //派工号类别2名称
TV_PGH.Items.AddChildObject(TmpNode, MyRecPtr^.pghlb2mc, MyRecPtr);
TmpQuery1.Next;
end;
TmpQuery.Next;
end;
TV_PGH.Items.EndUpdate;
finally
TmpQuery1.Free;
TmpQuery.Free;
end;
end;
var
i,j,m,n:integer;
s1,s2,s3,s4:string;
node,subnode1,subnode2,subnode3:TTreeNode;
i1,n1,i2,n2,i3,n3:integer;
begin
i1:=0;
i2:=0;
i3:=0;
form1.Table1.Open;
form1.Table1.First;
i:=form1.Table1.RecordCount;
if i>0 then
begin
for j:=0 to i-1 do
begin
s1:=form1.Table1.FieldValues['km'];
s2:=form1.Table1.FieldValues['zh'];
s3:=form1.Table1.FieldValues['jie'];
s4:=form1.Table1.FieldValues['zsd'];
m:=form1.TreeView1.Items.Count;
if m>0 then
begin
for n:=0 to m-1 do
begin
if form1.TreeView1.Items.Item[n].Text=s1 then
begin
i1:=i1+1;
n1:=n;
end;
end;
if i1=1 then
begin
for n:=0 to m-1 do
begin
if (form1.TreeView1.Items.Item[n].Text=s2) and (form1.TreeView1.Items.Item[n].Parent.Text=s1) then
begin
i2:=i2+1;
n2:=n;
end;
end;
if i2=1 then
begin
for n:=0 to m-1 do
begin
if (form1.TreeView1.Items.Item[n].Text=s3) and (form1.TreeView1.Items.Item[n].Parent.Text=s2) and (form1.TreeView1.Items.Item[n].Parent.Parent.Text=s1) then
begin
i3:=i3+1;
n3:=n;
end;
end;
if i3=1 then
begin
subnode3:=form1.TreeView1.Items.AddChild(form1.TreeView1.Items.Item[n3],s4);
end
else
begin
subnode2:=form1.TreeView1.Items.AddChild(form1.TreeView1.Items.Item[n2],s3);
subnode3:=form1.TreeView1.Items.AddChild(subnode2,s4);
end;
end
else
begin
subnode1:=form1.TreeView1.Items.AddChild(form1.TreeView1.Items.Item[n1],s2);
subnode2:=form1.TreeView1.Items.AddChild(subnode1,s3);
subnode3:=form1.TreeView1.Items.AddChild(subnode2,s4);
end;
end
else
begin
node:=form1.TreeView1.Items.Add(nil,s1);
subnode1:=form1.TreeView1.Items.AddChild(node,s2);
subnode2:=form1.TreeView1.Items.AddChild(subnode1,s3);
subnode3:=form1.TreeView1.Items.AddChild(subnode2,s4);
end;
end
else
begin
node:=form1.TreeView1.Items.Add(nil,s1);
subnode1:=form1.TreeView1.Items.AddChild(node,s2);
subnode2:=form1.TreeView1.Items.AddChild(subnode1,s3);
subnode3:=form1.TreeView1.Items.AddChild(subnode2,s4);
end;
form1.Table1.Next;
end;
end;
end;
var
node1,node2,node3,node4:TTreenode;
i,ii,iii:integer;
glass1,class1 :string;
begin
treeview1.Items.Clear;
node1:=treeview1.Items.Add(nil,'ѧУ');
node1.ImageIndex:=0;
query1.Open;
for i:=1 to query1.RecordCount do
begin
node2:=treeview1.Items.AddChild(node1,query1.FieldByName('glass').Value);
node2.ImageIndex:=1;
query2.Close;
query2.SQL.Clear;
query2.SQL.Add('select * from class where glass='+#39+query1.FieldByName('glass').Value+#39);
query2.Open;
for ii:=1 to query2.RecordCount do
begin
node3:=treeview1.Items.AddChild(node2,query2.FieldByName('class').Value);
node3.ImageIndex:=2;
query3.Close;
query3.SQL.Clear;
query3.SQL.Add('select * from student where glass='+#39+query1.FieldByName('glass').Value+#39+'and class='+#39+query2.FieldByName('class').Value+#39);
query3.Open;
for iii:=1 to query3.RecordCount do
begin
node4:=treeview1.Items.AddChild(node3,query3.FieldByName('name_student').Value);
node4.ImageIndex:=3;
query3.Next;
end;
query2.Next;
end;
query1.Next;
end;
end;