各位: 我的数据表中的数据如下所示:
zb_DM zb_MC
05 雷达、指挥仪、电子对抗及声纳
0501 警戒雷达
050101 警-11(513)警戒雷达
050105 警-11(513型装箱式)警戒雷达
050111 警-12(513甲)警戒雷达 即用代码长度表示树节点的位置,长度为2位(如05),则表示一级树节点,长度为4位,则表示二级节点. 请问我如何写一些代码将数据表中的内容填到树控件中去???
zb_DM zb_MC
05 雷达、指挥仪、电子对抗及声纳
0501 警戒雷达
050101 警-11(513)警戒雷达
050105 警-11(513型装箱式)警戒雷达
050111 警-12(513甲)警戒雷达 即用代码长度表示树节点的位置,长度为2位(如05),则表示一级树节点,长度为4位,则表示二级节点. 请问我如何写一些代码将数据表中的内容填到树控件中去???
解决方案 »
- 怎么将数据写入数据库?
- 关于Combobox的问题!
- clientdataset怎么修改数据?
- Delphi程序调试参考手册--这本书哪里有电子书下载?
- 请教:Sql Server中,如何创建自动编号的字段!谢谢!
- PowerDesigner中怎么把物理模型导出为HTML的说明文件?急急急!!!!
- 关于我编的一个资料查询系统的几个小问题:求助~
- 请教:关于通讯问题。
- 这是什么意思啊?一句话的问题!
- 如何把C/C++语言的*.h文件翻译成Delphi的*.pas文件,有何规则?
- 写了个函数,用来在指定字符集中产生指定长度和起始位置的字符串。此贴为讨论贴。
- 请教一个DBGridEh关于树型显示数据的问题!!~~~~
只要数据表中有3个字段、id、parentid、name
然后设置控件的3个属性parentfield、listfield、keyfield就可以了!
再select 出来长度为4位的建立树的第二层,当然第二层select 语句要包括where条件了;
依此类推就行了,没问题的。
var
I: integer;
s: string;
begin
s := ' ';
result := '';
if SpaceCount <> 1 then
for I := 1 to SpaceCount - 1 do
begin
result := result + s;
end;
end;procedure DeptToText(LsQuery: TadoQuery; LoadView: TTreeView; LsName,LsGrade: string);
var
FileId: integer;
f: textfile;
begin
FileId := FileCreate(ExtractFilePath(ParamStr(0)) + 'Dept.txt');
FileClose(FileId);
assignfile(f, ExtractFilePath(ParamStr(0)) + 'Dept.Txt');
Append(f);
with LsQuery do
begin
First;
while not Eof do
begin
Writeln(f, GradeToSpace(length(FieldByName(LsGrade).asstring)/2)
+ FieldByName(LsName).AsString);
Next;
end;
First;
end;
Flush(f);
closefile(f);
LoadView.Items.Clear;
LoadView.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Dept.Txt');
DeleteFile(Pchar((ExtractFilePath(ParamStr(0)) + 'Dept.Txt')));
if loadview.Items.Count <>0 then
loadview.Select(loadview.Items.Item[0]);
end;使用:
adoquery1.sql.text :='select zb_DM,zb_MC from tablename order by zb_DM';
adoquery1.open;
DeptToText(adoquery1,'zb_MC','zb_DM');
使用:
adoquery1.sql.text :='select zb_DM,zb_MC from tablename order by zb_DM';
adoquery1.open;
DeptToText(adoquery1,treeview1,'zb_MC','zb_DM');
我用的是分级试的.
MENUID NENUNAME parents_name
00 在职员工 NULL
0001 生管部 在职员工
000101 小海盗 生管部
第一个为他的ID 第一个为节点的名称.第三个存的是他父节点的名称
//------------------------------创建树BEGIN----------------------------------
procedure TFrm_Set_Power.CreateNavigationTree(tvThis:TTreeView);
Var
sqlstr:String;
myQ,Child:TAdoQuery;
sqlstr2:String;
i:integer;
Begin
i:=0;
tvThis.Items.Clear();
myQ:=TadoQuery.Create(self);
myQ.ConnectionString:=Frm_Main_Menu.ADOConnection1.ConnectionString;
myQ.Close();
myQ.SQL.Clear(); sqlstr := 'Select menuid,MenuName menuname,MenuUrl menuurl,SetParameters menuparam From T_SysMenuInfo menu';
sqlstr:= sqlstr+' where parents_name=' ;
sqlstr:= sqlstr+'''''';
sqlstr:= sqlstr+' Order By MenuId' ; myQ.Close();
myQ.SQL.Clear();
myQ.SQL.Add(sqlstr);
myQ.Open();
myQ.First();
While not myQ.Eof do
Begin
tvThis.Items.Add(tvThis.Selected,myQ.FieldByName('menuname').AsString);
begin
Child:=tAdoQuery.Create(Self);
Child.ConnectionString:=Frm_Main_Menu.ADOConnection1.ConnectionString;//'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=sa;Initial Catalog=WORK;Data Source=sbsever'; sqlstr2:='Select menuid,MenuName menuname,MenuUrl menuurl,SetParameters menuparam From T_SysMenuInfo menu';
sqlstr2:= sqlstr2+' where parents_name=' ;
sqlstr2:= sqlstr2+''''+myQ.FieldByName('menuname').AsString+'''';
sqlstr2:= sqlstr2+' Order By MenuId' ;
Child.Close();
Child.SQL.Clear();
Child.SQL.Add(sqlstr2);
Child.Open();
Child.First();
for i:=i to tvThis.Items.Count-1 do
if tvThis.items.Item[i].Text=myQ.FieldByName('menuname').AsString then
begin
While not Child.Eof do
Begin
tvThis.Items.AddChild(tvThis.items.Item[i],Child.FieldByName('menuname').AsString);
Child.Next;
End;
Child.Free;
break;
END;
end;
i:=i+1;
myQ.Next;
End;
myQ.Free();
sqlstr:='';
sqlstr2:='';
End;
//-------创建树END-----