TDBGridは表形式でデータが表示され、更新操作も行えますので大変便利です。
ただ入力もれがないかなどの更新前チェックを行う場合、
TDBGridのイベントを見てもそれらしいイベントはありません。
このときにはデータセット側(TFDQueryやTClientDataSetなど)のイベントを利用します。
DBGridの仕様として、別レコードに移動したときに編集が確定されます。
内部的にデータセットのPostメソッドが呼び出されているので、
データセットのBeforePostイベントで更新前チェックを行うと
1行ごとに入力もれがないかなどの確認ができます。
例えばフィールド「COMPANY」を入力必須項目にするときに、
そのフィールドのセルに入力を戻すには次のようなコードになります。
Abortメソッドは別レコード移動を行わせないように呼び出しています。
procedure TForm1.ClientDataSet1BeforePost(DataSet: TDataSet);
begin
if DataSet.FieldByName('COMPANY').AsString = '' then
begin
ShowMessage('会社名が入力されていません!');
DBGrid1.SelectedField := DataSet.FieldByName('COMPANY');
Abort;
end;
end;
また、データセットの行移動時に呼び出されるAfterScrollイベントを使うことで、
現在の行番号をLabelに表示させるといった、毎行で必要な処理を記述することが可能です。
procedure TForm1.ClientDataSet1AfterScroll(DataSet: TDataSet);
begin
// ラベルに「行番号 / 行数」を表示
lblRowNumber.Caption := IntToStr(ClientDataSet1.RecNo) + ' / ' +
IntToStr(ClientDataSet1.RecordCount) + ' 行';
end;
他にも、データセットの以下のようなイベントが活用できます。
- AfterInsertイベント
- 新しいレコード追加時に、事前に初期値をセットできます。
- BeforeInsertイベント
- 「Abort;」メソッドだけを記述することで、「↓」キー等での行追加を禁止します。
- OnCalcFieldsイベント
- 計算項目フィールドの値を設定できます。
計算項目については、旧Tipsのこちらをご参照ください。
Delphi/400 Tips>入門>DBGridの使用方法(1)>計算項目を追加する
- 計算項目フィールドの値を設定できます。
(ミガロ.情報マガジン「MIGARO News!!」Vol.113 2010年4月号より) ※一部追加改変