更改DataGridViewComboBoxCell所选项的样式(forecolor)

时间:2014-01-30 18:25:46

标签: c# winforms datagridview datagridviewcomboboxcell

我真的想要更改单个DataGridVeiwComboBox控件的所选项的样式。

有一个数据库将信息提供给我的DataGridView,如果由于某种原因,数据无效,我想以某种方式通知用户。我决定将下拉文本字体设置为红色,背景为蓝色,以便它可以在数百行的列表中脱颖而出。

当存在无效数据时(意味着数据库中的数据不是下拉列表中的选项之一),将调用DataError回调:

private void OnDataError(object sender, DataGridViewDataErrorEventArgs e)
{
    DataGridViewCellStyle style = new DataGridViewCellStyle();
    style.ForeColor = Color.Red;
    style.BackColor = Color.Blue;
    ((DataGridViewComboBoxCell)(((DataGridView)(sender))[e.ColumnIndex, e.RowIndex])).Style = style;
    e.Cancel = true;
}

然而,这导致以下结果:

enter image description here

我不希望下拉列表发生变化,我希望所选值的'0'更改。

是否有其他方式通知用户该值无效?我不想创建一个列表并将其呈现给用户,行数可能非常大。

1 个答案:

答案 0 :(得分:0)

AFAIK,没有直接的方法来实现你的目标。

  1. 创建自定义“Column”,“Cell”和“EditingControl”类。创建自定义DataGridViewComboBoxEditingControl并覆盖OnDrawItem方法以使用自定义颜色绘制项目。

  2. 使用自定义ComboBoxColumn类创建所需的组合框列,将其添加到网格并绑定数据。如果设置列的DataPropertyName属性,那么当数据绑定时,数据列将绑定到网格列。 DataGridView将自动生成其他列。