首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

错在哪里?怎么能读取TreeView1节点标识号

2013-03-04 
错在哪里?如何能读取TreeView1节点标识号?各大神你们好!以下源码能从两个表中读出记录到TreeView1生成树形

错在哪里?如何能读取TreeView1节点标识号?
各大神你们好!
以下源码能从两个表中读出记录到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.

=================================================================================
[解决办法]
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;

热点排行