GridView Column验证,显示错误信息不要松散焦点

Dan*_*inu 3 c# gridview devexpress winforms

我需要验证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);
    }
Run Code Online (Sandbox Code Playgroud)

但是,在设置时

              e.Cancel = true;
Run Code Online (Sandbox Code Playgroud)

我收到默认消息"无效值".

如果我使用

       gridview1.SetColumnError(m_imixGridView.Columns["MyColumn"], "ColumnSum must be <= 100", DevExpress.XtraEditors.DXErrorProvider.ErrorType.Critical);
Run Code Online (Sandbox Code Playgroud)

只有,错误信息是正确的,但如果我点击外面焦点丢失.

我已经看到有多种方法可以验证行,但是没有找到最适合这种情况的解决方案.

如果验证失败,是否可以禁用单元格上的"非聚焦"?

非常感谢!

Nir*_*ngh 7

资源

我担心根据所提供的信息很难确定问题的原因.通常,ValidatingEditor事件在活动编辑器关闭时触发,并且其值已更改.该ValidateRow事件触发时current row loses focus,和它的一些价值观已经改变.

我建议你通过以下链接:
验证行
验证编辑器
BaseView.ValidatingEditor事件

检查此示例:

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);
}
Run Code Online (Sandbox Code Playgroud)

尝试保存编辑值(使用PostEditor方法)或关闭活动编辑器时会发生编辑器验证.首先,执行自动验证.编辑器确定它是否可以接受输入的值.执行自动验证后,将ValidatingEditor引发该事件.处理此事件以实现对单元格值的自定义约束.

如果您的条件失败,则设置e.Valid = false;和,e.ErrorText = "ColumnSum must be <= 100";并处理InvalidValueExceptiongridview事件.