数据库表结构是:
id parentID name
1 0 水果
2 1 国内水果
3 1 进口水果
4 2 香蕉
5 2 苹果
我是这样加载节点的,但这样会加载所有节点,假如我只要加载国内水果呢?总不能写死了select * from sg where parentID<>2,怎么办?最好在下面基础上改ADOQuery1.SQL.Add('select * from sg');
MakeTree(ADOQuery1, TreeView1);
procedure TFormKcsp.MakeTree(Query: TADOQuery; TreeView1: TTreeView);
var
List: TStringList;
Node: TTreeNode;
Index: Integer;
begin
TreeView1.Items.BeginUpdate;
try
TreeView1.Items.Clear;
List := TStringList.Create;
try
List.Sorted := True;
while not Query.Eof do
begin
if Query.FieldByName('ParentID').AsInteger = 0 then { ParentID=0,顶层节点 }
begin
Node := TreeView1.Items.AddChild(nil, Query.FieldByName('name').AsString);
end
else
begin
Index := List.IndexOf(Query.FieldByName('ParentID').AsString);
Node := TreeView1.Items.AddChild(TTreeNode(List.Objects[Index]),Query.FieldByName('name').AsString);
end;
List.AddObject(Query.FieldByName('ID').AsString, Node);
Node.Data:=strnew(PChar(Query.FieldByName('ID').AsString));
Query.Next;
end;
finally
List.Free;
end;
finally
TreeView1.Items.EndUpdate;
end;
end;
id parentID name
1 0 水果
2 1 国内水果
3 1 进口水果
4 2 香蕉
5 2 苹果
我是这样加载节点的,但这样会加载所有节点,假如我只要加载国内水果呢?总不能写死了select * from sg where parentID<>2,怎么办?最好在下面基础上改ADOQuery1.SQL.Add('select * from sg');
MakeTree(ADOQuery1, TreeView1);
procedure TFormKcsp.MakeTree(Query: TADOQuery; TreeView1: TTreeView);
var
List: TStringList;
Node: TTreeNode;
Index: Integer;
begin
TreeView1.Items.BeginUpdate;
try
TreeView1.Items.Clear;
List := TStringList.Create;
try
List.Sorted := True;
while not Query.Eof do
begin
if Query.FieldByName('ParentID').AsInteger = 0 then { ParentID=0,顶层节点 }
begin
Node := TreeView1.Items.AddChild(nil, Query.FieldByName('name').AsString);
end
else
begin
Index := List.IndexOf(Query.FieldByName('ParentID').AsString);
Node := TreeView1.Items.AddChild(TTreeNode(List.Objects[Index]),Query.FieldByName('name').AsString);
end;
List.AddObject(Query.FieldByName('ID').AsString, Node);
Node.Data:=strnew(PChar(Query.FieldByName('ID').AsString));
Query.Next;
end;
finally
List.Free;
end;
finally
TreeView1.Items.EndUpdate;
end;
end;
begin
...
end;
adoquery1.next;