Compartir a través de


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)