2012-02-21 19 views
2

厳密に型指定されたDataTableで自動生成されたメソッドを使用してプログラムで新しい行が追加されたとき、自分のフィールドのmaxlengを検証するカスタム検証を、新しい行が追加されたときのDataTableの検証

私のクライアント(C#の)

DAL.ImportMarcDataSet.PublicationsRow newRow = importMarcDataSet.Publications.NewPublicationsRow(); 

newRow.CallNumber ="QA76.76.A65"; 
newRow.Title = "Programming WCF services"; 
newRow.ISBN = "0596526997"; 

importMarcDataSet.Publications.AddPublicationsRow(newRow); 

私のデータアクセス層(VB)

Partial Class ImportMarcDataSet 
    Partial Class PublicationsDataTable 
     Private Sub CallNumberMaxLength(ByVal pRow As PublicationsRow) 
      If pRow.CallNumber.Length > 25 Then 
       pRow.SetColumnError("CallNumber", "The value entered is over the maximum length") 
      Else 
       pRow.SetColumnError("CallNumber", "") 
      End If 
     End Sub 
'this event is ok when user made changes to the CallNumber column of the current row 
     Private Sub PublicationsDataTable_ColumnChanged(ByVal sender As Object, ByVal e As System.Data.DataColumnChangeEventArgs) Handles Me.ColumnChanged 
      If e.Column Is Me.CallNumberColumn Then 
       CallNumberMaxLength(e.Row) 
      End If 
     End Sub 
    End Class 
End Class 

答えて

1

あなたがテーブルのRowChangingイベントを処理することができます。 DataRowChangeEventArgs.ActionAddに等しい場合、または変更操作の1つが検証を行います。

私はこのことをして以来、ずっと時間がかかりましたが、DataRowChangeEventArgs.RowCancelEditを呼び出すことで、必要に応じて編集をキャンセルすることもできます。ドキュメントを確認してください。 DataTableイベントの処理(ADO.NET)http://msdn.microsoft.com/en-us/library/w9y9a401.aspxを参照してください。

TableNewRowは、NewRowが呼び出されたときにのみ発生するため、役に立たないでしょう。

+0

ありがとうございました。 – sovantha

+0

RowChangingイベントでCancelEdit()を呼び出すと例外がスローされます。[リンク](http://msdn.microsoft.com/en-us/library/system.data.datarow.canceledit.aspx)を参照してください。例外を強制的に取り消すには、RowChangingイベントで例外をスローする必要があります。他の誰かがこの回答に助けを求める場合に、私がそれを付け加えると思っただけです。 – Hagelt18

関連する問題