wpf-devexpress-dot-xpf-dot-grid-dot-dataviewbase-5eb71cd0.md
Gets whether the view has any data editing errors posted to a data source. This is a dependency property.
Namespace : DevExpress.Xpf.Grid
Assembly : DevExpress.Xpf.Grid.v25.2.Core.dll
NuGet Package : DevExpress.Wpf.Grid.Core
public bool HasErrors { get; }
Public ReadOnly Property HasErrors As Boolean
| Type | Description |
|---|---|
| Boolean |
true if the view has any data editing errors posted to a data source; otherwise, false.
|
Use the HasErrors property to check whether the view has any data editing errors. The HasErrors property works only if the DataViewBase.ErrorsWatchMode property is set to All , Cell , or Row.
The HasErrors property is updated when you post changes to a data source. Use the DataViewBase.HasValidationError property to check whether the view has any validation errors that prohibit you from posting changes to a data source.
Note
When the DataViewBase.ErrorsWatchMode property is set to All , Cell , or Row , the GridControl revalidates its data during initial loading; this can significantly decrease control performance.
To pass validation data from the GridControl to a view model, use the ReadOnlyDependencyPropertyBindingBehavior to bind the view’s HasErrors property to a view model property. Set the view’s ErrorsWatchMode property to Cells.
<dx:ThemedWindow x:Class="DXSample.MainWindow"
Title="{DXBinding '`GridControl has errors: ` + HasErrors'}">
<dx:ThemedWindow.DataContext>
<local:MainViewModel />
</dx:ThemedWindow.DataContext>
<DockPanel>
<dxg:GridControl AutoGenerateColumns="AddNew"
ItemsSource="{Binding TaskList}">
<dxg:GridControl.View>
<dxg:TableView ErrorsWatchMode="Cells"
InvalidRowExceptionCommand="{Binding InvalidRowCommand}"
ValidateRowCommand="{Binding ValidateRowCommand}">
<dxmvvm:Interaction.Behaviors>
<dxmvvm:ReadOnlyDependencyPropertyBindingBehavior Property="HasErrors"
Binding="{Binding HasErrors, UpdateSourceTrigger=PropertyChanged}" />
</dxmvvm:Interaction.Behaviors>
</dxg:TableView>
</dxg:GridControl.View>
</dxg:GridControl>
</DockPanel>
</dx:ThemedWindow>
public class MainViewModel : ViewModelBase {
public bool HasErrors {
get { return GetValue<bool>(); }
set { SetValue(value); }
}
public ObservableCollection<Task> TaskList { get; }
public MainViewModel() {
TaskList = new ObservableCollection<Task> {
new Task() {
TaskName = "Complete Project A",
StartDate = new DateTime(2009, 7, 17),
EndDate = new DateTime(2009, 7, 10)
},
new Task() {
TaskName = "Test Website",
StartDate = new DateTime(2009, 7, 10),
EndDate = new DateTime(2009, 7, 12)
},
new Task() {
TaskName = string.Empty,
StartDate = new DateTime(2009, 7, 4),
EndDate = new DateTime(2009, 7, 6)
}
};
}
[Command]
public void ValidateRow(RowValidationArgs args) {
args.Result = GetValidationErrorInfo((Task)args.Item);
}
static ValidationErrorInfo GetValidationErrorInfo(Task task) {
if (task.StartDate > task.EndDate)
return new ValidationErrorInfo("Start Date must be less than End Date");
if (string.IsNullOrEmpty(task.TaskName))
return new ValidationErrorInfo("Enter a task name");
return null;
}
[Command]
public void InvalidRow(InvalidRowExceptionArgs args) {
args.ExceptionMode = ExceptionMode.NoAction;
}
}
Public Class MainViewModel
Inherits ViewModelBase
Public Property HasErrors As Boolean
Get
Return GetValue(Of Boolean)()
End Get
Set(ByVal value As Boolean)
SetValue(value)
End Set
End Property
Public ReadOnly Property TaskList As ObservableCollection(Of Task)
Public Sub New()
TaskList = New ObservableCollection(Of Task) From {New Task() With {.TaskName = "Complete Project A", .StartDate = New DateTime(2009, 7, 17), .EndDate = New DateTime(2009, 7, 10)}, New Task() With {.TaskName = "Test Website", .StartDate = New DateTime(2009, 7, 10), .EndDate = New DateTime(2009, 7, 12)}, New Task() With {.TaskName = String.Empty, .StartDate = New DateTime(2009, 7, 4), .EndDate = New DateTime(2009, 7, 6)}}
End Sub
<Command>
Public Sub ValidateRow(ByVal args As RowValidationArgs)
args.Result = GetValidationErrorInfo(CType(args.Item, Task))
End Sub
Private Shared Function GetValidationErrorInfo(ByVal task As Task) As ValidationErrorInfo
If task.StartDate > task.EndDate Then Return New ValidationErrorInfo("Start Date must be less than End Date")
If String.IsNullOrEmpty(task.TaskName) Then Return New ValidationErrorInfo("Enter a task name")
Return Nothing
End Function
<Command>
Public Sub InvalidRow(ByVal args As InvalidRowExceptionArgs)
args.ExceptionMode = ExceptionMode.NoAction
End Sub
End Class
See Also