procedure TForm.FormShow(Sender: TObject);
var
TreeCaption :string;
Node :TTreeNode;
begin
ADOQuery := TADOQuery.Create(nil);
ADOQuery.Connection := ADOConnect;
ADOQuery.SQL.Add(''select distinct 年级 from table order by 年级');
try
ADOQuery.Open;
except
on E:Exception do
begin
ShowMessage(E.Message);
ADOQuery.Free;
Exit;
end;
end;
Node := TreeView1.Items.Add(nil,'年级');
while not ADOQuery.Eof do
begin
TreeCaption := ADOQuery.FieldByName('年级').AsString+' ';
TreeView1.Items.AddChild(Node,TreeCaption);
TreeView1.Refresh;
ADOQuery.Next;
end;
ADOQuery.Free;
DataTree.FullExpand;
end;
procedure TForm.TreeView1DblClick(Sender: TObject);
var
aCommandText,aStr,aValue :string;
begin
if not DataTree.Selected.HasChildren then
begin
ADOQuery := TADOQuery.Create(nil);
ADOQuery.Connection := ADOConnect;
ADOQuery.SQL.Clear;
case TreeView1.Selected.Level of
1:
aCommandText := 'Select 班级 From table Where 年级=:nj '
2:
aCommandText := 'Select 学生姓名 From table Where 班级=:bj '
end;
ADOQuery.SQL.Add(aCommandText);
aStr := Trim(TreeView.Selected.Text);
if DataTree.Selected.Level=1 then
begin
ADOQuery.Parameters.ParamByName('nj').Value := aStr;
end;
if DataTree.Selected.Level=2 then
begin
ADOQuery.Parameters.ParamByName('bj').Value := aSort;
end;
try
ADOQuery.Open;
except
on E:Exception do
begin
ShowMessage(E.Message);
ADOQuery.Free;
Exit;
end;
end;
while not ADOQuery.Eof do
begin
if TreeView1.Selected.Level=1 then aVaule := ADOQuery.FieldByName('班级').AsString;
if TreeView1.Selected.Level=2 then aVaule := ADOQuery.FieldByName('学生姓名').AsString;
TreeView1.Items.AddChild(TreeView1.Selected,aStr);
end;
ADOQuery.Next;
end;
TreeView1.Selected.Expand(True);
ADOQuery.Free;
end;
end;
一个比较简练的算法:
procedure TForm1.Button1Click(Sender: TObject);
const
ID_DEPT = 2;
var
nLevel: Integer;
pNodes: array[0..1023] of TTreeNode;
lpID, lpName: string;
begin
ADODataSet1.Close;
ADODataSet1.CommandText := 'SELECT * FROM [国家] ORDER BY [编号]';
ADODataSet1.Open;
pNodes[0] := nil;
TreeView1.Items.Clear;
with ADODataSet1.Recordset do
while not Eof do
begin
lpID := Fields['编号'].Value;
lpName := Fields['名称'].Value;
nLevel := Length(lpID) div ID_DEPT;
pNodes[nLevel] := TreeView1.Items.AddChild(pNodes[nLevel - 1], lpName);
MoveNext;
end;
end;
给个循环添加符合要求的记录不就行了?树的顶节点为年级,第二级节点为班级,第三节点为姓名~~
给你个简单的二级节点添加方法看看:
ado_add:=tadoquery.Create(nil);
ado_add.Connection:=datamodule1.ADOConnection1;
ado_temp.SQL.Clear;
ado_temp.SQL.Text:='select distinct 年级 from table ;
ado_temp.Open;
while not ado_temp.Eof do
begin
node:=treeview1.Items.AddChild(nil,ado_temp.fieldbyname('年级').AsString);
begin
ado_add.Close;
ado_add.SQL.Text:='select distinct 班级 from table where 年级='''+ado_temp.fieldbyname('年级').AsString+'''';
ado_add.Open;
while not ado_add.Eof do
begin
treeview1.Items.AddChild(node,ado_add.fieldbyname('班级').AsString);
ado_add.Next;
end;
end;
ado_temp.Next;
end;