在编辑模式下更改单元格返回颜色

时间:2013-11-11 06:04:43

标签: winforms datagridview

我想在编辑时更改DataGridView中单元格的背景颜色。我尝试的所有解决方案都是在我离开牢房时应用的颜色。因为我希望用户输入内容并在Cell_Validating事件中,如果值没有通过规则,那么我为单元格着色,禁止用户离开单元格。以下是我尝试过的代码:

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

2 个答案:

答案 0 :(得分: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;
    }
}

答案 1 :(得分:0)

您可以通过以下方式更改编辑文本框的背景颜色

import groovy.json.JsonSlurper
def response = ["curl", "-X", "GET", "https://stg.jfrog.io/XXX/api/storage/docker-local/genie/galerts?uri", "-H", "Postman-Token: 26403513-778c-43c8-b44b-70cb2bbc4352", "-H", "X-JFrog-Art-Api:Pqs", "-H", "cache-control: no-cache"].execute().text
JsonSlurper slurper = new JsonSlurper()
Map parsedJson = slurper.parseText(response)
String idValue = parsedJson.children.uri
newString = idValue.replaceAll("[<>\\[\\]//]", "");
//def output = [newString]
def l = newString.split(',').collect{it as int}

这两行将使正在编辑的框变成红色,但是一旦完成单元格的编辑将是它的前一个颜色,因为这是编辑控件。控件是与DataGridViewCell完全独立的控件。 我将其放在CurrentCellDirtyStateChanged中,当您离开编辑时,该单元格将恢复为先前的颜色,并且如果您转到另一个单元格进行编辑,它将不会是红色的,因为这些控件在输入edit时似乎会重置(但我不是100%肯定)