Validating Data Through Data Annotations
Aside from the property level validation, RadDataForm supports validation through data annotations. Validation is performed on any occasion when changes are committed - navigation, insertion of new items or when AutoCommit is set to True, for example. This feature is available for both auto-generated and customized fields and all of the System.ComponentModel.DataAnnotations validation attributes are supported.
In order to enable this kind of validation you first need to include the System.ComponentModel.DataAnnotations namespace:
Example 1: Including System.ComponentModel.DataAnnotations
using System.ComponentModel.DataAnnotations;
Imports System.ComponentModel.DataAnnotations
Now, let's define a simple Employee class with validation attributes.
Example 2: Creating an Employee class with validation attributes
public class Employee
{
[Required]
public string FirstName { get; set; }
[Required(ErrorMessage = "LastName is required")]
public string LastName { get; set; }
[Range(21, 70)]
public int Age { get; set; }
[RegularExpression("[a-z]#[0-9]")]
public string EmployeeID { get; set; }
}
Public Class Employee
<Required()>
Public Property FirstName() As String
Get
Return m_FirstName
End Get
Set(value As String)
m_FirstName = value
End Set
End Property
Private m_FirstName As String
<Required(ErrorMessage:="LastName is required")>
Public Property LastName() As String
Get
Return m_LastName
End Get
Set(value As String)
m_LastName = value
End Set
End Property
Private m_LastName As String
<Range(21, 70)>
Public Property Age() As Integer
Get
Return m_Age
End Get
Set(value As Integer)
m_Age = value
End Set
End Property
Private m_Age As Integer
<RegularExpression("[a-z]#[0-9]")>
Public Property EmployeeID() As String
Get
Return m_EmployeeID
End Get
Set(value As String)
m_EmployeeID = value
End Set
End Property
Private m_EmployeeID As String
End Class
Figure 1 shows RadDataForm's state after validation has been performed.
Figure 1: RadDataForm after validation has been performed
As seen in the above figure, item level validation errors are not respected by the separate editors' validation features (i.e. no validation tooltip is shown for the TextBox). Such behavior is expected, as respective bindings never get notified about these errors.
In order to notify the UI that validation has failed, you will need to throw a ValidationException. Example 3 shows how to do so through the static ValidateProperty method of the Validator class.
Example 3: Set validation through data DataAnnotations
private string firstName;
[Required]
public string FirstName
{
get { return this.firstName; }
set
{
if (value != this.firstName)
{
ValidationContext validationContext = new ValidationContext(this, null, null);
validationContext.MemberName = "FirstName";
Validator.ValidateProperty(value, validationContext);
this.firstName = value;
this.OnPropertyChanged("FirstName");
}
}
}
Private _firstName As String
<Required>
Public Property FirstName() As String
Get
Return Me._firstName
End Get
Set(ByVal value As String)
If value <> Me._firstName Then
Dim validationContext As New ValidationContext(Me, Nothing, Nothing)
validationContext.MemberName = "FirstName"
Validator.ValidateProperty(value, validationContext)
Me._firstName = value
Me.OnPropertyChanged("FirstName")
End If
End Set
End Property
Please, have in mind that those errors are removed from the validation summary on the next committing operation, unlike the property level ones, which are removed on property change.