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. Wenn der RowError-Eigenschaft eines DataRow-Sets Daten hinzugefügt werden, wird die HasErrors-Eigenschaft der DataRow auf true festgelegt. Wenn die DataRow Teil einer DataTable ist, und DataRow.HasErrors den Wert true aufweist, wird für die DataTable.HasErrors-Eigenschaft ebenfalls der Wert true festgelegt. Dies gilt auch für das DataSet, zu dem die DataTable gehört. Bei einer Fehlerprüfung können Sie mithilfe der HasErrors-Eigenschaft ermitteln, ob einer Zeile 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. Dies wird im folgenden Beispiel veranschaulicht.
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.";
}