表
e2 1 aaa
e2 2 abb
e2 3 ccc
e3 1 ad
e3 2 dddatreeview1 已生成如下:
e2 1
2
3
e3 1
2
现点e2 1 //edit1 显示:aaa
2 //edit1 显示:abb
如何写代码?
e2 1 aaa
e2 2 abb
e2 3 ccc
e3 1 ad
e3 2 dddatreeview1 已生成如下:
e2 1
2
3
e3 1
2
现点e2 1 //edit1 显示:aaa
2 //edit1 显示:abb
如何写代码?
node := TreeView1.Selected;
if node = nil then Exit;
if node.level <> 1 then Exit; //看你要点的是哪层就设为几
que.SQL.Text := 'select field3 from table where field1 = '+QuotedStr(Node.Parent.Text)+' and field2='+QuotedStr(Node.Text);
que.Open;
if not Que.Eof then
Edit1.Text := que.FieldValues[0];
que.Close;
try
with query1 do
begin
close;
sql.clear;
sql.add('select * from 表 where e=:e and no=:no');;
params[0].value:=TreeView1.Selected.Parent.Text;
params[1].value:=TreeView1.Selected.Text;
open;
edit1.text:=fieldbyname('name').asstring;
end;
except
...
end;
TTreeNode的属性较多,比如SelectedIndex,ImageIndex,StateIndex,Data等。要存储数值型的自定义数据时,可以直接使用SelectedIndex,ImageIndex,StateIndex(当然,这些属性并未被利用,也就是说没有关联图标)。如果要使用字符串或对象,则可以使用一个TStringList或TList来保存字符串或对象,然后将Node.Data指向它。转换时使用String和Pointer(TList的元素使用相应的类转化)。
在生成树节点时,就将要保存的信息写入TSTringList(或TList),然后将Node.Data指向这一项。
点击树节点时,直接取出Node.Data并转化即可。
这里就不附源代码了。
edit1.text:=node.Text;
在onChange()事件写比较好,即选中结点变化时才做,onClick()即使在同一结点连续点击也触发事件
能给完整源码吗?(onChange())
begin
if Treeview1.Selected=nil then exit;
//如果没有选中无需显示,假如没有选择Node而此事件又被触发的话会出错
if TreeView1.Selected.Parent<>nil
then Edit1.Text:=(TreeView1.Selected.Text);
//当点击或移动到e2之类的node时同样会触发onchange事件,在这里要判断
end;另外 onchange事件还可以响应光标的移动选择,而onclick则只能响应鼠标
所以用onchange会较好.
run 无变化呀!!!d6+xp
生成树的源码如下:
procedure TForm1.FormCreate(Sender: TObject);
var v_louno:string;
node1:Ttreenode;
begin
with Query1 do
begin
close;
sql.clear;
sql.add('select louno from 表 group by louno');
open;
while not eof do
begin
v_luono:=fieldbyname('louno').asstring;
node1:=treeview1.Items.AddChild(nil,v_luono);
with Query2 do
begin
close;
sql.clear;
sql.add('select distinct unitno from 表 where luono='''+v_louno+'''');
open;
while not eof do
begin
treeview1.Items.AddChild(node1,query2.fieldbyname('unitno').asstring);
next;
end;
query2.close;
end;
next;
end;
close;
end;
end;
表:
louhao unitno beizhu
e2 1 aaa
e2 2 abb
e2 3 ccc
e3 1 ad
e3 2 ddda
louno unitno beizhu
e2 1 aaa
e2 2 abb
e2 3 ccc
e3 1 ad
e3 2 ddda
http://expert.csdn.net/Expert/topic/1792/1792844.xml?temp=.36401
http://expert.csdn.net/Expert/topic/1775/1775118.xml?temp=5.711001E-02
估计可以解决你的问题.我看了你的要求.
有一种做法就是在Selected的时候做一个函数专门在另一表中查找与selected.text
相符记录显示.但这种方法会大量对表的操作,会降低速度.折衷的方法是提前建数组
存储,但我觉得这不种上佳方法.另一种做法我觉得LuckyJan(小虾无招) 的方法更可取.用Data来存储你要反映的值.
但Data是个指针(?)这方法我也不熟悉恐无法帮到你.你在上面我贴出地址的两贴应该可以找到答案的.Good luck!
ID:integer;
Name:string
end;
PNodeItem=^TNodeItem;var aNode,bootNode: TTreeNode; item:PNodeItem;根:
new(item);
item^.ID:=fieldbyname('ID').asinteger;
item^.Name:=fieldbyname('Name').asString;
bootNode:=TV.Nodes.Addobject(nil,'boot1',item);
其他:
new(item);
item^.ID:=fieldbyname('ParentID').asinteger;
item^.Name:=fieldbyname('Name').asString;
TV.Nodes.AddChildobject(bootNode,'otherNode',item);