table1 中 id1 names1
01 用品类
02 酒水类
03 烟类table2 中 id2 names2
0101 袜子
0201 北京啤酒
0301 黄山treeview1其实id2中前两位为id1,我在窗体创建的时候把记录取到treeview1中,0101属于id1 01,0201数据id2。等等。
给我代码,通过给分。很简单的问题。只是以前没做过treeview,试了好几次没能满意,请各位帮忙。
01 用品类
02 酒水类
03 烟类table2 中 id2 names2
0101 袜子
0201 北京啤酒
0301 黄山treeview1其实id2中前两位为id1,我在窗体创建的时候把记录取到treeview1中,0101属于id1 01,0201数据id2。等等。
给我代码,通过给分。很简单的问题。只是以前没做过treeview,试了好几次没能满意,请各位帮忙。
var
myNode:TTreeNode;
ChildNode:TTreeNode;
myId:integer;
begin
while not Table1.eof do
begin
myNode:=Treeview1.Items.Add(nil,Table1.FieldByName('names1').AsString); //生成一个主节点
myId:=Table1.FieldByName('id1').AsInteger;
Table2.Active:=false; //对table2进行过滤
Table2.Filter:=('id2>='+IntToStr(myId*100)+' and id2<'+IntToStr(myId*100+100));
Table2.Filtered:=true;
Table2.Active:=true;
while not Table2.eof do
begin
ChildNode:=Treeview1.Items.AddChild(myNode,Table2.FieldByName('names2').AsString);
table2.next;
end; //生成所有该主节点下所有符合条件的子节点
Table1.next; //准备进入下一个循环,生成下一个主节点和其子节点
end; //end of while table1
end;
with adoquery1 do
begin
close;
sql.clear;
sql.add('select longid,text from tree..testtree order by longid');
open;
first;
while not adoquery1.eof do
begin
cat1node:=treeview1.Items.AddChild(catnode,adoquery1.fieldbyname('text').value+'('+adoquery1.fieldbyname('longid').value+')');
//treeview1.Items.Item[0].Expanded:=true;
with adoquery3 do
begin
close;
sql.Clear;
sql.Add('select * from node,testtree where left(node.names,2)=:aa order by names');
adoquery3.Parameters.ParamByName('aa').value:=adoquery1.fieldbyname('longid').value;
open;
first;
while not adoquery3.Eof do
begin
treeview1.Items.AddChild(cat1node,'('+adoquery3.fieldbyname('names').value+')'+adoquery3.fieldbyname('ide').value);
next;
//treeview1.Items.Item[1].Expanded:=true;
end;
end;
next;
end;
end;
我的疑问是left(),这必须是数据库的函数,你确定它的作用是取左字符串左边两个字符吗?