Informations sur l'erreur 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 objet DataTable, vous pouvez ajouter les informations d'erreur à la ligne pour une utilisation ultérieure. L'objet DataRow fournit une propriété RowError sur chaque ligne à cette fin. L’ajout de données à la propriété RowError d’un DataRow définit la propriété HasErrors du DataRow sur true. Si le DataRow fait partie d’un DataTableet que la propriété DataRow.HasErrors est définie sur true, la propriété DataTable.HasErrors est également définie sur true. Cela 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 relatives aux erreurs ont été ajoutées à des lignes. Si HasErrors est défini sur true, vous pouvez utiliser la méthode GetErrors du DataTable pour ne renvoyer et n’examiner que les lignes comportant des erreurs, comme illustré dans 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
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.";
}