求解决点二级科目不出现相应二级名的问题(TreeView控件)
问题:TreeView科目树一点击一级科目,就在Edit1中显示其下的二级科目的最后一个名称。再点二级科目就没有反应了。就是说,只有点击一级科目,才出二级科目(出来的二级科目也仅是二级本类别下的最后一个二级名称),点二级科目,在Edit1中不显示相应二级名称(目的就是想显示二级名称,想在点击二级科目是显示相应二级名称)。为什么只能点击一级科目才出二级名称(出最后一个二级名)、而点二级没有作用?请高手分析一下原因。代码如下:
with adopian2 do
begin
Close;
SQl.Clear;
SQL.Add('select * from zu1 where 省份= :a order by 地区');
Parameters.ParamByName('a').Value:= treeview1.Selected.Text; ;
Open;
end;
if (adopian2.RecordCount>0)and(Treeview1.Selected <> Nil) then
Edit1.Text := adopian2.Fieldbyname('地区').AsString ;
我想解决:
如何做到 只有在点击哪个科目名称时才在Edt1中显示相应名称,如:
1)江苏 //点此,则Edit1不显示
11)南京 //点此,则Edit1=南京
12)徐州 //点此,则Edit1=徐州
2)河南 //点此,则Edit1不显示
21)郑州 //点此,则Edit1=郑州
22)洛阳 //点此,则Edit1=洛阳
---------附 载入窗体时代码:
procedure TfrmUWaterQftzd.FormShow(Sender: TObject);
begin
with adopian1 do
begin
Close;
SQl.Clear;
SQL.Add('select * from pian1');
Open;
end;
adopian1.First ;
while not adopian1.Eof do
begin
//添加根节点
node2:= TreeView1.Items.Add(node1,adopian1.FieldByName('省份').AsString) ;
with adopian2 do
begin
Close;
SQl.Clear;
SQL.Add('select * from zu1 where 省份 = :a order by 地区');
Parameters.ParamByName('a').Value:=adopian1.FieldByName('省份').AsString;
Open;
end;
adopian2.First ;
while not adopian2.Eof do
begin
node2.ImageIndex := 1;
//添加子节点
TreeView1.Items.AddChildFirst(node2,adopian2.fieldbyname('地区').asstring) ;
adopian2.next;
end;
adopian1.next;
end;
end;
[解决办法]
直接从树中取Text,而不是去重新查询
- Delphi(Pascal) code
procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);var fNode:TTreeNode;begin fNode:=TreeView1.GetNodeAt(X,Y); if fNode<>nil Then Edit1.Text:=fNode.Text;end;