delphi+SQL2000树形结构
我想做一个树形结构的查询功能,就是像CSDN一样的,我用了 ADODataSet控件连接SQL数据库,但是我的全面显示,没有下一级的
procedure TForm_department_staff.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 department ORDER BY id';
ADODataSet1.Open;
pNodes[0] := nil;
TreeView1.Items.Clear;
with ADODataSet1.Recordset do
while not Eof do
begin
lpID := Fields['id'].Value;
lpName := Fields['department'].Value;
nLevel := Length(lpID) div ID_DEPT;
pNodes[nLevel] := TreeView1.Items.AddChild(pNodes[nLevel - 1], lpName);
MoveNext;
end;
end;
表department中有:01,财务部;02,销售部;0101,五精仓库;0201,成品仓库;010101,五精一队;
我想显示成:
财务部
五精仓库
五精一队
销售部
成品仓库
但是显示的结果是:
财务部
五精仓库
五精一队
销售部
成品仓库
全部在一级上,请各位大哥帮忙看看,还有就是我在点击显示结果的时候怎么把点击的数据传给一个文本
[解决办法]
拿这个做参考
var
List:TStringList;
Node:TTreeNode;
Index:Integer;
------------------------
cdstree.commandtext:= "SELECT * from TABLE ORDER BY 上级ID,ID "
TreeView.Items.BeginUpdate;
try
TreeView.Items.Clear;
List:= TStringList.Create;
try
List.Sorted:= True;
cdsTree.First;
while not cdsTree.Eof do
begin
//如果是顶接点
if cdsTree.FieldByName( "你的上级ID ").AsInteger= 0 then
begin
Node:=TreeView.Items.AddChild(nil, cdsTree.FieldByName(mName).AsString)
end else
begin
Index:= List.IndexOf(cdsTree.FieldByName( "你的上级ID ").AsString);
Node:= TreeView.Items.AddChildFirst(TTreeNode(List.Objects[index]),
cdsTree.FieldByName( "你的字段名称 ").AsString);
end;
List.AddObject(cdsTree.FieldByName( "ID ").AsString, Node);
cdsTree.Next;
end;
finally
List.Free;
cdsTree.Close;
end;
finally
TreeView.Items.EndUpdate;
end;
[解决办法]
楼上的写的代码,怎么这么像我多年前写的呢?
[解决办法]
呵呵,以前也是从网上查来的
感觉递归很慢,
这方法不错