Share via


Informace o chybě na řá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í dat do vlastnosti RowError objektu DataRow nastaví HasErrors vlastnost DataRow na hodnotu true. Pokud DataRow je součástí DataTable a DataRow.HasErrors je true, DataTable.HasErrors vlastnost je také true. To platí i pro sadu dat, do které patří datová tabulka. Při testování chyb můžete zkontrolovat vlastnost HasErrors a zjistit, jestli byly informace o chybě přidány do libovolných řádků. Pokud je chyba HasErrors pravdivá, můžete použít GetErrors metodu DataTable k 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é