Udostępnij przez


Informacje o błędach w wierszu

Aby uniknąć konieczności reagowania na błędy wierszy podczas edytowania wartości w obiekcie DataTable, możesz dodać informacje o błędzie do wiersza do późniejszego użycia. Obiekt DataRow udostępnia właściwość RowError w każdym wierszu do tego celu. Dodawanie danych do właściwości RowError elementu DataRow ustawia właściwość HasErrors w DataRow na true. DataRow Jeśli element jest częścią tabeli DataTable, a właściwość DataRow.HasErrors ma wartość true, właściwość DataTable.HasErrors również ma wartość true. To również dotyczy DataSet, do którego należy DataTable. Podczas testowania pod kątem błędów można sprawdzić właściwość HasErrors, aby określić, czy informacje o błędzie zostały dodane do dowolnych wierszy. Jeśli HasErrors to prawda, możesz użyć metody GetErrorsDataTable, aby zwrócić i zbadać tylko wiersze z błędami, jak pokazano w poniższym przykładzie.

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

Zobacz także