DataTableCollection.CollectionChanging Event

Definition

Occurs while the DataTableCollection is changing because of DataTable objects being added or removed.

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

Event Type

Examples

The following example demonstrates how to use the CollectionChanging event.

public static void TableCollectionCollectionChanging()
{
    // Create a DataSet with two tables
    DataSet dataSet = new DataSet();

    // Assign the event-handler function for the
    // CollectionChangeEvent.
    dataSet.Tables.CollectionChanging +=
        new System.ComponentModel.CollectionChangeEventHandler(
        Collection_Changing);

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

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

    dataSet.Tables.AddRange(new DataTable[] { customersTable, ordersTable });

    // Check to see if each table can be removed and then
    // remove it.
    while (dataSet.Tables.Count > 0)
    {
        DataTable table = dataSet.Tables[0];
        if (dataSet.Tables.CanRemove(table))
        {
            dataSet.Tables.RemoveAt(0);
        }
    }

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

private static void Collection_Changing(object sender,
    System.ComponentModel.CollectionChangeEventArgs e)
{
    // Implementing this event allows you to abort a change
    // to the collection by raising an exception which you can
    // catch.

    Console.WriteLine("Collection_Changing Event: '{0}'\table element={1}",
        e.Action.ToString(), e.Element.ToString());
}
Public Sub TableCollectionCollectionChanging()
    ' Create a DataSet with two tables
    Dim dataSet As New DataSet()

    AddHandler dataSet.Tables.CollectionChanging, _
        AddressOf Collection_Changing

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

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

    ' Add the tables to the DataTableCollection
    dataSet.Tables.AddRange(New DataTable() {customersTable, ordersTable})

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

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

Private Sub Collection_Changing(ByVal sender As Object, _
    ByVal e As System.ComponentModel.CollectionChangeEventArgs)
    ' Implementing this event allows you to abort a change
    ' to the collection by raising an exception which you can
    ' catch.
    Console.WriteLine( _
        "Collection_Changing Event: '{0}'\table element={1}", _
        e.Action.ToString(), e.Element.ToString())
End Sub

Remarks

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

Applies to