我想在窗体创建时将数据库中某张表中的某一字段的值加到TreeView控件中去。代码如下:
procedure TForm1.FormCreate(Sender: TObject);
var
  qry_FindRecord:TQuery;
  Record_no,Record_count:integer;
  str_department:string;
  node:TTreeNode;
begin
  qry_FindRecord := TQuery.Create(nil);
  try
   with qry_FindRecord do 
    begin
     close;
     sql.Clear;
     sql.Add('select department from D_EmployeeInfo group by department');
     open;
     if not eof then
       begin
         Record_count := qry_FindRecord.RecordCount;
         for Record_no := 1 to Record_count do
           begin
             str_department := trim(qry_FindRecord.fieldbynam.('department').AsString);
             node:=TreeView1.Selected;
             node:=TreeView1.Items.AddChild(node,str_department);
             qry_FindRecord.Next;
           end;
       end;
    end;
  finally
    qry_FindRecord.Free;
  end;
end;
我在TreeView已创建了一个项目'所有部门',本意是将得到的字段值作为这个项目的子项,但代码执行后,字段值和我创建的项目'所有部门'成了同级目录。我的代码哪里出错了,请赐教!

解决方案 »

  1.   

    你有没有选定treeview的结点?如果没有选定,则treeview1.selected可能为nil,这时增加的结点就在根结点上
      

  2.   

    to soldier7451(单飞的鸟)
    其实我知道问题出在这,但咋解决呢?
    本来我可以先让treeview得到焦点,问题就可以解决。
    但在TForm1.FormCreate事件中写treeview1.setfouc是不行的。
      

  3.   

    目的不就是想在根节点下新增部门么?
    var
      RootNode, DepNode: TTreeNode;
      i: integer;
    begin
      RootNode := TreeView1.GetFirstNode;
      with Query1 do
        begin
          Open;
          First;
          while not Query1.Eof do
            begin
              DepNode := TreeView1.Items.AddChild(RootNode, FieldByName('epartment').AsStirng);
              Next;
            end;
         end;
    end;
    //事件不一非要写到FormCreate中,写到FormShow中更好.
    //随手写的,没有测试,思路就是这样