Úpravy datových tabulek

Když provedete změny hodnot sloupců v objektu DataRow, změny se okamžitě umístí do aktuálního stavu řádku. Potom DataRowState je nastavena na Hodnotu Změněno a změny jsou přijaty nebo odmítnuty pomocí AcceptChanges nebo RejectChanges metody DataRow. DataRow také poskytuje tři metody, které můžete použít k pozastavení stavu řádku při jeho úpravách. Tyto metody jsou BeginEdit, EndEdita CancelEdit.

Při úpravě hodnot sloupců v DataRow přímo, DataRow spravuje hodnoty sloupce pomocí Aktuální, Výchozí a Původní verze řádků. Kromě těchto verzí řádků používají metody BeginEdit, EndEdit a CancelEdit čtvrtou verzi řádku: Navrhované. Další informace overzích

Verze navrhovaného řádku existuje během operace úprav, která začíná voláním BeginEdit a končí buď pomocí EndEdit nebo CancelEdit, nebo volání AcceptChanges nebo RejectChanges.

Během operace úprav můžete použít logiku ověřování u jednotlivých sloupců vyhodnocením Navrhované hodnoty v události ColumnChanged tabulky DataTable. Událost ColumnChanged obsahuje DataColumnChangeEventArgs , které uchovávají odkaz na sloupec, který se mění, a na Navrhované hodnoty. Po vyhodnocení navrhované hodnoty ji můžete upravit nebo zrušit. Po ukončení úpravy se řádek přesune mimo navrhovaný stav.

Úpravy můžete potvrdit voláním EndEdit nebo je můžete zrušit voláním CancelEdit. Všimněte si, že zatímco EndEdit potvrdí provedené úpravy, datová sada změny ve skutečnosti nepřijímá, dokud se nevolá AcceptChanges. Všimněte si také, že pokud zavoláte AcceptChanges před ukončením úpravy endEdit nebo CancelEdit, úpravy jsou ukončeny a navrhované hodnoty řádků jsou přijaty pro aktuální i původní verze řádku. Volání RejectChanges stejným způsobem ukončí úpravy a zahodí aktuální a navrhované verze řádků. Volání EndEdit nebo CancelEdit po volání AcceptChanges nebo RejectChanges nemá žádný vliv, protože úpravy již skončily.

Následující příklad ukazuje, jak použít BeginEdit s EndEdit a CancelEdit. Příklad také zkontroluje Navrhovaná Hodnota v ColumnChanged události a rozhodne, zda chcete zrušit úpravu.

Dim workTable As DataTable = New DataTable  
workTable.Columns.Add("LastName", Type.GetType("System.String"))  
  
AddHandler workTable.ColumnChanged, _  
  New DataColumnChangeEventHandler(AddressOf OnColumnChanged)  
  
Dim workRow As DataRow = workTable.NewRow()  
workRow(0) = "Smith"  
workTable.Rows.Add(workRow)  
  
workRow.BeginEdit()  
' Causes the ColumnChanged event to write a message and cancel the edit.  
workRow(0) = ""
workRow.EndEdit()  
  
' Displays "Smith, New".  
Console.WriteLine("{0}, {1}", workRow(0), workRow.RowState)  
  
Private Shared Sub OnColumnChanged( _  
  sender As Object, args As DataColumnChangeEventArgs)  
  If args.Column.ColumnName = "LastName" Then  
    If args.ProposedValue.ToString() = "" Then  
      Console.WriteLine("Last Name cannot be blank.  Edit canceled.")  
      args.Row.CancelEdit()  
    End If  
  End If  
End Sub  
DataTable workTable  = new DataTable();  
workTable.Columns.Add("LastName", typeof(String));  
  
workTable.ColumnChanged +=
  new DataColumnChangeEventHandler(OnColumnChanged);  
  
DataRow workRow = workTable.NewRow();  
workRow[0] = "Smith";  
workTable.Rows.Add(workRow);  
  
workRow.BeginEdit();  
// Causes the ColumnChanged event to write a message and cancel the edit.  
workRow[0] = "";
workRow.EndEdit();  
  
// Displays "Smith, New".  
Console.WriteLine("{0}, {1}", workRow[0], workRow.RowState);
  
protected static void OnColumnChanged(  
  Object sender, DataColumnChangeEventArgs args)  
{  
  if (args.Column.ColumnName == "LastName")  
    if (args.ProposedValue.ToString() == "")  
    {  
      Console.WriteLine("Last Name cannot be blank. Edit canceled.");  
      args.Row.CancelEdit();  
    }  
}  

Viz také