مشكلة غريبة مع DataGridViewComboBoxCell ، في محاولة للتغييرات التلقائية

StackOverflow https://stackoverflow.com/questions/4400679

سؤال

لذا فإن هدفي هو بمجرد أن ينقر المستخدم على العنصر من قائمة القائمة المنسدلة ، ستستدعي الخلية تلقائيًا EndEdit (). أغرب شيء هو أن الكود أدناه سيعمل على 2nd-n comboBoxescells التي أسقطها وأختار القيم من ولكن لم يكن الأول. هل هناك شيء أفتقده هنا ؟؟

        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 إذا لم يكن ذلك واضحًا

هل كانت مفيدة؟

المحلول

عندما شيء مثل "أغرب شيء هو أن الكود أدناه سيعمل على 2nd-n comboBoxescells التي أسقطها وأختار القيم من ولكنها لم تكن الأولى أبدًا"يحدث ، غالبًا ما يحدث الحدث قبل أن يتم القيام بشيء تحتاجه.

في مثالك ، أود أن أقول أنه في المرة الأولى ، عند النقر فوق ،

DataGridViewComboBoxEditingControl control = this.EditingControl as DataGridViewComboBoxEditingControl;

يعطيك control == null.

ربما يجب عليك تغيير الحدث الذي تم اختياره للقيام بأشياءك من Click ل SelectedIndexChanged أو SelectedValueChanged ?

أتمنى أن يساعدك هذا،

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top