Aracılığıyla paylaş


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 AcceptChanges veya RejectChanges yöntemleri kullanılarak kabul edilir veya reddedilir. ayrıca DataRow , düzenlerken satırın durumunu askıya almak için kullanabileceğiniz üç yöntem sağlar. Bu yöntemler BeginEdit, EndEdit ve CancelEdit'dir.

Bir içindeki DataRow sütun değerlerini doğrudan değiştirdiğinizde, DataRow, Varsayılan ve Original satır sürümlerini kullanarak sütun değerlerini 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.

Düzenleme işlemine BeginEdit çağrısı ile başlayan satır Proposed sürümü, EndEdit ya da CancelEdit kullanılarak veya AcceptChanges ya da RejectChanges çağrısı ile biten işlem süresince mevcut olur.

Düzenleme işlemi sırasında ColumnChanged olayında DataTable'ı değerlendirerek tek tek sütunlara doğrulama mantığı uygulayabilirsiniz. Olay, değişen sütuna ve ProposedValue'a olan referansı tutar. Önerilen değeri değerlendirdikten sonra değiştirebilir veya düzenlemeyi iptal edebilirsiniz. Düzenleme sona erdiğinde, satır Proposed durumundan çıkartılır.

EndEdit'i arayarak düzenlemeleri onaylayabilir veya CancelEdit'i çağırarak iptal edebilirsiniz. Düzenlemelerinizi onaylasa da EndEdit , DataSet çağrılana kadar AcceptChanges değişiklikleri gerçekten kabul etmediğini unutmayın. Ayrıca, AcceptChanges öğesini EndEdit veya CancelEdit ile düzenlemeyi sona erdirmeden önce çağırırsanız, düzenleme sona erer ve Proposed satır değerleri hem Current hem de Original satır sürümleri için kabul edilir. Aynı şekilde, RejectChanges çağrısı düzenlemeyi sona erdirir ve CurrentProposed satır sürümlerini atar. AcceptChanges veya RejectChanges çağrıldıktan sonra EndEdit veya CancelEdit çağırmanın hiçbir etkisi yoktur çünkü düzenleme zaten sona ermiştir.

Aşağıdaki örnek, BeginEdit ve EndEdit ile CancelEdit nasıl kullanılacağını göstermektedir. Örnek ayrıca ColumnChanged olayında ProposedValue 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 bakınız