动态改变DataGridViewComboBoxCell的颜色(样式)

本文关键字:样式 颜色 改变 DataGridViewComboBoxCell 动态 | 更新日期: 2023-09-27 18:06:56

我有一个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();
        }

当我将组合框中的项更改为空时,我希望组合框被标记为红色。但是,它显示为白色,当我点击其他单元格时,红色在组合框单元格中得到更新。

请帮助。

谢谢,普拉萨德

动态改变DataGridViewComboBoxCell的颜色(样式)

看看这里http://msdn.microsoft.com/en-us/library/1yef90x0.aspx有一个名为动态设置单元格样式的部分。你应该为DataGridView实现一个处理程序。CellFormatting