A7Mの日記: 覚え書き:TDBGridで入力された値を変換する必要がある場合の対処方法
日記 by
A7M
TDBGrid等で入力された値が妥当かどうかのチェックはTField::OnValidateでチェックすればよいが、
「入力した文字列は常に全角に変換する」ケースのように、妥当ではあるが入力後にデータを強制的に変換する必要が場合は、TDataSet::BeforePostでレコードセットが保存される直前にデータの変更を行う。
ただし、TDataSet::BeforePostは頻繁に呼ばれるので、変更の必要があるかどうかをフラグ等で制御した方がよい。
ただし、TDataSet::BeforePostは頻繁に呼ばれるので、変更の必要があるかどうかをフラグ等で制御した方がよい。
(例)
//---------------------------------------------------------------------------
void __fastcall TForm1::Table1TextFieldChange(TField *Sender)
{
// 特定のフィールドが更新されたので、
// 次回のBeforePostで入力値の変換が必要
m_NeedUpdate = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Table1BeforePost(TDataSet *DataSet)
{
if (m_NeedUpdate == false) return;
// HanToZenは半角を全角にする関数
AnsiString TextValue = HanToZen(Table1TextField->Value);
Table1TextField->Value = TextValue;
m_NeedUpdate = false;
}
//---------------------------------------------------------------------------
注意:
TField::OnValidate/TField::OnChangeでフィールドの値を変更すると、エラー(スタックオーバーフロー等)になる。
覚え書き:TDBGridで入力された値を変換する必要がある場合の対処方法 More ログイン