DataTable Olaylarını İşlemeHandling DataTable Events

DataTableNesnesi, bir uygulama tarafından işlenebilmesi için bir dizi olay sağlar.The DataTable object provides a series of events that can be processed by an application. Aşağıdaki tabloda olayları açıklanmaktadır DataTable .The following table describes DataTable events.

OlayEvent AçıklamaDescription
Initialized EndInitBir a yöntemi çağrıldıktan sonra gerçekleşir DataTable .Occurs after the EndInit method of a DataTable is called. Bu olay öncelikle tasarım zamanı senaryolarını desteklemeye yöneliktir.This event is intended primarily to support design-time scenarios.
ColumnChanged Bir değer bir içinde başarıyla değiştirildikten sonra gerçekleşir DataColumn .Occurs after a value has been successfully changed in a DataColumn.
ColumnChanging İçin bir değer gönderildiğinde gerçekleşir DataColumn .Occurs when a value has been submitted for a DataColumn.
RowChanged DataColumnİçindeki bir değer veya RowState öğesinin bir değeri DataRow DataTable başarıyla değiştirildikten sonra gerçekleşir.Occurs after a DataColumn value or the RowState of a DataRow in the DataTable has been changed successfully.
RowChanging DataColumnİçindeki bir değer veya bir değeri için bir değişiklik gönderildiğinde gerçekleşir RowState DataRow DataTable .Occurs when a change has been submitted for a DataColumn value or the RowState of a DataRow in the DataTable.
RowDeleted İçindeki bir öğesinden sonra DataRow DataTable olarak işaretlendiğinde gerçekleşir Deleted .Occurs after a DataRow in the DataTable has been marked as Deleted.
RowDeleting DataRowİçindeki bir, DataTable olarak işaretlenmeden önce gerçekleşir Deleted .Occurs before a DataRow in the DataTable is marked as Deleted.
TableCleared Bir yöntemine yapılan bir çağrı Clear DataTable başarıyla temizlendikten sonra gerçekleşir DataRow .Occurs after a call to the Clear method of the DataTable has successfully cleared every DataRow.
TableClearing ClearYöntem çağrıldıktan sonra, ancak işlem başlamadan önce oluşur Clear .Occurs after the Clear method is called but before the Clear operation begins.
TableNewRow DataRowMetodu için bir çağrısıyla yeni bir oluşturulduktan sonra gerçekleşir NewRow DataTable .Occurs after a new DataRow is created by a call to the NewRow method of the DataTable.
Disposed Olduğunda gerçekleşir DataTable Disposed .Occurs when the DataTable is Disposed. Devralındığı yer MarshalByValueComponent .Inherited from MarshalByValueComponent.

Not

Satırları ekleyen veya silen çoğu işlem ColumnChanged ve ColumnChanging olaylarını oluşturmaz.Most operations that add or delete rows do not raise the ColumnChanged and ColumnChanging events. Ancak, ReadXml ColumnChanged veya, ColumnChanging XmlReadMode DiffGram Auto okunan xml belgesi bir olduğunda veya DiffGram olarak ayarlanmadığı takdirde yöntemi, ve olayları yükseltir.However, the ReadXml method does raise ColumnChanged and ColumnChanging events, unless the XmlReadMode is set to DiffGram or is set to Auto when the XML document being read is a DiffGram.

Uyarı

Veriler, olayın oluşturulduğu bir içinde değiştirilirse veri bozulması meydana gelebilir DataSet RowChanged .Data corruption can occur if data is modified in a DataSet from which the RowChanged event is raised. Böyle bir veri bozulması oluşursa, hiçbir özel durum oluşturulmaz.No exception will be raised if such data corruption occurs.

ConstraintsÖzelliği bir örneği barındırır ConstraintCollection .The Constraints property holds a ConstraintCollection instance. ConstraintCollectionSınıfı bir olay gösterir CollectionChanged .The ConstraintCollection class exposes a CollectionChanged event. Bu olay, bir kısıtlama eklendiğinde, değiştirildiğinde veya öğesinden kaldırıldığında ateşlenir ConstraintCollection .This event fires when a constraint is added, modified, or removed from the ConstraintCollection.

ColumnsÖzelliği bir örneği barındırır DataColumnCollection .The Columns property holds a DataColumnCollection instance. DataColumnCollectionSınıfı bir olay gösterir CollectionChanged .The DataColumnCollection class exposes a CollectionChanged event. Bu olay DataColumn , ' den eklendiğinde, değiştirildiğinde veya kaldırıldığında ateşlenir DataColumnCollection .This event fires when a DataColumn is added, modified, or removed from the DataColumnCollection. Etkinliğin tetiklenmesine neden olan değişiklikler, bir sütunun ad, tür, ifade veya sıra konumunda değişiklikler içerir.Modifications that cause the event to fire include changes to the name, type, expression or ordinal position of a column.

TablesÖğesinin özelliği DataSet bir DataTableCollection örneği barındırır.The Tables property of a DataSet holds a DataTableCollection instance. DataTableCollectionSınıfı hem a hem de CollectionChanged bir CollectionChanging olay gösterir.The DataTableCollection class exposes both a CollectionChanged and a CollectionChanging event. Bu olaylar DataTable , öğesine eklendiğinde veya öğesine kaldırıldığında harekete geçolur DataSet .These events fire when a DataTable is added to or removed from the DataSet.

' De yapılan değişiklikler DataRows , ilişkili olan olayları da tetikleyebilir DataView .Changes to DataRows can also trigger events for an associated DataView. DataViewSınıfı, ListChanged bir DataColumn değer değiştiğinde veya görünümün kompozisyonu veya sıralama düzeni değiştiğinde tetiklenen bir olay gösterir.The DataView class exposes a ListChanged event that fires when a DataColumn value changes or when the composition or sort order of the view changes. DataRowViewSınıfı, ilişkili bir PropertyChanged değer değiştiğinde harekete gelen bir olay gösterir DataColumn .The DataRowView class exposes a PropertyChanged event that fires when an associated DataColumn value changes.

Işlem sırasıSequence of Operations

Eklendiğinde, değiştirildiğinde veya silindiğinde oluşan işlemlerin sırası aşağıda verilmiştir DataRow :Here is the sequence of operations that occur when a DataRow is added, modified, or deleted:

  1. Önerilen kaydı oluşturun ve tüm değişiklikleri uygulayın.Create the proposed record and apply any changes.

  2. İfade olmayan sütunlar için kısıtlamaları denetleyin.Check constraints for non-expression columns.

  3. RowChangingVeya RowDeleting olaylarını uygun şekilde yükseltin.Raise the RowChanging or RowDeleting events as applicable.

  4. Önerilen kaydı geçerli kayıt olarak ayarlayın.Set the proposed record to be the current record.

  5. İlişkili dizinleri güncelleştirin.Update any associated indexes.

  6. İlişkili nesneler ListChanged için ilişkili DataView nesneler ve olaylar için olaylar oluştur PropertyChanged DataRowView .Raise ListChanged events for associated DataView objects and PropertyChanged events for associated DataRowView objects.

  7. Tüm ifade sütunlarını değerlendirin, ancak bu sütunlardaki kısıtlamaların denetimini erteler.Evaluate all expression columns, but delay checking any constraints on these columns.

  8. ListChanged DataView PropertyChanged İfade sütunu değerlendirmelerinin etkilediği ilişkili nesneler için ilişkili nesneler ve olaylar için olaylar oluştur DataRowView .Raise ListChanged events for associated DataView objects and PropertyChanged events for associated DataRowView objects affected by the expression column evaluations.

  9. RowChangedVeya RowDeleted olaylarını uygun şekilde yükseltir.Raise RowChanged or RowDeleted events as applicable.

  10. İfade sütunlarındaki kısıtlamaları denetleyin.Check constraints on expression columns.

Not

İfade sütunlarındaki değişiklikler hiçbir şekilde DataTable olay oluşturmaz.Changes to expression columns never raise DataTable events. İfade sütunlarındaki değişiklikler yalnızca DataView ve olayları yükseltir DataRowView .Changes to expression columns only raise DataView and DataRowView events. İfade sütunlarının birden fazla sütuna bağımlılığı olabilir ve tek bir işlem sırasında birden çok kez değerlendirilebilirler DataRow .Expression columns can have dependencies on multiple other columns, and can be evaluated multiple times during a single DataRow operation. Her ifade değerlendirmesi olayları başlatır ve tek bir DataRow işlem, ListChanged PropertyChanged ifade sütunları etkileniyorsa, büyük olasılıkla aynı ifade sütunu için birden çok olay da dahil olmak üzere birden çok ve olay oluşturabilir.Each expression evaluation raises events, and a single DataRow operation can raise multiple ListChanged and PropertyChanged events when expression columns are affected, possibly including multiple events for the same expression column.

Uyarı

NullReferenceException RowChanged Olay işleyicisi içinde oluşturma.Do not throw a NullReferenceException within the RowChanged event handler. Bir a NullReferenceException olayı içinde oluşturulursa, RowChanged DataTable Bu durumda, DataTable bozuk olur.If a NullReferenceException is thrown within the RowChanged event of a DataTable, then the DataTable will be corrupted.

ÖrnekExample

Aşağıdaki örnek,,,,,,,, RowChanged RowChanging RowDeleted RowDeleting ColumnChanged ColumnChanging TableNewRow TableCleared ve TableClearing olayları için olay işleyicilerinin nasıl oluşturulacağını göstermektedir.The following example demonstrates how to create event handlers for the RowChanged, RowChanging, RowDeleted, RowDeleting, ColumnChanged, ColumnChanging, TableNewRow, TableCleared, and TableClearing events. Her olay işleyicisi, tetiklendiğinde konsol penceresinde çıktıyı görüntüler.Each event handler displays output in the console window when it is fired.

static void DataTableEvents()
{
    DataTable table = new DataTable("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 += new DataRowChangeEventHandler(Row_Changed);

    // Add a RowChanging event handler.
    table.RowChanging += new DataRowChangeEventHandler(Row_Changing);

    // Add a RowDeleted event handler.
    table.RowDeleted += new DataRowChangeEventHandler(Row_Deleted);

    // Add a RowDeleting event handler.
    table.RowDeleting += new DataRowChangeEventHandler(Row_Deleting);

    // Add a ColumnChanged event handler.
    table.ColumnChanged += new
        DataColumnChangeEventHandler(Column_Changed);

    // Add a ColumnChanging event handler.
    table.ColumnChanging += new
        DataColumnChangeEventHandler(Column_Changing);

    // Add a TableNewRow event handler.
    table.TableNewRow += new
        DataTableNewRowEventHandler(Table_NewRow);

    // Add a TableCleared event handler.
    table.TableCleared += new
        DataTableClearEventHandler(Table_Cleared);

    // Add a TableClearing event handler.
    table.TableClearing += new
        DataTableClearEventHandler(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();
}

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

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

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

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

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

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

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

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

private 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.See also