Validating data is the process of confirming that the values being entered into data objects conform to the constraints within a dataset's schema, as well as the rules established for your application. Validating data prior to sending updates to the underlying database is a good practice that reduces errors as well as the potential number of round trips between an application and the database. You can confirm that data being written to a dataset is valid by building validation checks into the dataset itself. The dataset can check the data no matter how the update is being performed — whether directly by controls in a form, within a component, or in some other way. Because the dataset is part of your application, it is a logical place to build application-specific validation (unlike building the same checks into the database backend).
Validation within a dataset can be accomplished:
There are several events that are raised by the DataTable object when a change is occurring in a record:
By default, each change to a column therefore raises four events: first the ColumnChanging and ColumnChanged events for the specific column being changed, and then the RowChanging and RowChanged event. If multiple changes are being made to the row, the events will be raised for each change.
The event you choose depends on how granular you want the validation to be. If it is important that you catch an error immediately when a column is changed, build validation using the ColumnChanging event. Otherwise, use the RowChanging event, which might result in catching several errors at once. Additionally, if your data is structured in such a way that the value of one column is validated based on the contents of another column, then you should perform your validation during the RowChanging event.
When records are updated, the DataTable object raises events that you can respond to as changes are occurring and after changes are made.
If your application is using a typed dataset, you can create strongly typed event handlers. This will add four additional typed events that you can create handlers for; dataTableNameRowChanging, dataTableNameRowChanged, dataTableNameRowDeleting, and dataTableNameRowDeleted. These typed event handlers pass an argument that includes the column names of your table that make code that easier to write and read.
Event
|
Description
|
|---|
ColumnChanging
|
The value in a column is being changed. The event passes the row and column to you along with the proposed new value.
|
ColumnChanged
|
The value in a column has been changed. The event passes the row and column to you along with the proposed value.
|
RowChanging
|
Changes made to a DataRow object are about to be committed back into the dataset. If you have not called the BeginEdit method, the RowChanging event is raised for each change to a column, immediately after the ColumnChanging event has been raised. If you did call BeginEdit before making changes, the RowChanging event is raised only when you call the EndEdit method.
The event passes the row to you and a value indicating what type of action (change, insert, and so on) is being performed.
|
RowChanged
|
A row has been changed. The event passes the row to you and a value indicating what type of action (change, insert, and so on) is being performed.
|
RowDeleting
|
A row is being deleted. The event passes the row to you and a value indicating what type of action (delete) is being performed.
|
RowDeleted
|
A row has been deleted. The event passes the row to you and a value indicating what type of action (delete) is being performed.
|
The ColumnChanging, RowChanging, and RowDeleting events are raised during the update process. You can use these events to validate data or perform other types of processing. Because the updates are in process during these events, you can cancel the update by throwing an exception, which prevents the change from being completed.
The ColumnChanged, RowChanged, and RowDeleted events are notification events that are raised when the update has been completed successfully. These events are useful when you want to take further action based on a successful update.
Tasks
Concepts
Reference
Other Resources