Для динамического изменения цвета (стиля) DataGridViewComboBoxCell - PullRequest
1 голос
/ 30 августа 2011

У меня есть DataGridview с несколькими столбцами, и один из столбцов - DataGridViewComboBoxColumn.

Сценарий таков: когда пользователь выбирает какое-либо значение из выпадающего списка (выбранный индекс> 0), вся строкавыбранная ячейка будет показана белым цветом.Если пользователь выбирает пустое значение для комбинированного списка (выбранный индекс равен 0), тогда вся строка будет отображаться желтым цветом, а эта ячейка комбинированного списка должна отображаться красным цветом.

Я мог бы добиться показа целогострока желтого цвета, за исключением столбца со списком.

private void grdCurve_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            //for datatype column
            if (grdCurve.CurrentCell.ColumnIndex == DATATYPE_COLUMN_INDEX)
            {
                // Check box column
                ComboBox comboBox = e.Control as ComboBox;
                comboBox.SelectedIndexChanged -= new EventHandler(comboBox_SelectedIndexChanged);
                comboBox.SelectedIndexChanged += new EventHandler(comboBox_SelectedIndexChanged);
            }
        }

void comboBox_SelectedIndexChanged(object sender, EventArgs e)
        {
        if (selectedIndex >= 0)
            {
            if (!ValidateMnemonic(mnRow, row))
                {
                    MarkInvalidRow(row);
                }
                else
                {
                    MarkValidRow(row);
                }
            }
        }

private void MarkInvalidRow(DataGridViewRow row)
        {
            DataGridViewCellStyle style = new DataGridViewCellStyle();
            if (m_InvalidRowTable.Count > 0)
            {
                if (m_InvalidRowTable.ContainsKey(row.Index))
                {
                    int col = Convert.ToInt32(m_InvalidRowTable[row.Index]);
                    DataGridViewCell cell = row.Cells[col];
                    MarkInvalidRowColor(row);
                    style.BackColor = Color.Red;
                    style.SelectionBackColor = Color.Red;
                    cell.Style = style;
                    if (grdCurve.CurrentCell is DataGridViewComboBoxCell)
                    {                        
                        grdCurve.CurrentCell.Style = style;
                    }
                }
                else
                {
                    MarkInvalidRowColor(row);
                }
            }
            else
            {
                MarkInvalidRowColor(row);
            }

            m_InvalidRowTable.Remove(row.Index);
        }

private void grdCurve_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            //do nothing  
        }

private void grdCurve_CurrentCellDirtyStateChanged(object sender, EventArgs e)
        {
            if (grdCurve.CurrentCell is DataGridViewCheckBoxCell)
                grdCurve.CommitEdit(DataGridViewDataErrorContexts.Commit);

            if (grdCurve.CurrentCell is DataGridViewComboBoxCell && grdCurve.IsCurrentCellDirty)
                grdCurve.CommitEdit(DataGridViewDataErrorContexts.Commit);

            grdCurve.EndEdit();
        }

Когда я изменяю элемент в поле со списком на пустой, я ожидаю, что поле со списком будет отмечено красным цветом.Но он отображается белым цветом, и когда я нажимаю на какую-то другую ячейку, в ячейке со списком обновляется красный цвет.

Пожалуйста, помогите.

Спасибо, Прасад

1 Ответ

0 голосов
/ 01 сентября 2011

Взгляните сюда http://msdn.microsoft.com/en-us/library/1yef90x0.aspx есть раздел, озаглавленный динамически настраивая стили ячеекВы должны реализовать обработчик для DataGridView.CellFormatting

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...