一个关于DBGRID的问题?(20分)

  • 主题发起人 主题发起人 易名烦
  • 开始时间 开始时间

易名烦

Unregistered / Unconfirmed
GUEST, unregistred user!
这样的:
我在DBGRID的ONCELLCLICK里写了SHOWMESSAGE(ADOQUERY1.FIELDS.FIELDBYNAME('BZ').ASSTRING;
然后我在DBGRID的KEYDOWN里写:
if (ord(key)=38) or (ord(key)=40) then
dbgrid1.oncellclick(dbgrid1.columns[0]);
其中DBGRID1和ADOQUER1是关联了。
但在按上下键时出来的数据却不对,是行不太对。
就是当前的BZ是‘111111’,却显示的是上一条的BZ‘222222’请各位解答一下。
 
str:=dbgrid1.SelectedField.AsString;
 
你的showmessge 是发生在按上下键时,
而你的当前记录是按上下键以后的,
也就是说你显示的始终是你按键之前的那条记录!
 
雪中漫步:
哪我要怎么办呢?
 
你可以在DataSource的好像是DataChanged事件中showmessage
 
同意jenemery的
 
jenemery的做法不能解决问题!
 
简单一点的
你可以在
adoquery的AfterScroll的事件中这样:
if not dbgrid1.Focused then exit;
showmessage(ADOquery1.FIELDS.FIELDBYNAME('BZ').ASSTRING);
不用去判断按键是否是上下键
 
我也试过在这里写,但ADOQUERY1是在FORM的ONSHOW里OPEN的,老提示字段找不到。
你帮我试试看!
 
我试过了,没什么问题,没有提示字段找不到啊
adoquery的AfterScroll的事件中这样:
if not dbgrid1.Focused then exit;
showmessage(ADOquery1.FIELDS.FIELDBYNAME('BZ').ASSTRING);
只有dbgrid获得焦点并且按上下键时才会执行,和在onshow里打开数据集没什么关系啊
 
procedure TFRGCCWDD.FormShow(Sender: TObject);
begin
ADOQUERY1.Close;
ADOQUERY1.SQL.Clear;
ADOQUERY1.SQL.Add('SELECT DISTINCT POBH FROM CWDDPSR');
ADOQUERY1.OPEN;
end;

procedure TFRGCCWDDADOQuery1AfterScroll(DataSet: TDataSet);
begin
WITH ADOQUERY2 DO
BEGIN
Close;
Parameters.ParamByName('BH').Value:=ADOQUERY1.Fields.FieldBYNAME('[red]POBH[/red]').AsString;
Open;
END;
end;
在红色部分的哪个POBH总是找不到,怪的很,急都急死了!
 
你的事件先后顺序有误,建议你跟踪一下,delphi事件的先后顺序很重要,应该好好看看,
多跟踪。
 
我也建议你分别在ONCLICK与ONKEYDOWN里面设置断点跟踪一下,看看是哪个事件先执行。
 
多人接受答案了。
 
后退
顶部