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