GridView Column验证,显示错误信息不会失去焦点

时间:2012-06-20 06:45:31

标签: c# winforms gridview devexpress

我需要验证gridView列,例如列中所有元素的总和是< = 100;

如果用户输入值并且总和超出限制,我想显示自定义错误消息。

我已尝试在列的存储库中使用此事件:

 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);

,错误消息是正确的,但如果我点击外面焦点丢失。

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

如果验证失败,是否可以在单元格上禁用'unfocus'?

非常感谢!

1 个答案:

答案 0 :(得分:7)

Source

  

我担心很难确定问题的根本原因   提供的信息。通常,ValidatingEditor事件   活动编辑器关闭时触发,其值已更改。   当ValidateRowcurrent row loses focus时,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); } 事件会触发   它的一些价值观已经改变了。

我建议你通过以下链接:
Validating Rows
Validating Editors
BaseView.ValidatingEditor Event

检查此示例:

PostEditor
尝试保存编辑值(使用ValidatingEditor方法)或关闭活动编辑器时,会发生

编辑器验证。首先,执行自动验证。编辑器确定它是否可以接受输入的值。执行自动验证后,将引发e.Valid = false;事件。处理此事件以实现对单元格值的自定义约束。

如果您的情况失败,请设置e.ErrorText = "ColumnSum must be <= 100";InvalidValueException,并处理gridview的{{1}}事件。