Enables you to specify whether the focused row's data is valid, and whether the row can lose focus.
public event GridRowValidationEventHandler ValidateRow
Public Event ValidateRow As GridRowValidationEventHandler
The ValidateRow event's data class is GridRowValidationEventArgs. The following properties provide information specific to this event:
|Culture||Gets the culture related to the validation. Inherited from ValidationEventArgs.|
|ErrorContent||Gets or sets an object that describes the validation error. Inherited from ValidationEventArgs.|
|ErrorType||Gets or sets the error type. Inherited from ValidationEventArgs.|
|Handled||Gets or sets a value that indicates the present state of the event handling for a routed event as it travels the route. Inherited from RoutedEventArgs.|
|IsValid||Gets or sets a value specifying whether the value is valid. Inherited from ValidationEventArgs.|
|OriginalSource||Gets the original reporting source as determined by pure hit testing, before any possible Source adjustment by a parent class. Inherited from RoutedEventArgs.|
|RoutedEvent||Gets or sets the RoutedEvent associated with this RoutedEventArgs instance. Inherited from RoutedEventArgs.|
|Row||Gets the processed row.|
|RowHandle||Gets the processed row's handle.|
|Source||Gets or sets a reference to the object that raised the event. Inherited from RoutedEventArgs.|
|UpdateSource||Gets the action that caused the validation. Inherited from ValidationEventArgs.|
|Value||Gets the editor's value. Inherited from ValidationEventArgs.|
The event data class exposes the following methods:
|InvokeEventHandler(Delegate, Object)||When overridden in a derived class, provides a way to invoke event handlers in a type-specific way, which can increase efficiency over the base implementation. Inherited from RoutedEventArgs.|
|OnSetSource(Object)||When overridden in a derived class, provides a notification callback entry point whenever the value of the Source property of an instance changes. Inherited from RoutedEventArgs.|
|SetError(Object)||Displays an error within the editor. Inherited from ValidationEventArgs.|
|SetError(Object, ErrorType)||Displays an error within the editor. Inherited from ValidationEventArgs.|
Row validation is performed within the ValidateRow event handler. This event is automatically fired after the focused row's data has been modified and it is about to lose focus. To manually force row validation, call the DataViewBase.CommitEditing method.
The processed row is returned by the event parameter's GridRowValidationEventArgs.Row property. Its handle is returned by the GridRowValidationEventArgs.RowHandle. After cell values have been obtained, you can verify whether these values meet your validity criteria. If the row fails validation, set the event's IsValid parameter to false. Otherwise, leave the IsValid parameter set to true.
To learn more, see Row Validation.
This example shows how to check the validity of data entered by end-users into a data row. The GridViewBase.ValidateRow and GridViewBase.InvalidRowException events are handled to validate the focused row's data, and if it is invalid, prevent the row focus from being moved to another row until invalid values are corrected.
Since the Task class doesn't support error notifications, it implements the IDXDataErrorInfo interface, providing two members to get error descriptions for the entire row and for individual cells (data source fields). This displays error icons within cells with invalid values. Pointing to such an error icon displays a tooltip with an error description.
A complete sample project is available at https://github.com/DevExpress-Examples/how-to-validate-data-rows-e1593.
<Window x:Class="DXGrid_ValidateRow.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid" Title="Window1" Height="300" Width="500"> <Grid> <dxg:GridControl x:Name="grid"> <dxg:GridControl.Columns> <dxg:GridColumn FieldName="TaskName" /> <dxg:GridColumn FieldName="StartDate" /> <dxg:GridColumn FieldName="EndDate" /> </dxg:GridControl.Columns> <dxg:GridControl.View> <dxg:TableView AutoWidth="True" ValidateRow="TableView_ValidateRow" InvalidRowException="TableView_InvalidRowException" /> </dxg:GridControl.View> </dxg:GridControl> </Grid> </Window>