数据验证
提供的最重要的特性之一RadGridView是数据验证.数据验证功能使您能够完全控制网格单元格中输入的数据。
本教程的目的是向您展示如何使用验证数据RadGridView.
数据验证可以通过事件控制。确保你对所有的都很熟悉验证事件暴露于RadGridView.
在本教程中,我们将使用RadGridView声明示例1.的RadGridView是填充使用一些示例数据。
例1:声明RadGridView
< telerik: RadGridView x: Name = " RadGridView " / >
图1:RadGridView的标准外观
设置验证模式
RadGridView公开了一个属性——ValidatesOnDataErrors——它控制了由IDataErrorInfo和INotifyDataErrorInfo接口提供的数据验证的执行方式。它可以被设置为以下值之一:
没有一个:表示RadGridView将不执行任何验证。
InViewMode:表示RadGridView只在视图模式下执行验证。
InEditMode:表示RadGridView只在编辑模式下执行验证。如果RadGridView初始加载值不正确,则不会显示错误消息。
默认的:默认值。它结合了前两个- InViewMode | InEditMode。
Telerik.Windows.Data.INotifyDataErrorInfo为WPF 4.0创建接口。版本自System.ComponentModel.INotifyDataErrorInfo仅适用于Silverlight。如果使用WPF 4.5,请参考System.ComponentModel.INotifyDataErrorInfo代替。
设置验证类型
在R2 2016, Telerik介绍了ValidationType属性的RadGridView。它为您提供了为每个RadGridView实例选择哪种类型的验证的可能性。这是一个旗帜枚举可以取以下值:
- 没有一个:没有一个验证机制得到尊重。
- DataAnnotations:只尊重通过数据注释进行的验证。
- IDataErrorInfo:仅通过IDataErrorInfo尊重接口。
- INotifyDataErrorInfo:仅通过INotifyDataErrorInfo尊重接口。
- 默认的:尊重所有三种机制的验证。
例2:设置RadGridView的ValidationType属性
在单元级别验证数据
单元格验证发生在GridViewCell已编辑,并且即将提交其新数据。此时此刻,一个CellValidating事件被触发,由于新值还没有提交给底层数据对象,因此这里是应用自定义UI验证的最佳位置。
示例3方法验证OrderNo的属性订单对象的长度必须大于5个字符。
附于CellValidating事件,该事件由RadGridView.
示例3:附加到CellValidating事件
< telerik: RadGridView CellValidating = " radGridView_CellValidating " / >
例3:在后面的代码中添加自定义逻辑
private void radGridView_CellValidating(对象发送器,Telerik.Windows.Controls.GridViewCellValidatingEventArgs e) {if (e.c ll. column . column . value)UniqueName == "OrderNO") {if (e.NewValue.ToString()。长度< 5){e.IsValid = false;e.ErrorMessage = "OrderNO必须大于5个字符。";}}}
Private Sub radGridView_CellValidating(ByVal sender As Object, ByVal e As Telerik.Windows.Controls.GridViewCellValidatingEventArgs) If . cell . column . uniquename = "OrderNO"然后If . newvalue . tostring()。Length < 5则e.IsValid = False e.ErrorMessage = "OrderNO必须大于5个字符。"结束If结束If结束Sub
当您尝试输入一个少于五个字符的订单号时,您应该会看到一个验证消息,该消息与中的消息类似图2.
图2:验证后的RadGridView外观
当你设置e.IsValid财产假,这将取消编辑过程,并将焦点返回到无效文件GridViewCell.在此UI层验证成功后(e.IsValid是真正的,为默认值)。然后进行数据层验证。这是内置于业务对象实现中的验证。
如果已编辑单元格的列具有CellEditTemplate设置,e.NewValue争论将永远是零.方法获取新值e.EditingElement参数。
在属性级别验证数据
另一种方法是对财产水平如示例4.在这种情况下,当要设置不正确的值时,需要抛出异常。这会导致绑定验证错误(图3)及GridViewBoundColumnBase编辑器将进入无效状态。
示例4:在属性级别上设置验证
公共类Order{私有字符串orderNo;public string OrderNO {get{返回this.orderNo;} set {if (value。长度< 5){抛出新的异常("OrderNo应该大于5个字符。");}。orderNo = value;}} public int总计{get;内部设置;}}
Public Class Order Private m_orderNo As String Public Property OrderNO() As String Get Return Me。m_orderNo结束Get Set(ByVal value As String) If值。长度< 5则抛出新异常("OrderNo应大于5个字符。")m_orderNo = value结束设置结束属性公共属性Total As Integer结束类
图3:验证后的RadGridView外观
任何类型的异常都将导致验证错误,并且异常消息将作为错误提示显示。
在行级验证数据
在前面的示例中,使用每个单元验证数据CellValidating事件或属性验证。属性也可以对每一行执行相同的操作RowValidating事件。的RowValidating事件非常类似CellValidating事件。但是,得到的不是单个单元格,而是一整行。
示例5方法验证OrderNO而且总计的属性订单对象。
附于RowValidating事件,该事件由RadGridView.
示例5:附加到rowvalididating事件
< telerik: RadGridView RowValidating = " radGridView_RowValidating " / >
示例6:在rowvalididating事件中应用自定义逻辑
private void radgridview_rowvalididating(对象发送器,telerik . windows . controls . gridviewrovalidatingeventargs e){订单订单= e.w row . datacontext作为订单;if (String.IsNullOrEmpty(order.OrderNO) || order.OrderNO. length < 5) {GridViewCellValidationResult validationResult = new GridViewCellValidationResult();validationResult。PropertyName = "OrderNO";validationResult。ErrorMessage = "OrderNO是必需的,必须至少有五个字符";e.ValidationResults.Add (validationResult);e.IsValid = false;} if(命令。总计< 0) { GridViewCellValidationResult validationResult = new GridViewCellValidationResult(); validationResult.PropertyName = "Total"; validationResult.ErrorMessage = "Total must be positive"; e.ValidationResults.Add(validationResult); e.IsValid = false; } }
Private Sub radgridview_rowvalididating (ByVal sender As Object, ByVal e As telerik . windows . controls . gridviewrovalidatingeventargs) Dim order As order = TryCast(e. row . rowvalidatingeventargs)DataContext, Order) If [String].IsNullOrEmpty(order.OrderNO) OrElse order.OrderNO.Length < 5 Then Dim validationResult As New GridViewCellValidationResult() validationResult.PropertyName = "OrderNO" validationResult.ErrorMessage = "OrderNO is required and must be at least five characters" e.ValidationResults.Add(validationResult) e.IsValid = False End If If order.Total < 0 Then Dim validationResult As New GridViewCellValidationResult() validationResult.PropertyName = "Total" validationResult.ErrorMessage = "Total must be positive" e.ValidationResults.Add(validationResult) e.IsValid = False End If End Sub
这里有几件事值得一提:
为了访问新值,您应该获取该行的值DataContext(在这种情况下,它是一个订单).对于旧值,使用OldValues财产。
的GridViewCellValidationResult对象用于在用户输入错误数据时显示错误消息。
每次GridViewRow加载到viewport时,无论是否处于编辑模式,都会触发rowvalididating事件。属性可以避免执行事件处理程序中定义的任何自定义逻辑EditOperationTypeGridViewRowValidatingEventArgs的属性。
图4:应用行级验证后的RadGridView外观
一旦添加了此类错误,就必须在需要时显式地清除它们。读到这帮助文章有关如何清除用户定义的错误的信息。
通过数据注释验证数据
RadGridView还允许您利用System.ComponentModel.DataAnnotations组装。
例7向你展示如何使用DataAnnotations为了验证OrderNO的属性订单对象。
示例7:通过data DataAnnotations设置验证
[必选]公共字符串OrderNO{获取{返回this.orderNo;} set {ValidationContext ValidationContext =新的ValidationContext(this, null, null);validationContext。MemberName = "订单号";验证器。ValidateProperty(价值,validationContext);这一点。orderNo = value;}}
公共属性OrderNO()作为字符串获取返回我。m_orderNo End Get Set(ByVal value As String) Dim validationContext As New validationContext (Me, Nothing, Nothing) validationContext。MemberName = "OrderNO"验证器。ValidateProperty(value, validationContext)m_orderNo = value结束设置结束属性
类的引用才能使用DataAnnotationsSystem.ComponentModel.DataAnnotations组装。
以下验证属性是可用的:
RequiredAttribute:指定必须为属性提供一个值。
RegularExpressionAttribute:指定用于验证关联成员的正则表达式。
StringLengthAttribute:允许实体成员的最大和最小字符数。
RangeAttribute:指定关联成员的最小和最大约束。
DateTypeAttribute:要与实体成员关联的附加类型的名称。
CustomValidationAttribute:指定要执行的自定义方法以验证实体成员。
中可以找到所有可用验证属性的完整列表MSDN.
你可以看到结果图5.
图5:应用DataAnnotations验证后的RadGridView外观
一旦UI和数据验证通过(即绑定尝试更新绑定属性的值),则CellValidated事件被引发。ValidationResult可以有效,也可以无效。在这里,您还可以添加一个自定义逻辑,例如更改编辑器的可视状态(通过e.EditorElement)。
在使用自定义CellEditTemplate时验证数据
RadGridView控件验证引擎包含一些特定的必需属性,在编辑器的绑定上进行内部设置,默认生成。当定义一个自定义celledtemplate时,这些属性不会在内部设置。示例8演示需要设置哪些绑定属性以使验证按预期工作。
示例8:为编辑元素设置所需的验证属性
< telerik: GridViewDataColumn。CellEditTemplate >
例子
有关如何验证数据的一般示例,您可以查看我们的ValidationWPF演示。
您还可以从我们的在线SDK存储库下载可运行的项目在这里;下面列出了示例显示数据表格.
显示数据表格/ ValidationIDataErrorInfo.
显示数据表格/ ValidationINotifyDataErrorInfo.
虽然GitHub是一个非常著名的平台,但我们在SDK示例浏览器中看到了更好、更简单的方法来查看我们的示例。的SDK示例浏览器是一个自动连接到GitHub并将XAML SDK存储库本地下载到用户可以设置的位置的应用程序。下载完成后,应用程序在所有可用示例和搜索功能之间提供了非常方便的导航,该搜索功能不仅可以通过控件的名称进行搜索,还可以通过示例的名称和描述进行搜索。