3

列内のすべての要素の合計が<=100であるなど、gridView列を検証する必要があります。

ユーザーが値を入力し、合計が制限を超えた場合、カスタムエラーメッセージを表示したいと思います。

コラムの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);

ただ、エラーメッセージは正しいですが、外側をクリックするとフォーカスが失われます。

行を検証する方法は複数あることを確認しましたが、この場合に最適なソリューションは見つかりませんでした。

検証が失敗した場合、セルの「フォーカス解除」を無効にすることは可能ですか?

どうもありがとう!

4

1 に答える 1

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

エディターの検証は、(メソッドを使用して)編集値を保存しようとしたとき、PostEditorまたはアクティブなエディターを閉じたときに行われます。まず、自動検証が実行されます。エディターは、入力された値を受け入れることができるかどうかを判断します。自動検証が実行された後、ValidatingEditorイベントが発生します。このイベントを処理して、セル値にカスタム制約を実装します。

条件が失敗した場合は、e.Valid = false;とを設定し、 gridviewのイベントe.ErrorText = "ColumnSum must be <= 100";も処理します。InvalidValueException

于 2012-06-20T09:47:32.353 に答える