我想建无限树,根据下表,“1,11”只是代表实际是中文名称
数据表
请提供思路和方法
谢谢
id paraent child 1 11
1 12
11 111
11 112
2 21
2 22
... ...
树
1 2
11 12 21 22 111 112
treeview
1
11
111
112
12 2 21
22
数据表
请提供思路和方法
谢谢
id paraent child 1 11
1 12
11 111
11 112
2 21
2 22
... ...
树
1 2
11 12 21 22 111 112
treeview
1
11
111
112
12 2 21
22
解决方案 »
- 散分需要理由吗?不需要吗?需要吗?不需要。
- RzSplitter的用法
- 在ADOQuery中如何往in条件中传入参数?
- 在adoCommand中不能使用goto语句,请帮忙看一下。
- 救命呀 copy函数的用法---------载线等待
- DELPHI中用什么控件把批量数据从界面从生成,然后存入数据库?快点哦 !!我正在做设计,谢谢各位高手了!:)
- 工资条问题
- 一个label的问题
- delphi中的edit如何设为只读后没有光标也没有焦点?Enable的方法除外。
- 问一个函数可以把字符串中大写转小写的
- 一个关于sql的小问题。在线等待
- 急!!我想将VFP中的数据导入IUP文件中,IUP数据文件是怎样形成的?请给位朋友指点一二,有答案即结贴。
i:integer;
name:string;
begin
....
self.query1.close;
self.query1.sql.clear;
self.query1.sql.add(select substring(child,1,1) from table1 group up substring(child,1,1) order by substring(child,1,1));
i:=1;
repeat
begin
name:=Query1.FieldByName('Name').asstring;
TreeView1.Items.AddChild(TreeView1.Selected, name).ImageIndex:=1;
Query1.Next;
i:=i+1;
end;
until i= Query1.RecordCount
if TreeView1.selected.level=1 then
begin
self.query1.close;
self.query1.sql.clear;
self.query1.sql.add(select substring(child,1,2) from table1 group up substring(child,1,2) order by substring(child,1,2));
i:=1;
if self.RzTreeView1.Selected.HasChildren=false then
repeat
begin
name:=Query1.FieldByName('Name').asstring;
TreeView1.Items.AddChild(TreeView1.Selected, name).ImageIndex:=1;
Query1.Next;
i:=i+1;
end;
until i= Query1.RecordCount
end;
end;
if TreeView1.selected.level=2then
begin
self.query1.close;
self.query1.sql.clear;
self.query1.sql.add(select substring(child,1,3) from table1 group up substring(child,1,3) order by substring(child,1,3));
i:=1;
if self.TreeView1.Selected.HasChildren=false then
repeat
begin
name:=Query1.FieldByName('Name').asstring;
TreeView1.Items.AddChild(TreeView1.Selected, name).ImageIndex:=1;
Query1.Next;
i:=i+1;
end;
until i= Query1.RecordCount
end;
end;
......
end;楼主兄弟,如果你的数据库有规律的话,这一段小程序中的IF你可以用循环的,我就写这么一点,循环的条件,你自己想一下,都是在大同小异的!兄弟加油,为了我们共同的Delphi事业!
to:dalang81(大狼) 有没有具体的算法代码
中有一个我写的控件,你可以试试(DBtree)
不过我用的delphi5 能装吗谁还有好的算法
BG_ID varchar(50)//如:00010001
BG_name varchar(50)
BG_file image
//
procedure Tform_GCZL.addsublist;
var
i:integer;
//ss:string;
begin
//添加子目录
TreeView_main.Items[0].DeleteChildren;
TreeView_main.Items[0].Text:='全部资料';
TreeView_main.Items[0].ImageIndex:=0;
with myadoq do
begin
Close;
SQL.Clear;
SQL.Add('select a.BG_ID,a.BG_file,a.BG_name,a.isfile,(select count(bg_id) from mulu_file where BG_ID<=left(a.BG_ID,len(a.BG_ID)-4)) as theid from mulu_file a order by a.BG_ID');
Open;
for i:=0 to RecordCount-1 do
begin
TreeView_main.Items.AddChild(TreeView_main.Items[FieldByName('theid').asinteger],FieldByName('BG_name').AsString).Selected:=true;
if Fieldbyname('isfile').AsInteger=1 then
begin
TreeView_main.Selected.ImageIndex:=3;
TreeView_main.Selected.SelectedIndex:=3;
end;
if Fieldbyname('isfile').AsInteger=0 then
begin
TreeView_main.Selected.ImageIndex:=1;
TreeView_main.Selected.SelectedIndex:=2;
end;
Next;
end;
end;
end;
一个递归建树的方法,任意值无需有规律,与大家分享
procedure AddClass(AId: string; FatherNode: TTreeNode; temp_treeview: Ttreeview);
var
QryTmp: TADOQuery;
myNode: TTreeNode;
myLabel: TLabel;
begin
QryTmp := TADOQuery.Create(application);
qrytmp.connection := form1.ADOConnection1;
QryTmp.SQL.Add('select * from pro_bom');
QryTmp.SQL.Add('where cp_peij_no=:AId');
qrytmp.Parameters.ParamByName('aid').value := aid;
QryTmp.Open;
while not QryTmp.Eof do
begin
myNode := temp_Treeview.Items.AddChild(FatherNode, QryTmp.fieldbyname('wl_peij_no').AsString);
//创建标签,caption存放各分支的AutoId表识
myLabel := TLabel.Create(application);
myLabel.Visible := false;
myLabel.Caption := QryTmp.fieldbyname('wl_peij_no').AsString;
myNode.Data := myLabel;
AddClass(QryTmp.fieldbyname('wl_peij_no').Asstring, myNode, temp_treeview); //递归用过程
QryTmp.Next;
end;
QryTmp.Free;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
AddClass('all',nil,bosstreeview1);
end;请大家继续讨论呀