【问题标题】:Changing the style (forecolor) of a DataGridViewComboBoxCell Selected Item更改 DataGridViewComboBoxCell 选定项的样式(前景色)
【发布时间】:2014-01-30 18:25:46
【问题描述】:

我真的很想更改单个 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;
}

但是这会导致以下结果:

我不希望下拉菜单发生变化,我希望“0”即所选值发生变化。

还有其他方法可以通知用户该值无效吗?我不想创建一个列表并将其呈现给用户,行数可能会很大。

【问题讨论】:

  • 在我看来,网格单元格的显示不是验证数据的合适位置。也许您应该首先质疑您显示“无效”数据的原因。
  • 不幸的是,如果不对整个应用程序进行重大重组,没有其他位置可以解决此问题。这只是一个持续存在的问题的一部分,旧数据库正在与新前端一起使用,其中数据库中的旧值多年来一直是 OBE,并且从未改变。这个练习的重点是充实这些失败,同时仍然允许完成工作。

标签: c# winforms datagridview datagridviewcomboboxcell


【解决方案1】:

AFAIK,没有简单的方法可以实现您的目标。

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

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

【讨论】:

    猜你喜欢
    • 2016-04-29
    • 2017-04-24
    • 2020-11-29
    • 1970-01-01
    • 1970-01-01
    • 2018-09-01
    • 1970-01-01
    • 2013-11-22
    • 1970-01-01
    相关资源
    最近更新 更多