这是事件代码:procedure TForm1.TreeView1Expanded(Sender: TObject; Node: TTreeNode);
var
s1,s2:string;
node1:ttreenode;
begin
{要去掉原来的假装子节点的空格值}
//showmessage(node.Item[0].text);
if trim(node.Item[0].Text)='' then
begin //也就是说执行一次之后就有记录在那里了,你要是没有这个begin end限制的话会再在下面添加一模一样的记录。这是不需要触发执行的。
node.Item[0].delete; s1:=copy(node.Text,1,posex('_',node.Text,1)-1); //从第一个位置找,找到‘——’前面的位置为止。
//showmessage(s1);
adoquery1.Close;
adoquery1.SQL.Text:='select * from sys_menu where parentnodeid=:p1 ';
adoquery1.Parameters.ParamByName('p1').Value:=s1;
adoquery1.open; while not adoquery1.Eof do
begin
s1:=trim(adoquery1.FieldByName('menuID').asstring);
s2:=trim(adoquery1.FieldByName('menutitle').AsString);
node1:=treeview1.Items.AddChild(node,s1+'_'+s2); if (adoquery1.FieldByName('isparentflag').asinteger=1) then
begin
treeview1.Items.AddChild(node1,s1+'_'+s2);
end;
adoquery1.Next; end;
end;
end;这是代码做出来的效果:也就是说第三层不对。
是不是因为treeview1.item[0].text=''这个判断的原因、?
要怎么改?
var
s1,s2:string;
node1:ttreenode;
begin
{要去掉原来的假装子节点的空格值}
//showmessage(node.Item[0].text);
if trim(node.Item[0].Text)='' then
begin //也就是说执行一次之后就有记录在那里了,你要是没有这个begin end限制的话会再在下面添加一模一样的记录。这是不需要触发执行的。
node.Item[0].delete; s1:=copy(node.Text,1,posex('_',node.Text,1)-1); //从第一个位置找,找到‘——’前面的位置为止。
//showmessage(s1);
adoquery1.Close;
adoquery1.SQL.Text:='select * from sys_menu where parentnodeid=:p1 ';
adoquery1.Parameters.ParamByName('p1').Value:=s1;
adoquery1.open; while not adoquery1.Eof do
begin
s1:=trim(adoquery1.FieldByName('menuID').asstring);
s2:=trim(adoquery1.FieldByName('menutitle').AsString);
node1:=treeview1.Items.AddChild(node,s1+'_'+s2); if (adoquery1.FieldByName('isparentflag').asinteger=1) then
begin
treeview1.Items.AddChild(node1,s1+'_'+s2);
end;
adoquery1.Next; end;
end;
end;这是代码做出来的效果:也就是说第三层不对。
是不是因为treeview1.item[0].text=''这个判断的原因、?
要怎么改?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货