Как изменить цвет фона отдельной ячейки в windows.forms.datagrid? - PullRequest
0 голосов
/ 11 декабря 2010

Я отчаянно пытаюсь понять, как изменить цвет фона отдельной ячейки в dataGridView формы winforms.У меня есть два столбца: если я изменяю содержимое во втором столбце, я хочу, чтобы ячейка в первом столбце этой строки соответственно меняла фон.

    private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
    {
        if (e.ColumnIndex != 0 || e.RowIndex == -1)
            return;
        if (dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString() == "Red")
            e.CellStyle.BackColor = Color.Red;
        else
            e.CellStyle.BackColor = Color.White;
    }

    private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
    {
        if (e.ColumnIndex != 1 || e.RowIndex == -1)
            return;
        // dataGridView1.Rows[e.RowIndex].Cells[0]. ???
    }

Первый обработчик события устанавливает backColor ячеекв первом столбце, если они окрашены.Обработчик второго события должен указать первой ячейке рисовать, если значение изменилось.Если я изменяю ширину столбцов, он рисует правильный цвет, поэтому первый обработчик выполняет свою работу.Но как вызвать рисование ячейки?

Спасибо за помощь.

Ответы [ 4 ]

0 голосов
/ 09 июня 2017

Попробуйте это.

dataGridView1.Rows[indexhere].Cells[indexhere].Style.ForeColor = Color.Yellow;
0 голосов
/ 11 декабря 2010

Вы должны создать новый объект стиля ячейки, установить его на нужный вам цвет и затем применить его к текущей ячейке.

private DataGridViewCellStyle CellStyleGreenBackgnd;

CellStyleGreenBackgnd.BackColor = Color.LightGreen;

dataGridView.CurrentCell.Style.ApplyStyle (CellStyleGreenBackgnd);

0 голосов
/ 11 декабря 2010

Я бы подумал, что редактирование вызвало бы перерисовку, но если это событие не запускается после редактирования, вы должны быть в состоянии вызвать проблему с чем-то вроде:

dataGridView1.InvalidateCell(e.RowIndex, 1);
0 голосов
/ 11 декабря 2010

ОК, вот плохой взлом:

Если я вставлю

var x = dataGridView1.Columns[0].DefaultCellStyle;
dataGridView1.Columns[0].DefaultCellStyle = null;
dataGridView1.Columns[0].DefaultCellStyle = x;

в обработчик событий CellValueChanged, весь первый столбец перерисовывается.Так что моя камера тоже перекрашена.Но это не грязно, не так ли?

...