行错误信息
为了避免在编辑 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
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.";
}