Zeilenfehlerinformationen

Um nicht jedes Mal auf einen Zeilenfehler reagieren zu müssen, während Sie Werte in einer DataTable bearbeiten, können Sie der Zeile die Fehlerinformationen zur späteren Verwendung der Zeile hinzufügen. Das DataRow-Objekt stellt zu diesem Zweck für jede Zeile eine RowError-Eigenschaft bereit. Durch Hinzufügen von Daten zur RowError-Eigenschaft einer DataRow wird die HasErrors-Eigenschaft der DataRow auf true festgelegt. Wenn die DataRow Teil einer DataTable ist, und DataRow.HasErrors auf true festgelegt ist, ist die DataTable.HasErrors-Eigenschaft ebenfalls true. Dies gilt auch für das DataSet, zu dem die DataTable gehört. Bei der Fehlerprüfung können Sie mithilfe der HasErrors-Eigenschaft ermitteln, ob Zeilen Fehlerinformationen hinzugefügt wurden. Wenn HasErrors den Wert true aufweist, können Sie mit der GetErrors-Methode der DataTable nur Zeilen mit Fehlern abrufen und überprüfen, wie im folgenden Beispiel gezeigt.

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

Siehe auch