DataTable Düzenlemeleri

içindeki DataRowsütun değerlerinde değişiklik yaptığınızda, değişiklikler hemen satırın geçerli durumuna yerleştirilir. DataRowState daha sonra Değiştirildi olarak ayarlanır ve değişiklikler DataRow'un veya yöntemleri kullanılarak AcceptChanges kabul edilir veya RejectChanges reddedilir. DataRow, satırı düzenlerken durumunu askıya almak için kullanabileceğiniz üç yöntem de sağlar. Bu yöntemler , EndEditve CancelEdityöntemleridirBeginEdit.

DataRow'daki sütun değerlerini doğrudan değiştirdiğinizde, DataRow sütun değerlerini Geçerli, Varsayılan ve Özgün satır sürümlerini kullanarak yönetir. Bu satır sürümlerine ek olarak BeginEdit, EndEdit ve CancelEdit yöntemleri dördüncü satır sürümünü kullanır: Önerilen. Satır sürümleri hakkında daha fazla bilgi için bkz . Satır Durumları ve Satır Sürümleri.

Önerilen satır sürümü, BeginEdit çağrısıyla başlayan ve EndEdit veya CancelEdit kullanılarak ya da AcceptChanges veya RejectChanges çağrılarak biten bir düzenleme işlemi sırasında bulunur.

Düzenleme işlemi sırasında, DataTable'ın ColumnChanged olayında ProposedValue değerini değerlendirerek tek tek sütunlara doğrulama mantığı uygulayabilirsiniz. ColumnChanged olayı, değişen sütuna ve ProposedValue'ya başvuruyu tutan DataColumnChangeEventArgs'i tutar. Önerilen değeri değerlendirdikten sonra değiştirebilir veya düzenlemeyi iptal edebilirsiniz. Düzenleme sona erdiğinde, satır Önerilen durumundan çıkar.

EndEdit'i arayarak düzenlemeleri onaylayabilir veya CancelEdit'i çağırarak iptal edebilirsiniz. EndEdit düzenlemelerinizi onaylasa da, AcceptChanges çağrılana kadar DataSet'in değişiklikleri gerçekten kabul etmediğini unutmayın. Ayrıca, EndEdit veya CancelEdit ile düzenlemeyi sonlandırmadan önce AcceptChanges'i çağırırsanız, düzenlemenin sona erdiğini ve Hem Geçerli hem de Özgün satır sürümleri için Önerilen satır değerlerinin kabul edildiğine dikkat edin. Aynı şekilde RejectChanges çağrısı düzenlemeyi sona erdirir ve Geçerli ve Önerilen satır sürümlerini atar. Düzenleme zaten sona erdiğinden AcceptChanges veya RejectChanges çağrıldıktan sonra EndEdit veya CancelEdit çağrısının hiçbir etkisi olmaz.

Aşağıdaki örnekte EndEdit ve CancelEdit ile BeginEdit'in nasıl kullanılacağı gösterilmektedir. Örnek ayrıca ColumnChanged olayında ProposedValue değerini denetler ve düzenlemenin iptal edilip edilmeyeceğine karar verir.

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();  
    }  
}  

Ayrıca bkz.