2,507
社区成员
发帖
与我相关
我的任务
分享1.ENTER键问题,如果是DBGridEh控件,只需设置OptionsEh->dghEnterAsTab=True即可;
DBGrid要写代码实现,设置Form1.KeyPreview:=True; 然后在Form的onKeyDown事件写代码:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (key=13) and (ActiveControl=DBGrid1) then
begin
with DBGrid1 do
begin
if SelectedIndex=FieldCount-1 then
begin
DataSource.DataSet.Next;
if DataSource.DataSet.Eof then
DataSource.DataSet.Append;
SelectedIndex:=0;
end else
SelectedIndex:=SelectedIndex+1;
end;
end;
end;
2.用字段的onChange事件,比如你的DBGrid1连接的是ADOQuery1,则
private
{ Private declarations }
procedure DBARCODEChange(Sender: TField);
procedure DNUMChange(Sender: TField);
implementation
{$R *.dfm}
procedure TForm1.DBARCODEChange(Sender: TField);
var
DataSet:TDataSet;
begin
DataSet:=TField(Sender).DataSet;
DataSet.FieldByName('DNAMN').Clear;
DataSet.FieldByName('DPRICEIN').Clear;
DataSet.FieldByName('DPRICEINNEW').Clear;
with ADOQuery2 do
begin
Close;
SQL.Text:='Select DNAMN,DPRICEIN,DPRICEINNEW From V_THING'
+' Where DBARCODE='+Quotedstr(TField(Sender).AsString);
Open;
if not isEmpty then
begin
DataSet.FieldByName('DNAMN').AsString:=FieldByName('DNAMN').AsString;
DataSet.FieldByName('DPRICEIN').AsFloat:=FieldByName('DPRICEIN').AsFloat;
DataSet.FieldByName('DPRICEINNEW').AsFloat:=FieldByName('DPRICEINNEW').AsFloat;
end;
end;
end;
procedure TForm1.DNUMChange(Sender: TField);
begin
with TField(Sender).DataSet do
FieldByName('DMONEYTICKET').AsFloat:=FieldByName('DNUM').AsFloat*FieldByName('DPRICEINNEW').AsFloat;
end;
procedure TForm1.ADOQuery1AfterOpen(DataSet: TDataSet);
begin
DataSet.FieldByName('DBARCODE').OnChange:=DBARCODEChange;
DataSet.FieldByName(DNUM).OnChange:=DNUMChange;
DataSet.FieldByName('DPRICEINNEW').OnChange:=DNUMChange;
end;
3.不可编辑问题,设置DBGrid相应的列ReadOnly属性为True就行了