1

我想在DataGridView编辑时更改单元格的背景颜色。当我从牢房出来时,我尝试的所有解决方案都会应用颜色。因为我希望用户输入一些内容,并且Cell_Validating如果该值未通过规则,那么我为单元格着色,不允许用户离开单元格。以下是我尝试过的代码:

DataGridViewCellStyle CellStyle = new DataGridViewCellStyle();
CellStyle.BackColor = Color.Red;
dgvAddAssets.CurrentCell.Style = CellStyle;
4

2 回答 2

0

一种选择是创建您自己的 CustomDataGridView 类,该类继承自DataGridView类并覆盖适当的方法,如 KeyDown、ProcessDialogKey 等。

另一种选择是使用以下代码,这有点棘手。它的作用是强制用户插入有效数据。如果插入了无效值,当前单元格将被着色为红色,并返回编辑模式状态。在此示例中,我们假设无效值为"InavlidValue".

首先,添加这些字段(我们需要它们在不同的事件之间共享):

private bool colorCell = false;
private DataGridViewCell cell;

添加并附加这些事件:

private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
    // Here we check for the invalid value, and store the cell position for later use
    if (e.FormattedValue.ToString() == "InvalidValue")
    {
        colorCell = true;
        cell = dataGridView1[e.ColumnIndex, e.RowIndex];
    }
}

private void dataGridView1_CellValidated(object sender, DataGridViewCellEventArgs e)
{
    // When value is valid, change color back to normal
    dataGridView1.CurrentCell.Style.BackColor = Color.White;
}

private void dataGridView1_SelectionChanged(object sender, EventArgs e)
{
    // User inserted invalid value, color the cell and return to edit mode
    if (colorCell)
    {
        dataGridView1.CurrentCell = cell;
        dataGridView1.CurrentCell.Style.BackColor = Color.Red;
        dataGridView1.BeginEdit(true);
        colorCell = false;
    }
}
于 2013-11-11T09:55:07.483 回答
0

您可以通过执行更改编辑文本框的背景颜色

dgvAddAssets.EditingControl.BackColor = Color::Red;
dgvAddAssets.EditingPanel.BackColor = Color::Red;

这两行将把正在编辑的框变成红色但是一旦完成编辑单元格将是它以前的颜色,因为这是编辑控件是与 DataGridViewCell 完全分开的控件。我把它放在 CurrentCellDirtyStateChanged 中,当你离开编辑时,单元格会回到以前的颜色,如果你去另一个单元格进行编辑,它不会是红色的,因为这些控件似乎在进入编辑时被重置(但我不是100% 确定)

于 2018-10-24T17:58:21.450 回答