DataTableCollection.CollectionChanged Event


Occurs after the DataTableCollection is changed because of DataTable objects being added or removed.

 event System::ComponentModel::CollectionChangeEventHandler ^ CollectionChanged;
public event System.ComponentModel.CollectionChangeEventHandler? CollectionChanged;
public event System.ComponentModel.CollectionChangeEventHandler CollectionChanged;
member this.CollectionChanged : System.ComponentModel.CollectionChangeEventHandler 
Public Custom Event CollectionChanged As CollectionChangeEventHandler 

Event Type



The following example demonstrates how to use the CollectionChanged event.

public static void TableCollectionCollectionChanged()
    // create a DataSet with two tables
    DataSet dataSet = new DataSet();

    dataSet.Tables.CollectionChanged +=
        new System.ComponentModel.CollectionChangeEventHandler(

    // create Customer table
    DataTable custTable = new DataTable("Customers");
        typeof(int)).AutoIncrement = true;
    custTable.PrimaryKey = new DataColumn[] { custTable.Columns["customerId"] };

    // create Orders table
    DataTable orderTable = new DataTable("Orders");
        typeof(int)).AutoIncrement = true;
    orderTable.Columns.Add("customerId", typeof(int));
    orderTable.Columns.Add("amount", typeof(double));
    orderTable.PrimaryKey = new DataColumn[] { orderTable.Columns["orderId"] };

    dataSet.Tables.AddRange(new DataTable[] { custTable, orderTable });

    // remove all tables
    // check if table can be removed and then
    // remove it, cannot use a foreach when
    // removing items from a collection
    // equivalent to dataSet.Tables.Clear()
    while (dataSet.Tables.Count > 0)
        DataTable table = dataSet.Tables[0];
        if (dataSet.Tables.CanRemove(table))

    Console.WriteLine("dataSet has {0} tables",

private static void Collection_Changed(object sender,
    System.ComponentModel.CollectionChangeEventArgs e)
    Console.WriteLine("Collection_Changed Event: '{0}'\table element={1}",
        e.Action.ToString(), e.Element.ToString());
Public Sub TableCollectionCollectionChanged()
    ' create a DataSet with two tables
    Dim dataSet As New DataSet()

    AddHandler dataSet.Tables.CollectionChanging, _
        AddressOf Collection_Changed

    ' create Customer table
    Dim custTable As New DataTable("Customers")
    custTable.Columns.Add("customerId", _
        System.Type.GetType("System.Integer")).AutoIncrement = True
    custTable.Columns.Add("name", System.Type.GetType("System.String"))
    custTable.PrimaryKey = New DataColumn() {custTable.Columns("customerId")}

    ' create Orders table
    Dim orderTable As New DataTable("Orders")
    orderTable.Columns.Add("orderId", _
        System.Type.GetType("System.Integer")).AutoIncrement = True
    orderTable.Columns.Add("customerId", System.Type.GetType("System.Integer"))
    orderTable.Columns.Add("amount", System.Type.GetType("System.Double"))
    orderTable.PrimaryKey = New DataColumn() {orderTable.Columns("orderId")}

    dataSet.Tables.AddRange(New DataTable() {custTable, orderTable})

    ' Now remove all tables.
    ' First check to see if the table can be removed,
    ' then remove it from the collection.
    ' You cannot use a For Each loop when
    ' removing items from a collection.
    Do While (dataSet.Tables.Count > 0)
        Dim table As DataTable = dataSet.Tables(0)
        If (dataSet.Tables.CanRemove(table)) Then
        End If

    Console.WriteLine("dataSet has {0} tables", dataSet.Tables.Count)
End Sub

Private Sub Collection_Changed(ByVal sender As Object, _
    ByVal e As System.ComponentModel.CollectionChangeEventArgs)
    Console.WriteLine("Collection_Changed Event: '{0}'\table element={1}", _
        e.Action.ToString(), e.Element.ToString())
End Sub


For more information about how to handle events, see Handling and Raising Events.

Applies to