Freigeben über


Zeilenfehlerinformationen

Um zu vermeiden, dass beim Bearbeiten von Werten in einem DataTable auf Zeilenfehler reagiert werden muss, können Sie der Zeile die Fehlerinformationen zur späteren Verwendung hinzufügen. Das DataRow Objekt stellt eine RowError Eigenschaft für jede Zeile für diesen Zweck bereit. Daten zur RowError-Eigenschaft eines DataRow hinzuzufügen, setzt die HasErrors-Eigenschaft des DataRow auf true. Wenn der DataRow Teil einer DataTable ist und DataRow.HasErrorstrue ist, ist die DataTable.HasErrors-Eigenschaft ebenfalls wahr. Dies gilt auch für das DataSet, zu dem die DataTable gehört. Beim Testen von Fehlern können Sie die HasErrors Eigenschaft überprüfen, um festzustellen, ob Fehlerinformationen zu irgendeiner Zeile hinzugefügt wurden. Wenn HasErrorstrue ist, können Sie die GetErrors-Methode der DataTable verwenden, um nur die fehlerhaften Zeilen zurückzugeben und zu 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
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