次の方法で共有


方法 : Windows フォームの DataGrid コントロールを使用して入力データを検証する

更新 : 2007 年 11 月

0ye0dkkw.alert_note(ja-jp,VS.90).gifメモ :

DataGridView コントロールは、DataGrid コントロールに代わると共に追加の機能を提供します。ただし、DataGrid コントロールは、下位互換性を保つ目的および将来使用する目的で保持されます。詳細については、「Windows フォームの DataGridView コントロールと DataGrid コントロールの違いについて」を参照してください。

Windows フォームの DataGrid コントロールで使用できる入力データの検証には 2 種類の方法があります。ユーザーが適切でないデータ型 (たとえば整数型のセルに文字列) を入力した場合、その入力された無効な値は既存の有効な値に置き換えられます。このような入力データの検証は自動的に行われ、カスタマイズはできません。

もう一方の入力データの検証は、不適切なデータをすべて拒否する場合に使用できます。たとえば 1 以上の値が必要なフィールドに 0 を入力しようとする場合や、適切でない文字列を入力しようとする場合にそのデータを拒否します。ColumnChanging イベントまたは RowChanging イベントに対してイベント ハンドラを記述することにより、データセット内で実施できます。次に示す例では、ColumnChanging イベントを使用しています。"Product" 列では特に不適切な値が許可されないためです。RowChanging イベントを使用すると、"End Date" 列の値が同一行の "Start Date" 列の値より後であることを確認できます。

ユーザー入力データを検証するには

  1. 適切なテーブルに対して ColumnChanging イベントを処理するコードを記述します。不適切な入力が検出された場合は、DataRow オブジェクトの SetColumnError メソッドを呼び出します。

    Private Sub Customers_ColumnChanging(ByVal sender As Object, _
    ByVal e As System.Data.DataColumnChangeEventArgs)
       ' Only check for errors in the Product column
       If (e.Column.ColumnName.Equals("Product")) Then
          ' Do not allow "Automobile" as a product.
          If CType(e.ProposedValue, String) = "Automobile" Then
             Dim badValue As Object = e.ProposedValue
             e.ProposedValue = "Bad Data"
             e.Row.RowError = "The Product column contians an error"
             e.Row.SetColumnError(e.Column, "Product cannot be " & _
             CType(badValue, String))
          End If
       End If
    End Sub
    
    //Handle column changing events on the Customers table
    private void Customers_ColumnChanging(object sender, System.Data.DataColumnChangeEventArgs e) {
    
       //Only check for errors in the Product column
       if (e.Column.ColumnName.Equals("Product")) {
    
          //Do not allow "Automobile" as a product
          if (e.ProposedValue.Equals("Automobile")) {
             object badValue = e.ProposedValue;
             e.ProposedValue = "Bad Data";
             e.Row.RowError = "The Product column contains an error";
             e.Row.SetColumnError(e.Column, "Product cannot be " + badValue);
          }
       }
    }
    
    //Handle column changing events on the Customers table
    private void Customers_ColumnChanging(System.Object sender, System.Data.DataColumnChangeEventArgs e) 
    {
       //Only check for errors in the Product column
       if ( e.get_Column().get_ColumnName().Equals("Product") ) 
       {
          //Do not allow "Automobile" as a product
          if ( e.get_ProposedValue().Equals("Automobile") ) 
          {
             System.Object badValue = e.get_ProposedValue();
             e.set_ProposedValue("Bad Data");
             e.get_Row().set_RowError("The Product column contains an error");
             e.get_Row().SetColumnError(e.get_Column(), "Product cannot be " + badValue);
          }
       }
    }
    
  2. イベントにイベント ハンドラを接続します。

    フォームの Load イベントまたはコンストラクタに、次のコードを記述します。

    ' Assumes the grid is bound to a dataset called customersDataSet1
    ' with a table called Customers.
    ' Put this code in the form's Load event or its constructor.
    AddHandler customersDataSet1.Tables("Customers").ColumnChanging, AddressOf Customers_ColumnChanging
    
    // Assumes the grid is bound to a dataset called customersDataSet1
    // with a table called Customers.
    // Put this code in the form's Load event or its constructor.
    customersDataSet1.Tables["Customers"].ColumnChanging += new DataColumnChangeEventHandler(this.Customers_ColumnChanging);
    
    // Assumes the grid is bound to a dataset called customersDataSet1
    // with a table called Customers
    // Put this code in the form's Load event or its constructor.
    customersDataSet1.get_Tables().get_Item("Customers").add_ColumnChanging(
       new DataColumnChangeEventHandler(this.Customers_ColumnChanging));
    

参照

参照

DataGrid

ColumnChanging

SetColumnError

その他の技術情報

DataGrid コントロール (Windows フォーム)