Ajout et lecture des informations sur les erreurs de ligne

Pour éviter d'avoir à répondre chaque fois qu'une erreur de ligne se produit pendant que vous modifiez des valeurs dans un DataTable, vous pouvez ajouter les informations sur les erreurs à la ligne pour une utilisation ultérieure. L'objet DataRow prend en charge cette fonctionnalité en fournissant une propriété RowError dans chaque ligne. L'ajout de données à la propriété RowError d'un DataRow attribue la valeur true à la propriété HasErrors du DataRow. Si le DataRow fait partie d'un DataTable et si DataRow.HasErrors a la valeur true, la propriété DataTable.HasErrors a également la valeur true. Ceci s'applique également au DataSet auquel appartient le DataTable. Lorsque vous testez les erreurs, vous pouvez vérifier la propriété HasErrors pour déterminer si des informations sur les erreurs ont été ajoutées à des lignes. Si HasErrors a la valeur true, vous pouvez utiliser la méthode GetErrors du DataTable pour ne retourner et n'examiner que les lignes ayant des erreurs, comme le montre l'exemple suivant.

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.";
}

Voir aussi

Manipulation de données dans un DataTable | DataColumnCollection, classe | DataRow, classe | DataTable, classe