方法 : Windows フォームの DataGrid コントロールを使用して入力データを検証する
更新 : 2007 年 11 月
メモ : |
---|
DataGridView コントロールは、DataGrid コントロールに代わると共に追加の機能を提供します。ただし、DataGrid コントロールは、下位互換性を保つ目的および将来使用する目的で保持されます。詳細については、「Windows フォームの DataGridView コントロールと DataGrid コントロールの違いについて」を参照してください。 |
Windows フォームの DataGrid コントロールで使用できる入力データの検証には 2 種類の方法があります。ユーザーが適切でないデータ型 (たとえば整数型のセルに文字列) を入力した場合、その入力された無効な値は既存の有効な値に置き換えられます。このような入力データの検証は自動的に行われ、カスタマイズはできません。
もう一方の入力データの検証は、不適切なデータをすべて拒否する場合に使用できます。たとえば 1 以上の値が必要なフィールドに 0 を入力しようとする場合や、適切でない文字列を入力しようとする場合にそのデータを拒否します。ColumnChanging イベントまたは RowChanging イベントに対してイベント ハンドラを記述することにより、データセット内で実施できます。次に示す例では、ColumnChanging イベントを使用しています。"Product" 列では特に不適切な値が許可されないためです。RowChanging イベントを使用すると、"End Date" 列の値が同一行の "Start Date" 列の値より後であることを確認できます。
ユーザー入力データを検証するには
適切なテーブルに対して 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); } } }
イベントにイベント ハンドラを接続します。
フォームの 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));