方法 : 行の変更時にデータを検証する
データ検証とは、アプリケーション データに入力される値をチェックする処理です。 基になるデータ ストアに更新を送信する前に、このような値をチェックすることをお勧めします。 これは、チェックによってアプリケーションとデータ ストアの間で生じる可能性のあるラウンド トリップの回数を減らすことができるためです。
注意
データセット デザイナーで作成される部分クラスにおいて、データセットに検証ロジックを追加できます。このデザイナーで生成されるデータセットによって、部分クラス内のコードが削除または変更されることはありません。
RowChanging イベントに応答することにより、データ行の値の変更時にデータを検証できます。 このイベントが発生すると、現在の行の各列に対して指定されている値を含むイベント引数 (e.Row) が渡されます。 e.Row の各列の内容に基づいて、次の操作が可能です。
何もせずに、指示された値を受け入れます。
行変更イベント ハンドラーで列エラー (SetColumnError) を設定して、指定された値を拒否します。
オプションで ErrorProvider コントロールを使用して、ユーザーにエラー メッセージを表示します。 詳細については、「ErrorProvider コンポーネント (Windows フォーム)」を参照してください。
ColumnChanging イベントを使用して、個別の列の変更中に検証を実行することもできます。 詳細については、「方法 : 列の変更時にデータを検証する」を参照してください。
RowChanging イベントでのデータ検証
検証する各列にアプリケーションの要件を満たすデータが格納されていることを検証するコードを記述できます。 指定された値が受け入れられない場合、エラーがあることを表すように該当する列を設定します。 Quantity 列が 0 以下の場合に列エラーを設定する例を次に示します。 行変更イベント ハンドラーは、次のように記述します。
行の変更時にデータを検証するには (Visual Basic)
データセット デザイナーでデータセットを開きます。 詳細については、「方法 : データセット デザイナーでデータセットを開く」を参照してください。
検証するテーブルのタイトル バーをダブルクリックします。 この操作により、データセットの部分クラス ファイルに DataTable の RowChanging イベント ハンドラーが自動的に作成されます。
ヒント
テーブル名の左側をダブルクリックして、行変更イベント ハンドラーを作成します。テーブル名をダブルクリックすると、テーブル名を編集できます。
Private Sub Order_DetailsDataTable_Order_DetailsRowChanging( ByVal sender As System.Object, ByVal e As Order_DetailsRowChangeEvent ) Handles Me.Order_DetailsRowChanging If CType(e.Row.Quantity, Short) <= 0 Then e.Row.SetColumnError("Quantity", "Quantity must be greater than 0") Else e.Row.SetColumnError("Quantity", "") End If End Sub
行の変更時にデータ検証するには (C#)
データセット デザイナーでデータセットを開きます。 詳細については、「方法 : データセット デザイナーでデータセットを開く」を参照してください。
検証するテーブルのタイトル バーをダブルクリックします。 この操作により、DataTable の部分クラス ファイルが作成されます。
注意
データセット デザイナーでは、RowChanging イベントのイベント ハンドラーが自動作成されません。RowChanging イベントを処理するメソッドを作成し、このイベントをフックするコードをテーブルの初期化メソッドで実行する必要があります。
部分クラスに次のコードをコピーします。
public override void EndInit() { base.EndInit(); Order_DetailsRowChanging += TestRowChangeEvent; } public void TestRowChangeEvent(object sender, Order_DetailsRowChangeEvent e) { if ((short)e.Row.Quantity <= 0) { e.Row.SetColumnError("Quantity", "Quantity must be greater than 0"); } else { e.Row.SetColumnError("Quantity", ""); } }