在dbgrid1中选中任意一行,然后双击该行,弹出一个窗体
将该行数据信息显示在弹出的窗体上
应该如何实现?请各位高手赐教

解决方案 »

  1.   


    假定dbgrid1是从adoquery1获取得到的数据。procedure Tform1.dbgrid1click(Sender: TObject);
    begin
      if datamodule1.adoquery1.RecordCount>0 then //若当前有数据,可进行操作
       begin
       form1edit.ShowModal; //显示新的窗体form1edit
       end;
    end;在form1edit的oncreate事件中,代码如下:procedure TForm1edit.FormCreate(Sender: TObject);
    begin
        edit1.text:=datamodule1.adoquery1.fieldbyname('字段').AsString;
        edit2.text:=datamodule1.adoquery1.fieldbyname('字段').asstring;
        ....
    end;
    能够如上使用是因为dbgrid中进行数据上下浏览时候,sql数据指针在数据集中移动,所以直接获取记录就是当前正选中的记录。当然,你也可以获取当前选中记录的主键字段的值,然后在新窗口中,将该值作为查询条件,也可以获取到当前在dbgrid中选中的记录的各个字段值,然后赋给控件即可。
      

  2.   

    1.查询出数据显示到DBGrid中
    2.双击DBGrid显示Form2窗体,并将DBGrid中对应的数据显示到Form2中的对应文本框中。procedure TForm1.DBGrid1DblClick(Sender: TObject);
    begin
    form2.Show;
    form2.Edit1.Text := DBGrid1.SelectedField.DataSet.FieldByName('字段1').AsString;
    form2.Edit2.Text := DBGrid1.SelectedField.DataSet.FieldByName('字段2').AsString;
    ........
    end;
      

  3.   

    procedure Tform1.dbgrid1click(Sender: TObject);
    begin
      if datamodule1.adoquery1.RecordCount>0 then //若当前有数据,可进行操作
       begin
        form1edit.Edit1.Text := datamodule1.adoquery1.FieldByName('字段1').AsString; 
        form1edit.Edit2.Text := datamodule1.adoquery1.FieldByName('字段2').AsString; 
        form1edit.ShowModal; //显示新的窗体form1edit
       end;
    end;
      

  4.   

    procedure Tform1.dbgrid1click(Sender: TObject); 
    begin 
      if datamodule1.adoquery1.RecordCount>0 then //若当前有数据,可进行操作 
      begin 
        form1edit.Edit1.Text := datamodule1.adoquery1.FieldByName('字段1').AsString; 
        form1edit.Edit2.Text := datamodule1.adoquery1.FieldByName('字段2').AsString; 
        ....
        ....
        form1edit.ShowModal; //显示新的窗体form1edit 
      end; 
    end;