行关联验证
如果行的数据是相互关联的(例如,某些列的值依赖于其他列的值),请使用行验证,行验证效果参考下图。请参阅单元格验证主题,了解如何验证单元格值。
一个完整的示例项目可以在DevExpress代码示例数据库中找到,网址是:http://www.devexpress.com/example=E1593 。
步骤1.处理验证事件 处理一个验证事件
GridControl提供了GridViewBase.ValidateRow和TreeListView.ValidateNode事件来手动验证行值。这些事件会在重点行的数据发生变化后引发。
下面的代码示例展示了如何验证行。
<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 ValidateRow="OnValidateRow" /> </dxg:GridControl.View> </dxg:GridControl>
void OnValidateRow(object sender, GridRowValidationEventArgs e) { }步骤2. 验证一个新值
使用以下GridRowValidationEventArgs的属性来获取行值。
- GridRowValidationEventArgs.Row属性返回可验证的行。
- GridRowValidationEventArgs.RowHandle属性返回可验证行的句柄。
- 获取行值后可以根据验证规则进行验证。如果某行验证失败,则将ValidationEventArgs.IsValid属性设置为false。
void OnValidateRow(object sender, GridRowValidationEventArgs e) { DateTime startDate = ((Task)e.Row).StartDate; DateTime endDate = ((Task)e.Row).EndDate; e.IsValid = startDate < endDate; }步骤3. 显示错误
一个错误的ToolTip
当鼠标指针悬停在无效行上时,GridControl会显示一个错误工具提示。指定ValidationEventArgs.ErrorContent属性来设置错误工具提示的描述。
void OnValidateRow(object sender, GridRowValidationEventArgs e) { // ... e.ErrorContent = "Start Date must be less than End Date."; }错误窗口
当终端用户输入一个错误的值后,GridControl会显示一个错误窗口。该窗口允许他们执行以下操作。
- 单击Yes将焦点返回到已编辑的行并修正行值。
- 单击 "否 "以放弃更改。在这种情况下,终端用户可以将焦点从行上移开。只有代表行的对象实现了System.ComponentModel.IEditableObject接口,才会发生回滚。

- 处理GridViewBase.InvalidRowException事件,该事件是在GridViewBase.ValidateRow事件之后引发的,并使用以下InvalidRowExceptionEventArgs的属性来覆盖默认的错误呈现方式。
- InvalidRowExceptionEventArgs.ExceptionMode属性允许你指定输入无效值时要执行的操作。您可以显示一个带有错误描述的消息框,抑制任何操作,抛出一个异常,或放弃所有更改。
- InvalidRowExceptionEventArgs.ErrorText 属性允许您指定一个附加的错误描述,该描述会在 "您要更正值吗?"字符串之前的错误窗口中显示。
- InvalidRowExceptionEventArgs.WindowCaption 属性允许您更改错误窗口的默认标题。
<dxg:GridControl x:Name="grid"> <!-- --> <dxg:GridControl.View> <dxg:TableView ValidateRow="OnValidateRow" InvalidRowException="OnInvalidRowException" /> </dxg:GridControl.View> </dxg:GridControl>
void OnInvalidRowException(object sender, InvalidRowExceptionEventArgs e) { e.ExceptionMode = ExceptionMode.NoAction; }