有表(tabel)如下:
----------------------------
id | up_id | corp_name|
----------------------------
1 | 0 | 一級目錄1 |
2 | 0 | 一級目錄2 |
3 | 1 | 二級目錄1 |
4 | 3 | 三級目錄1 |
5 | 0 | 一級目錄3 |
6 | 5 | 二級目錄2 |
7 | 4 | 四級目錄2 |
8 | 3 | 三級目錄2 |
........如何一次性轉成如下目錄樹
|-一級目錄1--二級目錄1--三級目錄1--四級目錄
| |-三級目錄2
|-一級目錄2
|
|-一級目錄3--二級目錄2
..........
就是能不能用一個遞歸來完成數據庫到樹的轉換
要求轉為TREEVIEW
----------------------------
id | up_id | corp_name|
----------------------------
1 | 0 | 一級目錄1 |
2 | 0 | 一級目錄2 |
3 | 1 | 二級目錄1 |
4 | 3 | 三級目錄1 |
5 | 0 | 一級目錄3 |
6 | 5 | 二級目錄2 |
7 | 4 | 四級目錄2 |
8 | 3 | 三級目錄2 |
........如何一次性轉成如下目錄樹
|-一級目錄1--二級目錄1--三級目錄1--四級目錄
| |-三級目錄2
|-一級目錄2
|
|-一級目錄3--二級目錄2
..........
就是能不能用一個遞歸來完成數據庫到樹的轉換
要求轉為TREEVIEW
解决方案 »
- delphi的面试题目
- 广州求职(delphi)
- 在TREEVIEW中建立多级目录
- sql server2000 如何儲存影片?
- 在线等来,调用动态链接库和怎么把外部的可执行程序怎么镶嵌在我的Form里面!!
- 我在unit1里面定义了一个public变量china,为什么在unit2里面不能用呢?谢谢!
- 调用拨号函数rasdial时总是提示 ‘hrasconn’类型找不到。要use 哪个pas呢?谁知道,我的所有可用分马上派给你。在线等待,急
- 如何使Edit动态响应DBGrid记录的变化?
- 急得很!在表中建一个loopup字段,就出错提示:project kh.exe raised exception class eoleeXception with message '发生为知错误.'.
- 光标位置的问题,请高人指教!
- 统计字符串中某字符的出现次数
- 大家看看这个sql语句错在哪里?
代碼如下
===========
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, Grids, DBGrids, ADODB, ComCtrls;type
pmyid = ^Tpmyid;
Tpmyid = record
nodeid: string;
nodename: string;
end;
TFrmMain = class(TForm)
TreeView1: TTreeView;
AdoCon: TADOConnection;
ADOTable1: TADOTable;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
procedure FormShow(Sender: TObject);
private
{ Private declarations }
procedure ReadNode(ownNode: TTreeNode; NodeId: string);
procedure LoadData;
public
{ Public declarations }
end;var
FrmMain: TFrmMain;implementation{$R *.dfm}
//ReadChileTreeprocedure TfrmMain.ReadNode(ownNode: TTreeNode; NodeId: string);
//OwnNode:Pater node NodeId:self nodeid;
var
curNode: TtreeNode;
curID, curName: string;
adoquery: TAdoQuery;
myid: pmyid;
begin
adoquery := Tadoquery.create(parent);
adoquery.Connection := AdoCon;
adoquery.sql.text := 'select * from tree1 where up_id=''' + NodeID + '''';
with adoquery do
begin
open;
first;
while not eof do
begin
curID := FieldByName('id').AsString;
curName := fieldByName('Crop_name').AsString;
new(myid);
myid^.nodeid := curID;
myid^.nodename := curName;
curNode := treeview1.Items.AddChildObject(ownNode, curName, myid);
ReadNode(curNode, curid);
next;
end;
close;
free;
end;
end;
procedure TfrmMain.LoadData;
var
CurNode:TTreeNode;
MyID:pMyID;
begin
new(MyID);
MyID^.nodeid:='0'; //'0' is rootnode nodeid
CurNode:=Treeview1.Items.AddChildObject(nil,'¤½¥q',MyID);
ReadNode(CurNode,'0');
end;
procedure TFrmMain.FormShow(Sender: TObject);
begin
loaddata;
end;end.===================