Handling DataSet Events

The DataSet object provides three events: Disposed, Initialized, and MergeFailed.

The MergeFailed Event

The most commonly used event of the DataSet object is MergeFailed, which is raised when the schema of the DataSet objects being merged are in conflict. This occurs when a target and source DataRow have the same primary key value, and the EnforceConstraints property is set to true. For example, if the primary key columns of a table being merged are the same between the tables in the two DataSet objects, an exception is thrown and the MergeFailed event is raised. The MergeFailedEventArgs object passed to the MergeFailed event have a Conflict property that identifies the conflict in schema between the two DataSet objects, and a Table property that identifies the name of the table in conflict.

The following code fragment demonstrates how to add an event handler for the MergeFailed event.

AddHandler workDS.MergeFailed, New MergeFailedEventHandler( _  
  AddressOf DataSetMergeFailed)  
Private Shared Sub DataSetMergeFailed(  _  
  sender As Object,args As MergeFailedEventArgs)  
  Console.WriteLine("Merge failed for table " & args.Table.TableName)  
  Console.WriteLine("Conflict = " & args.Conflict)  
End Sub  
workDS.MergeFailed += new MergeFailedEventHandler(DataSetMergeFailed);  
private static void DataSetMergeFailed(  
  object sender, MergeFailedEventArgs args)  
  Console.WriteLine("Merge failed for table " + args.Table.TableName);  
  Console.WriteLine("Conflict = " + args.Conflict);  

The Initialized Event

The Initialized event occurs after the DataSet constructor initializes a new instance of the DataSet.

The IsInitialized property returns true if the DataSet has completed initialization; otherwise it returns false. The BeginInit method, which begins the initialization of a DataSet, sets IsInitialized to false. The EndInit method, which ends the initialization of the DataSet, sets it to true. These methods are used by the Visual Studio design environment to initialize a DataSet that is being used by another component. You will not commonly use them in your code.

The Disposed Event

DataSet is derived from the MarshalByValueComponent class, which exposes both the Dispose method and the Disposed event. The Disposed event adds an event handler to listen to the disposed event on the component. You can use the Disposed event of a DataSet if you want to execute code when the Dispose method is called. Dispose releases the resources used by the MarshalByValueComponent.


The DataSet and DataTable objects inherit from MarshalByValueComponent and support the ISerializable interface for remoting. These are the only ADO.NET objects that can be remoted. For more information, see .NET Remoting.

For information about other events available when working with a DataSet, see Handling DataTable Events and Handling DataAdapter Events.

See also