错在哪里?如何能读取TreeView1节点标识号?

aa20000 2013-02-28 12:25:06
各大神你们好!
以下源码能从两个表中读出记录到TreeView1生成树形,但不知道如何能在OnChange事件中写代码获得节点的标识号(选中节点可获得表里ID),正确代码需要如何补充完整?请大神们出手相助,谢谢!!

=================================================================================
unit LOADTREE;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, ComCtrls, DB, ADODB, Unit2;

type
TLOADTREE = class(Tcomponent)

public
procedure LOADINGTREE(TreeView: TTreeView);
end;

implementation

procedure TLOADTREE.LOADINGTREE(TreeView: TTreeView);
var
RootNode:TTreenode;
curID,SubNodeName:string;
subnode,subnodechild:TTreenode;
begin
TreeView.Items.BeginUpdate;
TreeView.Items.Clear;
RootNode:= TreeView.Items.Add(nil, '全部');
RootNode.ImageIndex:=1;
with DataModule2.ADOQuery1 do
begin
DataModule2.ADOQuery1.close;
DataModule2.ADOQuery1.sql.Clear;
DataModule2.ADOQuery1.sql.Add('select * from [TB1] ');
DataModule2.ADOQuery1.open;
DataModule2.ADOQuery1.first;
while not DataModule2.ADOQuery1.Eof do
begin
curID:=trim(DataModule2.ADOQuery1.FieldByName('ID').AsString);
SubNodeName:=trim(DataModule2.ADOQuery1.FieldByName('NAME1').AsString);
subnodechild:=TreeView.items.addchild(rootnode,SubNodeName);
subnodechild.ImageIndex:=2;

DataModule2.ADOQuery2.close;
DataModule2.ADOQuery2.sql.Clear;
DataModule2.ADOQuery2.sql.Add('select * from FJB where FWID='''+DataModule2.ADOQuery1.FieldByName('ID').AsString+'''');
DataModule2.ADOQuery2.open;
DataModule2.ADOQuery2.first;
while not DataModule2.ADOQuery2.Eof do
begin
curID:=trim(DataModule2.ADOQuery2.FieldByName('ID').AsString);
SubNodeName:=trim(DataModule2.ADOQuery2.FieldByName('NAME2').AsString);
subnode:=TreeView.items.addchild(subnodechild,SubNodeName);
subnode.ImageIndex:=2;
DataModule2.ADOQuery2.Next;
end;
DataModule2.ADOQuery1.next;
end;
end;
TreeView.Items.EndUpdate;

end;

end.

=================================================================================
...全文
442 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
dey999 2013-02-28
  • 打赏
  • 举报
回复
1、给节点绑定ID procedure TLOADTREE.LOADINGTREE(TreeView: TTreeView); var RootNode:TTreenode; curID,SubNodeName:string; subnode,subnodechild:TTreenode; begin TreeView.Items.BeginUpdate; TreeView.Items.Clear; RootNode:= TreeView.Items.Add(nil, '全部'); RootNode.ImageIndex:=1; with DataModule2.ADOQuery1 do begin DataModule2.ADOQuery1.close; DataModule2.ADOQuery1.sql.Clear; DataModule2.ADOQuery1.sql.Add('select * from [TB1] '); DataModule2.ADOQuery1.open; DataModule2.ADOQuery1.first; while not DataModule2.ADOQuery1.Eof do begin curID:=trim(DataModule2.ADOQuery1.FieldByName('ID').AsString); SubNodeName:=trim(DataModule2.ADOQuery1.FieldByName('NAME1').AsString); subnodechild:=TreeView.items.addchild(rootnode,SubNodeName); subnodechild.ImageIndex:=2; subnodechild.Data := Pointer(strtoint(curID));--给节点绑定ID DataModule2.ADOQuery2.close; DataModule2.ADOQuery2.sql.Clear; DataModule2.ADOQuery2.sql.Add('select * from FJB where FWID='''+DataModule2.ADOQuery1.FieldByName('ID').AsString+''''); DataModule2.ADOQuery2.open; DataModule2.ADOQuery2.first; while not DataModule2.ADOQuery2.Eof do begin curID:=trim(DataModule2.ADOQuery2.FieldByName('ID').AsString); SubNodeName:=trim(DataModule2.ADOQuery2.FieldByName('NAME2').AsString); subnode:=TreeView.items.addchild(subnodechild,SubNodeName); subnode.ImageIndex:=2; subnode.Data := Pointer(strtoint(curID));--给节点绑定ID DataModule2.ADOQuery2.Next; end; DataModule2.ADOQuery1.next; end; end; TreeView.Items.EndUpdate; end; 2、根据选中节点获得ID procedure TForm1.TreeView1Changing(Sender: TObject; Node: TTreeNode; var AllowChange: Boolean); var curID:Integer; begin cur := Integer(Node.Data); showmessage(inttostr(ID)); end;
haitao 2013-02-28
  • 打赏
  • 举报
回复
引用 2 楼 aa20000 的回复:
感谢 dey999 热心帮助,按你方法确实能读出节点标识号,但有个问题就是在【表1】的 ID 和【表2】有着相同ID,请问如何能把两个表的ID区别出来呢?谢谢!
它们所加的节点的层次是不同的吧
aa20000 2013-02-28
  • 打赏
  • 举报
回复
感谢 dey999 热心帮助,按你方法确实能读出节点标识号,但有个问题就是在【表1】的 ID 和【表2】有着相同ID,请问如何能把两个表的ID区别出来呢?谢谢!

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧