首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

delphi+SQL2000树形结构,该如何处理

2012-03-19 
delphi+SQL2000树形结构我想做一个树形结构的查询功能,就是像CSDN一样的,我用了 ADODataSet控件连接SQL数

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;
[解决办法]
楼上的写的代码,怎么这么像我多年前写的呢?


[解决办法]
呵呵,以前也是从网上查来的
感觉递归很慢,
这方法不错

热点排行