Странное поведение DataGridViewComboBoxColumn

Я столкнулся с какой-то странной проблемой в datagridview. У меня есть datagridview со столбцом ComboBox. Я использовал событие datagridviewv_EditingControlShowing, а затем использовал событие GridCombo_SelectedIndexChanged. В первый раз, когда я выбираю какой-либо элемент отображения из Combobox, проблем нет. Но после этого его цвет меняется, как черный & Blue.So Display Members не отображаются. Пожалуйста, проверьте скриншот для получения более подробной информации. .Но со второго раза, когда я хочу что-то изменить внутри выпадающего списка, его цвет меняется.">

 private void datagridview_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        if (e.Control is TextBox)
        {
            TextBox tb = e.Control as TextBox;
            if (flgCellEdit == true)
            {
                tb.KeyPress += new KeyPressEventHandler(NumericValidation_KeyPress);
                //tb.Leave += new EventHandler(GridTextBox_LeaveEvent);
            }
            else
            {
                tb.KeyPress += new KeyPressEventHandler(NumericValidationCancel_KeyPress);
            }
        }
        if (e.Control is ComboBox)
        {
            ComboBox comboBox = e.Control as ComboBox;
            switch ((sender as DataGridView).Name)
            {
                case "dgvIPO":
                    comboBox.SelectedIndexChanged += new EventHandler(GridCombo_SelectedIndexChanged);
                    break;

            }

        }
    } private void GridCombo_SelectedIndexChanged(object sender, EventArgs e)
    {
        DataGridView dgv = (sender as DataGridViewComboBoxEditingControl).EditingControlDataGridView as DataGridView;
        DataGridViewRow dgvr = dgv.Rows[(sender as DataGridViewComboBoxEditingControl).EditingControlRowIndex];
        switch (dgv.Name)
        {

             case "dgvIPO":
                if (dgvr.Cells[5].EditedFormattedValue.ToString() == "N" && dgvr.Cells[6].EditedFormattedValue.ToString() == "N" && dgvr.Cells[7].EditedFormattedValue.ToString() == "N" && dgvr.Cells[8].EditedFormattedValue.ToString() == "N" && dgvr.Cells[9].EditedFormattedValue.ToString() == "N")
                {
                    dgvr.Cells[10].Value = "Complies";
                }
                else
                {
                    dgvr.Cells[10].Value = "Non Complies";
                }
                txtAcceptedQtySt1.Text = dgvIPO.Rows.Cast<DataGridViewRow>().Where(r => r.Cells[10].EditedFormattedValue.ToString() == "Complies").Count().ToString();
                break;
        }
    }`

person Hetvi    schedule 22.04.2015    source источник
comment
Можете ли вы предоставить код, который вы используете для отображения этого DataGridView   -  person hynsey    schedule 22.04.2015
comment
Попробуйте это stackoverflow.com/questions/13829621/   -  person Pradnya Bolli    schedule 22.04.2015
comment
Pradnya Bolli ...Мне это не нужно..Я спрашиваю, почему цвет выпадающего списка меняется..??   -  person Hetvi    schedule 22.04.2015
comment
У меня то же самое: использование события EditingControlShowing для создания SelectedIndexChangedEvent. Просто просмотр свойства EditedFormattedValue в обработчике событий SelectedIndexChanged означает, что когда я использую другой ComboBoxCell в DataGridView (та же строка, другой столбец или другая строка, любой столбец), фон раскрывающегося списка становится черным. Очень странно.   -  person Michael    schedule 14.08.2015


Ответы (1)


Я обошел (не решил) проблему, избегая события EditingControlShowing и используя событие CurrentCellDirtyStateChanged для немедленной фиксации значения, а затем используя событие CellValueChanged со значением вместо EditedFormattedValue. См. ответ Северуна на этот вопрос, который помог мне решить мою проблему.

person Michael    schedule 14.08.2015