2

DataGridView には、ユーザーがコンボボックス ( ) から値を選択できる列がありますDataGridViewComboBoxColumn。選択にはいくつかの検証ロジックがあります (オーバーライドされOnCellValidatingます)。

厄介なことに、ユーザーはコンボ ボックスでドロップダウンを選択した後、そのセルの検証が行われる前に別の場所をクリックする必要があります。選択したインデックスが変更されるとすぐに編集をコミットしようとしましたが (以下を参照)、セルがフォーカスを失うまで検証は実行されません。EndEdit()ではなく も使用してみましたCommitEdit()

ユーザーがコンボ ボックス内の項目を選択するとすぐに検証を開始する方法はありますか?

    protected override void OnEditingControlShowing(DataGridViewEditingControlShowingEventArgs e)
    {
        // Validate selection as soon as user clicks combo box item.
        ComboBox combo = e.Control as ComboBox;
        if (combo != null)
        {
            combo.SelectedIndexChanged -= combo_SelectedIndexChanged;
            combo.SelectedIndexChanged += new EventHandler(combo_SelectedIndexChanged);
        }

        base.OnEditingControlShowing(e);
    }

    void combo_SelectedIndexChanged(object sender, EventArgs e)
    {
        this.NotifyCurrentCellDirty(true);
        this.CommitEdit(DataGridViewDataErrorContexts.Commit);
    }

    protected override void OnCellValidating(DataGridViewCellValidatingEventArgs e)
    {
        // (our validation logic) ...
    }
4

1 に答える 1