【问题标题】:GridView Column validation, display error message don't loose focusGridView 列验证,显示错误信息不要失去焦点
【发布时间】:2012-06-22 06:33:02
【问题描述】:

我需要验证一个 gridView 列,例如该列中所有元素的总和

如果用户输入一个值并且总和超过了我想显示自定义错误消息的限制。

我已经尝试在列的存储库上使用此事件编辑:

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

仅,错误消息是正确的,但如果我在焦点之外单击,则会丢失。

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

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

非常感谢!

【问题讨论】:

    标签: c# winforms gridview devexpress


    【解决方案1】:

    Source

    恐怕很难根据问题确定问题的原因 关于提供的信息。通常,ValidatingEditor 事件 当一个活动的编辑器关闭并且它的值被改变时触发。 ValidateRow 事件在current row loses focus 时触发,并且 它的一些值已更改。

    我建议你通过以下链接:
    Validating Rows
    Validating Editors
    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 &lt;= 100"; 并处理gridview 的InvalidValueException 事件。

    【讨论】:

      猜你喜欢
      • 2011-08-28
      • 1970-01-01
      • 2014-02-12
      • 1970-01-01
      • 2018-10-19
      • 1970-01-01
      • 1970-01-01
      • 2017-11-27
      • 2015-02-09
      相关资源
      最近更新 更多