Información de errores de fila
Actualización: November 2007
Para evitar responder a errores de fila durante la edición de valores en una DataTable, puede agregar la información de error a la fila para utilizarla más adelante. Para ello, el objeto DataRow proporciona una propiedad RowError en cada fila. Si se agregan datos a la propiedad RowError de una DataRow, la propiedad HasErrors de la DataRow se establece en true. Si la DataRow forma parte de una DataTable y DataRow.HasErrors es true, la propiedad DataTable.HasErrors es también true. Esto afecta también al DataSet al que pertenece la DataTable. Cuando se hagan pruebas para detectar errores, se puede comprobar la propiedad HasErrors para determinar si se ha agregado información de error a alguna fila. Si HasErrors es true, se puede utilizar el método GetErrors de la DataTable para obtener y examinar sólo las filas con errores, como se muestra en el ejemplo siguiente.
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.";
}