パスワードを忘れた? アカウント作成
594161 journal

A7Mの日記: 覚え書き:TDBGridで入力された値を変換する必要がある場合の対処方法

日記 by A7M
TDBGrid等で入力された値が妥当かどうかのチェックはTField::OnValidateでチェックすればよいが、 「入力した文字列は常に全角に変換する」ケースのように、妥当ではあるが入力後にデータを強制的に変換する必要が場合は、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でフィールドの値を変更すると、エラー(スタックオーバーフロー等)になる。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

にわかな奴ほど語りたがる -- あるハッカー

読み込み中...