Sdílet prostřednictvím


Informace o chybě v řádku

Pokud se chcete vyhnout nutnosti reagovat na chyby řádků při úpravách hodnot v objektu DataTable, můžete do řádku přidat informace o chybě pro pozdější použití. Objekt DataRow poskytuje RowError vlastnost na každém řádku pro tento účel. Přidáním dat do vlastnosti RowError objektu DataRow se nastaví vlastnost HasErrors objektu DataRow na hodnotu true. DataRow Pokud je součástí DataTable a DataRow.HasErrors je true, DataTable.HasErrors vlastnost je také true. To platí i pro DataSet, ke kterému DataTable patří. Při testování chyb můžete zkontrolovat HasErrors vlastnost a zjistit, jestli byly informace o chybách přidány do libovolného řádku. Pokud HasErrors je pravda, můžete použít metodu GetErrorsDataTable pro vrácení a prozkoumání pouze řádků s chybami, jak je znázorněno v následujícím příkladu.

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

Viz také