关于双击dbgrid 的一个问题(50分)

  • 主题发起人 主题发起人 jison
  • 开始时间 开始时间
J

jison

Unregistered / Unconfirmed
GUEST, unregistred user!
双击DBGRID组件中的任意一行,如何在另一个窗体中显示其详细信息
 
把这一行的信息传递到另一个窗体.
 
Application.CreateForm(TForm1,Form1);
 
那要是把一个窗体中的某一个信息传递到另外一个窗体,该怎么做呢?
 
我现在要做的就是把DBGRID中的信息,传到另一个窗体中
 
把 Form1上的DBGRID中的信息显示在FORM2中
在Form1窗体中添加object Button1: TButton 用ADOQUERY连数据库,加入代码:
form2.edit.text:=ADOQUERY.fieldbyname('字段名').asstring;
……;
最后只要在dbgrid的ondblclick事件中加入代码button.click;
 
在第二个窗口定义public 变量,
直接把键值传到第二个窗口中,
然后调用一个过程显示,
 
public变量,我定义了.但我每次双击,他多是显示第一行的数据.
这个是什么原因呢?
 
加个循环试试
 
循环?
不太理解[:(]
 
有没有人能回答我啊
 
要求不高的话可以使用此方法
代码:
procedure TForm1.dbgrd1DblClick(Sender: TObject);
begin
  with dbgrd1.DataSource.DataSet do
  if not Eof do
  begin
    form2.edit.text:=Fieldbyname('字段名').asstring;
    form2.edit2.text:=Fieldbyname('字段名2').asstring;
    。。。
  end;
end;
 
要求不高的话可以使用此方法
在FORM上放个BDEDIT,设置他的DATASOURCE和你的DBGRIED一样,选择个字段,你光标点在哪一行,就可获得某个字段值即:DBEDIT。TEXT
 
Form2.edit1.text:=ADOQuery1.Fields[0].asstring;
Form2.edit2.text:=ADOQuery1.Fields[1].asstring;
Form2.edit3.text:=ADOQuery1.Fields[2].asstring;
Form2.edit4.text:=ADOQuery1.Fields[3].asstring;
......
ADOQuery1是Form1中的.
 
你所指的就是一個主從表,測試後的代碼
你可以看看
var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);


begin
if not qtyhead.active then qtyhead.Active:=true;

end;

procedure TForm1.dsheadDataChange(Sender: TObject; Field: TField);
begin
qrydetil.Parameters.ParamValues['BillNo']:=qtyHead.FieldByName('BillNO').AsString;
qrydetil.Parameters.ParamValues['StockID']:=qtyHead.FieldByName('StockID').asInteger;
Qrydetil.Open;
end;

procedure TForm1.wwDBGrid1DblClick(Sender: TObject);
begin
pagecontrol1.ActivePageIndex:=1;
end;

end.
 
在dbgrid 的 onDblclick 事件里取出选中的数据 传到你需要的地方

或是在你dbgrid用的那个 adoqury 的 afterscroll事件里写
 
最简单的方法是设置相同的DataSource就行了!
 
谢谢各位,问题已解决!分数不多,不要见怪
 
后退
顶部