Telerik UI for WPF?下载30天免费试用

数据验证

提供的最重要的特性之一RadGridView数据验证.数据验证功能使您能够完全控制网格单元格中输入的数据。

本教程的目的是向您展示如何使用验证数据RadGridView

数据验证可以通过事件控制。确保你对所有的都很熟悉验证事件暴露于RadGridView

在本教程中,我们将使用RadGridView声明示例1.的RadGridView填充使用一些示例数据。

例1:声明RadGridView

< telerik: RadGridView x: Name = " RadGridView " / >

图1:RadGridView的标准外观

Telerik WPF DataGrid验证010

设置验证模式

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外观

Telerik WPF DataGrid验证020

当你设置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外观

Telerik WPF DataGrid验证030

任何类型的异常都将导致验证错误,并且异常消息将作为错误提示显示。

在行级验证数据

在前面的示例中,使用每个单元验证数据CellValidating事件或属性验证。属性也可以对每一行执行相同的操作RowValidating事件。的RowValidating事件非常类似CellValidating事件。但是,得到的不是单个单元格,而是一整行。

示例5方法验证OrderNO而且总计的属性订单对象。

附于RowValidating事件,该事件由RadGridView

示例5:附加到rowvalididating事件

< telerik: RadGridView RowValidating = " radGridView_RowValidating " / >
切换到隐藏代码并在事件处理程序中添加自定义验证逻辑,如中所示例子6

示例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外观

Telerik WPF DataGrid验证040

一旦添加了此类错误,就必须在需要时显式地清除它们。读到这帮助文章有关如何清除用户定义的错误的信息。

通过数据注释验证数据

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外观

Telerik WPF DataGrid管理数据验证050

一旦UI和数据验证通过(即绑定尝试更新绑定属性的值),则CellValidated事件被引发。ValidationResult可以有效,也可以无效。在这里,您还可以添加一个自定义逻辑,例如更改编辑器的可视状态(通过e.EditorElement)。

在使用自定义CellEditTemplate时验证数据

RadGridView控件验证引擎包含一些特定的必需属性,在编辑器的绑定上进行内部设置,默认生成。当定义一个自定义celledtemplate时,这些属性不会在内部设置。示例8演示需要设置哪些绑定属性以使验证按预期工作。

示例8:为编辑元素设置所需的验证属性

< telerik: GridViewDataColumn。CellEditTemplate >   

例子

有关如何验证数据的一般示例,您可以查看我们的ValidationWPF演示。

您还可以从我们的在线SDK存储库下载可运行的项目在这里;下面列出了示例显示数据表格

  • 显示数据表格/ ValidationIDataErrorInfo

  • 显示数据表格/ ValidationINotifyDataErrorInfo

虽然GitHub是一个非常著名的平台,但我们在SDK示例浏览器中看到了更好、更简单的方法来查看我们的示例。的SDK示例浏览器是一个自动连接到GitHub并将XAML SDK存储库本地下载到用户可以设置的位置的应用程序。下载完成后,应用程序在所有可用示例和搜索功能之间提供了非常方便的导航,该搜索功能不仅可以通过控件的名称进行搜索,还可以通过示例的名称和描述进行搜索。

另请参阅

在本文中
Baidu
map