DataTable Olaylarını İşleme

nesnesi, DataTable bir uygulama tarafından işlenebilen bir dizi olay sağlar. Aşağıdaki tabloda olaylar açıklanmaktadır DataTable .

Olay Açıklama
Initialized yöntemi DataTable çağrıldıktan sonra EndInit gerçekleşir. Bu olay öncelikli olarak tasarım zamanı senaryolarını desteklemeye yöneliktir.
ColumnChanged içinde bir değer başarıyla değiştirildikten DataColumnsonra gerçekleşir.
ColumnChanging için bir değer gönderildiğinde DataColumngerçekleşir.
RowChanged içindeki bir DataColumn değeri veya RowState değeri DataRowDataTable başarıyla değiştirildikten sonra gerçekleşir.
RowChanging içindeki bir değer veya RowStateDataRowDataTabledeğeri için bir DataColumn değişiklik gönderildiğinde gerçekleşir.
RowDeleted içindeki DataTable bir DataRow olarak Deletedişaretlendikten sonra gerçekleşir.
RowDeleting içinde DataTable bir DataRow olarak Deletedişaretlenmeden önce gerçekleşir.
TableCleared yöntemine ClearDataTable yapılan bir çağrının her DataRowbirini başarıyla temizledikten sonra gerçekleşir.
TableClearing Yöntemi çağrıldıktan sonra Clear ancak işlem başlamadan önce Clear gerçekleşir.
TableNewRow yöntemine NewRowDataTableyapılan bir çağrıyla yeni DataRow bir oluşturulduktan sonra gerçekleşir.
Disposed olduğunda DataTableDisposedgerçekleşir. öğesinden MarshalByValueComponentdevralındı.

Not

Satır ekleyen veya silen işlemlerin çoğu ve ColumnChanging olaylarını ColumnChanged tetiklemiyor. Ancak yöntemiReadXml, okunan XML belgesi bir DiffGramolduğunda veya olarak ayarlanmadığı DiffGramAuto sürece XmlReadMode ve ColumnChanging olaylarını tetiklerColumnChanged.

Uyarı

Veri bozulması, olayın oluşturulduğu bir DataSetRowChanged veride değişiklik yapılırsa oluşabilir. Bu tür veri bozulması oluşursa hiçbir özel durum tetiklenmez.

Constraints özelliği bir ConstraintCollection örneği barındırıyor. ConstraintCollection sınıfı bir CollectionChanged olayı kullanıma sunar. Kısıtlama eklendiğinde, değiştirildiğinde veya öğesinden ConstraintCollectionkaldırıldığında bu olay tetikleniyor.

Columns özelliği bir DataColumnCollection örneği barındırıyor. DataColumnCollection sınıfı bir CollectionChanged olayı kullanıma sunar. Bu olay, öğesine DataColumn eklendiğinde, değiştirildiğinde veya öğesinden DataColumnCollectionkaldırıldığında tetikler. Olayın tetiklesine neden olan değişiklikler, bir sütunun adı, türü, ifadesi veya sıralı konumunda yapılan değişiklikleri içerir.

Tables özelliğinin DataSet bir örneği vardırDataTableCollection. DataTableCollection sınıfı hem a CollectionChanged hem de bir CollectionChanging olayı kullanıma sunar. bu olaylar, öğesine DataTable eklendiğinde veya öğesinden kaldırıldığında tetikleniyor DataSet.

'de DataRows yapılan değişiklikler, ilişkili DataViewbir için olayları da tetikleyebilir. sınıfı, DataView bir ListChanged değer değiştiğinde veya görünümün oluşturma veya sıralama düzeni değiştiğinde tetikleyen bir DataColumn olayı kullanıma sunar. sınıfı, DataRowView ilişkili DataColumn bir PropertyChanged değer değiştiğinde tetikleyen bir olayı kullanıma sunar.

İşlem Dizisi

Bir eklendiğinde, değiştirildiğinde veya silindiğinde DataRow gerçekleşen işlemlerin sırası aşağıdadır:

  1. Önerilen kaydı oluşturun ve değişiklikleri uygulayın.

  2. İfade olmayan sütunlar için kısıtlamaları denetleyin.

  3. veya RowDeleting olaylarını RowChanging uygun şekilde yükseltin.

  4. Önerilen kaydı geçerli kayıt olarak ayarlayın.

  5. İlişkili dizinleri güncelleştirin.

  6. İlişkili nesneler için olayları ve PropertyChanged ilişkili DataView nesneler için DataRowView olayları tetiklerListChanged.

  7. Tüm ifade sütunlarını değerlendirin, ancak bu sütunlardaki kısıtlamaları denetlemeyi geciktirin.

  8. İfade sütunu değerlendirmelerinden etkilenen ilişkili DataView nesneler için olaylar ve PropertyChanged ilişkili DataRowView nesneler için olaylar tetiklemeListChanged.

  9. RowDeleted Veya olayları uygun şekilde yükseltinRowChanged.

  10. İfade sütunlarında kısıtlamaları denetleyin.

Not

İfade sütunlarına yapılan değişiklikler hiçbir zaman olay oluşturmaz DataTable . İfade sütunlarına yapılan değişiklikler yalnızca ve DataRowView olaylarını oluştururDataView. İfade sütunlarının diğer birden çok sütuna bağımlılıkları olabilir ve tek DataRow bir işlem sırasında birden çok kez değerlendirilebilir. Her ifade değerlendirmesi olayları tetikler ve ifade sütunları etkilendiğinde tek DataRow bir işlem birden çok ListChanged ve PropertyChanged olay oluşturabilir ve büyük olasılıkla aynı ifade sütunu için birden çok olay da dahil olabilir.

Uyarı

Olay işleyicisi içinde bir NullReferenceException oluşturmayın RowChanged . NullReferenceException bir olayı DataTableiçinde RowChanged bir oluşturulursa, o zaman DataTable bozulur.

Örnek

Aşağıdaki örnekte , , , RowChanging, RowDeleted, RowDeleting, ColumnChanged, ColumnChanging, TableNewRow, TableClearedve TableClearing olayları için RowChangedolay işleyicilerinin nasıl oluşturulacağı gösterilmektedir. Her olay işleyicisi, tetiklendiğinde konsol penceresinde çıkışı görüntüler.

static void DataTableEvents()
{
    DataTable table = new("Customers");
    // Add two columns, id and name.
    table.Columns.Add("id", typeof(int));
    table.Columns.Add("name", typeof(string));

    // Set the primary key.
    table.Columns["id"].Unique = true;
    table.PrimaryKey = new DataColumn[] { table.Columns["id"] };

    // Add a RowChanged event handler.
    table.RowChanged += Row_Changed;

    // Add a RowChanging event handler.
    table.RowChanging += Row_Changing;

    // Add a RowDeleted event handler.
    table.RowDeleted += Row_Deleted;

    // Add a RowDeleting event handler.
    table.RowDeleting += Row_Deleting;

    // Add a ColumnChanged event handler.
    table.ColumnChanged +=
        Column_Changed;

    // Add a ColumnChanging event handler.
    table.ColumnChanging +=
        Column_Changing;

    // Add a TableNewRow event handler.
    table.TableNewRow +=
        Table_NewRow;

    // Add a TableCleared event handler.
    table.TableCleared +=
        Table_Cleared;

    // Add a TableClearing event handler.
    table.TableClearing +=
        Table_Clearing;

    // Add a customer.
    DataRow row = table.NewRow();
    row["id"] = 1;
    row["name"] = "Customer1";
    table.Rows.Add(row);

    table.AcceptChanges();

    // Change the customer name.
    table.Rows[0]["name"] = "ChangedCustomer1";

    // Delete the row.
    table.Rows[0].Delete();

    // Clear the table.
    table.Clear();
}

static void Row_Changed(object sender, DataRowChangeEventArgs e) =>
    Console.WriteLine("Row_Changed Event: name={0}; action={1}",
        e.Row["name"], e.Action);

static void Row_Changing(object sender, DataRowChangeEventArgs e) =>
    Console.WriteLine("Row_Changing Event: name={0}; action={1}",
        e.Row["name"], e.Action);

static void Row_Deleted(object sender, DataRowChangeEventArgs e) =>
    Console.WriteLine("Row_Deleted Event: name={0}; action={1}",
        e.Row["name", DataRowVersion.Original], e.Action);

static void Row_Deleting(object sender,
DataRowChangeEventArgs e) =>
    Console.WriteLine("Row_Deleting Event: name={0}; action={1}",
        e.Row["name"], e.Action);

static void Column_Changed(object sender, DataColumnChangeEventArgs e) =>
    Console.WriteLine("Column_Changed Event: ColumnName={0}; RowState={1}",
        e.Column.ColumnName, e.Row.RowState);

static void Column_Changing(object sender, DataColumnChangeEventArgs e) =>
    Console.WriteLine("Column_Changing Event: ColumnName={0}; RowState={1}",
        e.Column.ColumnName, e.Row.RowState);

static void Table_NewRow(object sender,
    DataTableNewRowEventArgs e) =>
    Console.WriteLine("Table_NewRow Event: RowState={0}",
        e.Row.RowState.ToString());

static void Table_Cleared(object sender, DataTableClearEventArgs e) =>
    Console.WriteLine("Table_Cleared Event: TableName={0}; Rows={1}",
        e.TableName, e.Table.Rows.Count.ToString());

static void Table_Clearing(object sender, DataTableClearEventArgs e) =>
    Console.WriteLine("Table_Clearing Event: TableName={0}; Rows={1}",
        e.TableName, e.Table.Rows.Count.ToString());
Private Sub DataTableEvents()

    Dim table As New DataTable("Customers")
    ' Add two columns, id and name.
    table.Columns.Add("id", Type.GetType("System.Int32"))
    table.Columns.Add("name", Type.GetType("System.String"))

    ' Set the primary key.
    table.Columns("id").Unique = True
    table.PrimaryKey = New DataColumn() {table.Columns("id")}

    ' Add a RowChanged event handler.
    AddHandler table.RowChanged, _
           New DataRowChangeEventHandler(AddressOf Row_Changed)

    ' Add a RowChanging event handler.
    AddHandler table.RowChanging, _
           New DataRowChangeEventHandler(AddressOf Row_Changing)

    ' Add a RowDeleted event handler.
    AddHandler table.RowDeleted, New _
           DataRowChangeEventHandler(AddressOf Row_Deleted)

    ' Add a RowDeleting event handler.
    AddHandler table.RowDeleting, New _
           DataRowChangeEventHandler(AddressOf Row_Deleting)

    ' Add a ColumnChanged event handler.
    AddHandler table.ColumnChanged, _
           New DataColumnChangeEventHandler(AddressOf Column_Changed)

    ' Add a ColumnChanging event handler for the table.
    AddHandler table.ColumnChanging, New _
           DataColumnChangeEventHandler(AddressOf Column_Changing)

    ' Add a TableNewRow event handler.
    AddHandler table.TableNewRow, New _
           DataTableNewRowEventHandler(AddressOf Table_NewRow)

    ' Add a TableCleared event handler.
    AddHandler table.TableCleared, New _
           DataTableClearEventHandler(AddressOf Table_Cleared)

    ' Add a TableClearing event handler.
    AddHandler table.TableClearing, New _
           DataTableClearEventHandler(AddressOf Table_Clearing)

    ' Add a customer.
    Dim row As DataRow = table.NewRow()
    row("id") = 1
    row("name") = "Customer1"
    table.Rows.Add(row)

    table.AcceptChanges()

    ' Change the customer name.
    table.Rows(0).Item("name") = "ChangedCustomer1"

    ' Delete the row.
    table.Rows(0).Delete()

    ' Clear the table.
    table.Clear()
End Sub


Private Sub Row_Changed(ByVal sender As Object, _
    ByVal e As DataRowChangeEventArgs)
    Console.WriteLine("Row_Changed Event: name={0}; action={1}", _
     e.Row("name"), e.Action)
End Sub

Private Sub Row_Changing(ByVal sender As Object, _
    ByVal e As DataRowChangeEventArgs)
    Console.WriteLine("Row_Changing Event: name={0}; action={1}", _
     e.Row("name"), e.Action)
End Sub

Private Sub Row_Deleted(ByVal sender As Object, _
    ByVal e As DataRowChangeEventArgs)
    Console.WriteLine("Row_Deleted Event: name={0}; action={1}", _
     e.Row("name", DataRowVersion.Original), e.Action)
End Sub

Private Sub Row_Deleting(ByVal sender As Object, _
    ByVal e As DataRowChangeEventArgs)
    Console.WriteLine("Row_Deleting Event: name={0}; action={1}", _
       e.Row("name"), e.Action)
End Sub

Private Sub Column_Changed(ByVal sender As Object, _
    ByVal e As DataColumnChangeEventArgs)
    Console.WriteLine("Column_Changed Event: ColumnName={0}; RowState={1}", _
       e.Column.ColumnName, e.Row.RowState)
End Sub

Private Sub Column_Changing(ByVal sender As Object, _
    ByVal e As DataColumnChangeEventArgs)
    Console.WriteLine("Column_Changing Event: ColumnName={0}; RowState={1}", _
       e.Column.ColumnName, e.Row.RowState)
End Sub

Private Sub Table_NewRow(ByVal sender As Object, _
ByVal e As DataTableNewRowEventArgs)
    Console.WriteLine("Table_NewRow Event: RowState={0}", _
       e.Row.RowState.ToString())
End Sub

Private Sub Table_Cleared(ByVal sender As Object, _
    ByVal e As DataTableClearEventArgs)
    Console.WriteLine("Table_Cleared Event: TableName={0}; Rows={1}", _
       e.TableName, e.Table.Rows.Count.ToString())
End Sub

Private Sub Table_Clearing(ByVal sender As Object, _
    ByVal e As DataTableClearEventArgs)
    Console.WriteLine("Table_Clearing Event: TableName={0}; Rows={1}", _
       e.TableName, e.Table.Rows.Count.ToString())
End Sub

Ayrıca bkz.