logo Devexpress WPF控件文档中心

行关联验证


如果行的数据是相互关联的(例如,某些列的值依赖于其他列的值),请使用行验证,行验证效果参考下图。请参阅单元格验证主题,了解如何验证单元格值。

一个完整的示例项目可以在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。
在下面的代码示例中,StartDate值不能大于EndDate值。
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 属性允许您更改错误窗口的默认标题。
下面的代码示例演示了如何禁用错误窗口并仅显示错误工具提示,其中注意OnvalidateRow这个事件会是首先执行:
<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;
}


在线咨询
联系我们

客服热线
023-68661681

QQ客服

意见反馈


添加微信获专业服务

TOP