Freigeben über


Hinzufügen und Lesen von Informationen zu Zeilenfehlern

Um nicht jedes Mal auf einen Zeilenfehler reagieren zu müssen, während Sie Werte in einer DataTable bearbeiten, können Sie die Fehlerinformationen zur späteren Verwendung der Zeile hinzufügen. Das DataRow-Objekt unterstützt diese Funktion, indem es eine RowError-Eigenschaft für jede Zeile bereitstellt. Durch Hinzufügen von Daten zur RowError-Eigenschaft einer DataRow wird die HasErrors-Eigenschaft der DataRow auf true gesetzt. Wenn die DataRow Teil einer DataTable ist und DataRow.HasErrors den Wert true hat, ist die DataTable.HasErrors-Eigenschaft ebenfalls true. Dies gilt auch für das DataSet, zu dem die DataTable gehört. Beim Testen auf Fehler können Sie die HasErrors-Eigenschaft überprüfen, um festzustellen, ob in irgendwelche Zeilen Fehlerinformationen eingefügt wurden. Wenn HasErrors den Wert true hat, können Sie mit Hilfe der GetErrors-Methode der DataTable nur die Zeilen mit Fehlern zurückgeben und untersuchen, 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
[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.";
}

Siehe auch

Bearbeiten von Daten in einer Datentabelle | DataColumnCollection-Klasse | DataRow-Klasse | DataTable-Klasse