网格视图列验证,显示错误消息不丢失焦点。

3
我需要验证一个GridView列,例如该列中所有元素的总和都小于等于100;
如果用户输入一个值并且总和超过限制,我想显示一个自定义错误消息。
我尝试在列的repositoryedit上使用此事件:
 void pinEditRepositoryItem_Validating(object sender, System.ComponentModel.CancelEventArgs e)
    {
        e.Cancel = true;
        gridview1.SetColumnError(m_imixGridView.Columns["MyColumn"], "ColumnSum must be <= 100", DevExpress.XtraEditors.DXErrorProvider.ErrorType.Critical);
    }

然而,当设置时

              e.Cancel = true;

我收到了默认消息“无效值”。
如果我使用
       gridview1.SetColumnError(m_imixGridView.Columns["MyColumn"], "ColumnSum must be <= 100", DevExpress.XtraEditors.DXErrorProvider.ErrorType.Critical);

只有当我点击失去焦点时,错误信息才是正确的。我看到有多种验证行的方法,但没有找到最适合这种情况的解决方案。如果验证失败,是否可以禁用单元格上的“失去焦点”功能?非常感谢!
1个回答

7

很遗憾,基于提供的信息很难确定问题的原因。通常情况下,当活动编辑器被关闭且其值被更改时,将触发ValidatingEditor事件。当当前行失去焦点且其中一些值已更改时,将触发ValidateRow事件。

我建议您查看以下链接:
验证行
验证编辑器
BaseView.ValidatingEditor Event

请参考此示例:

using DevExpress.XtraGrid.Views.Grid;
using DevExpress.XtraEditors.Controls;

private void gridView1_ValidatingEditor(object sender, BaseContainerValidateEditorEventArgs e) {
    GridView view = sender as GridView;
    if(view.FocusedColumn.FieldName == "Discount") {
        //Get the currently edited value 
        double discount = Convert.ToDouble(e.Value);
        //Specify validation criteria 
        if(discount < 0) {
            e.Valid = false;
            e.ErrorText = "Enter a positive value";
        }
        if(discount > 0.2) {
            e.Valid = false;
            e.ErrorText = "Reduce the amount (20% is maximum)";
        }
    }
}

private void gridView1_InvalidValueException(object sender, InvalidValueExceptionEventArgs e) {
    //Do not perform any default action 
    e.ExceptionMode = DevExpress.XtraEditors.Controls.ExceptionMode.NoAction;
    //Show the message with the error text specified 
    MessageBox.Show(e.ErrorText);
}

编辑验证会在尝试保存编辑值(使用PostEditor方法)或关闭活动编辑器时进行。首先,执行自动验证。编辑器确定它是否可以接受输入的值。自动验证完成后,将引发ValidatingEditor事件。处理此事件以实现对单元格值的自定义约束。
如果您的条件不满足,那么请设置e.Valid = false;e.ErrorText =“ColumnSum must be <= 100”;并处理gridview的InvalidValueException事件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接