Agregar y leer información de error de fila
Para no tener que actuar cada vez que se produce un error de fila mientras se están editando los valores de una DataTable, se puede agregar la información de error a la fila, para usarla posteriormente. Para admitir esta capacidad, el objeto DataRow proporciona la 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 usar 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
[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.";
}
Vea también
Manipular datos en DataTable | DataColumnCollection (Clase) | DataRow (Clase) | DataTable (Clase)