要做一个左边是树显示各部门信息,右边是根据部门编号显示的部门人员,因为部门信息可能会有重复,如何记下树中每个部门对应的id,我想在创建树时用数组记录,调试出错,代码如下:急盼高手帮忙!!!
procedure Tsjwh_csh.FormCreate(Sender: TObject);
var
 Node1:TTreeNode;
 Node2:TTreeNode;
 Node3:TTreeNode;
 NodeText1:string;
 NodeText2:string;
 NodeText3:string;
 NodeText4:string;
 i:integer;begin
 TreeView1.Items.Clear;
 ADOQuery1.Active:=true;
 ADOQuery1.First;
 if ADOQuery1.eof  then
  begin
   ShowMessage('请进行机构代码维护');
   ADOQuery1.Close;
   ADOQuery2.Close;
   ADOQuery3.Close;
   ADOQuery4.Close;
   exit;
  end
 else
  begin
   NodeText1:=ADOQuery1.fieldValues['bm_002'];
   Node1 := TreeView1.Items.AddFirst(nil,NodeText1);
   i:=TreeView1.selected.AbsoluteIndex;
   intr1[i] :=  ADOQuery1.FieldValues['bm_001'];
   NodeText1:= ADOQuery1.FieldValues['bm_001'];
   with TreeView1.Items do
   begin
   with ADOQuery2 do
   begin
    Active:=false;
    Parameters.ParamByName('bl2').Value:=NodeText1;
    Active:=true;
    first;
    While not eof do
    begin
     NodeText2:= FieldValues['bm_002'];
     Node2:=AddChild(Node1,NodeText2);
     i:=TreeView1.selected.AbsoluteIndex;
     intr1[i] := FieldValues['bm_001'];
     NodeText2:= FieldValues['bm_001'];
     with ADOQuery3 do
     begin
      Active:=false;
      Parameters.ParamByName('bl3').Value:=NodeText2;
      Active:=true;
      first;
      While not eof do
      begin
        NodeText3:=FieldValues['bm_002'];
        Node3:=AddChild(Node2,NodeText3);
        i:=TreeView1.selected.AbsoluteIndex;
        intr1[i] := FieldValues['bm_001'];
        NodeText3:= FieldValues['bm_001'];
        with ADOQuery4 do
        begin
          Active:=false;
          Parameters.ParamByName('bl4').Value:=NodeText3;
          Active:=true;
          first;
          While not eof do
          begin
            NodeText4:=FieldValues['bm_002'];
            AddChild(Node3,NodeText4);
            i:=TreeView1.selected.AbsoluteIndex;
            intr1[i] := FieldValues['bm_001'];
            Next;
           end;
        end;//ADOQuery4
        Next;
      end;//not eof
     end; //ADOQuery3
     Next;
    end;
   end; //ADOQuery2
  end;
  ADOQuery1.Close;
  ADOQuery2.Close;
  ADOQuery3.Close;
  ADOQuery4.Close;
  ADOQuery5.Active:=true;
  ADOQuery6.Active:=true;
  ADOQuery7.Active:=true;
 // ADOQuery8.Active:=true;
 end;
   
end;

解决方案 »

  1.   

    帮忙啊,大侠,也是没办法,急着出活,怎样在生成树的同时获得index
      

  2.   

    procedure       TForm_department_staff.Button1Click(Sender:       TObject);   
    const   
            ID_DEPT       =       2;   
    var   
            nLevel:       Integer;   
            pNodes:       array[0..1023]       of       TTreeNode;   
            lpID,       lpName:       string;   
    begin   
            ADODataSet1.Close;   
            ADODataSet1.CommandText       :=       "SELECT       *       FROM       department       ORDER       BY       id   ";   
            ADODataSet1.Open;   
            pNodes[0]       :=       nil;   
            TreeView1.Items.Clear;   
            with       ADODataSet1.Recordset       do   
                    while       not       Eof       do   
                    begin   
                            lpID       :=       Fields[   "id   "].Value;   
                            lpName       :=       Fields[   "department   "].Value;   
                              edit1.text:=lpid; 
                            nLevel       :=       Length(trim(edit1.text))       div       ID_DEPT;   
                            pNodes[nLevel]       :=       TreeView1.Items.AddChild(pNodes[nLevel       -       1],       lpName);   
                            MoveNext;   
                    end;   
    end;   
      

  3.   

    使用节点的Data属性存储,网上有例子的。