Странная проблема с DataGridViewComboBoxCell, пытающаяся автоматически зафиксировать изменения - PullRequest
2 голосов
/ 09 декабря 2010

Таким образом, моя цель состоит в том, чтобы, как только пользователь щелкнет по элементу из выпадающего списка, ячейка автоматически вызовет EndEdit ().Самое странное, что приведенный ниже код будет работать на 2-ых ComboBoxesCell, которые я раскрываю и выбираю значения, но НИКОГДА не первый.Есть ли что-то, что я здесь упускаю ??

        protected override void OnCellClick(DataGridViewCellEventArgs e)
        {
            base.OnCellClick(e);

            DataGridViewComboBoxEditingControl control = this.EditingControl as DataGridViewComboBoxEditingControl;
            if (control != null)
            {
                   control.DropDownClosed += new EventHandler(control_DropDownClosed);
            }
        }

            void control_DropDownClosed(object sender, EventArgs e)
            {
                this.EndEdit();
                DataGridViewComboBoxEditingControl control = sender as DataGridViewComboBoxEditingControl;
                control.DropDownClosed -= new EventHandler(control_DropDownClosed);
            }

Следует добавить, что я наследую от DataGridView, если это не очевидно

1 Ответ

1 голос
/ 10 декабря 2010

Когда что-то типа «», самое странное, что приведенный ниже код будет работать на 2-ых ComboBoxesCell, которые я выпадаю и выбираю значения, но НИКОГДА не происходит первый », это часто происходит потому, что событие происходит до того, как что-то вам нужно сделать.

Видя ваш пример, я бы сказал, что в первый раз, когда вы нажимаете,

DataGridViewComboBoxEditingControl control = this.EditingControl as DataGridViewComboBoxEditingControl;

дает вам control == null.

Может быть, вам следует изменить событие, выбранное для выполнения ваших задач, с Click на SelectedIndexChanged или SelectedValueChanged?

Надеюсь, это поможет,

...