行のエラー情報の追加と読み取り
DataTable の値を編集しているときに、行エラーが発生するたびにエラーに対処する必要をなくすために、エラー情報を行に追加してこの情報を後から使用できます。DataRow オブジェクトは、この機能をサポートするために、行ごとに RowError プロパティを提供します。DataRow の RowError プロパティにデータを追加すると、その DataRow の HasErrors プロパティが true としてマークされます。DataRow が DataTable の一部であり、DataRow.HasErrors が true である場合は、DataTable.HasErrors プロパティも true になります。この原則は、DataTable が属している DataSet に対しても適用されます。エラーの有無を確認する場合は、HasErrors プロパティをチェックして、エラー情報が追加された行があるかどうかを判断できます。HasErrors が true の場合に DataTable の GetErrors メソッドを使用して、エラーのある行だけを返してチェックする例を次に示します。
Dim workTable As DataTable = New DataTable("Customers")
workTable.Columns.Add("CustID", Type.GetType("System.Int32"))
workTable.Columns.Add("Total", Type.GetType("System.Double"))
AddHandler workTable.RowChanged, New DataRowChangeEventHandler(AddressOf OnRowChanged)
Dim I As Int32
For I = 0 To 10
workTable.Rows.Add(New Object() {I, I*100})
Next
If workTable.HasErrors Then
Console.WriteLine("Errors In Table " & workTable.TableName)
Dim myRow As DataRow
For Each myRow In workTable.GetErrors()
Console.WriteLine("CustID = " & myRow("CustID").ToString())
Console.WriteLine(" Error = " & myRow.RowError & vbCrLf)
Next
End If
Private Shared Sub OnRowChanged(sender As Object, args As DataRowChangeEventArgs)
' Check for zero values.
If CDbl(args.Row("Total")) = 0 Then args.Row.RowError = "Total cannot be 0."
End Sub
[C#]
DataTable workTable = new DataTable("Customers");
workTable.Columns.Add("CustID", typeof(Int32));
workTable.Columns.Add("Total", typeof(Double));
workTable.RowChanged += new DataRowChangeEventHandler(OnRowChanged);
for (int i = 0; i < 10; i++)
workTable.Rows.Add(new Object[] {i, i*100});
if (workTable.HasErrors)
{
Console.WriteLine("Errors In Table " + workTable.TableName);
foreach (DataRow myRow in workTable.GetErrors())
{
Console.WriteLine("CustID = " + myRow["CustID"]);
Console.WriteLine(" Error = " + myRow.RowError + "\n");
}
}
protected static void OnRowChanged(Object sender, DataRowChangeEventArgs args)
{
// Check for zero values.
if (args.Row["Total"].Equals(0D))
args.Row.RowError = "Total cannot be 0.";
}
参照
DataTable 内のデータの操作 | DataColumnCollection クラス | DataRow クラス | DataTable クラス