Damian Jones Ответов: 2

Поверните одну ячейку в синий цвет на основе значения в другом столбце


Я создал dgv со скрытым столбцом. Если в этом столбце есть значение, я хочу превратить фон ячейки[3] в этой строке в синий. Ближе всего я подошел к тому, чтобы сделать всю колонку синей. Где я ошибаюсь? Вот код. ТИА.

for (int i = 0; i < dgvSODetail.Rows.Count; ++i)
           {
               if (dgvSODetail.Rows[i].Cells["Notes"].Value!=null)
               {
                   dgvSODetail.Rows[i].Cells[3].Style.BackColor = Color.Blue;
               }
               else
               {
                   dgvSODetail.Rows[i].Cells[3].Style.BackColor = Color.White;
               }
           }


Что я уже пробовал:

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

Richard MacCutchan

Вы забыли сказать нам, что происходит, когда вы запускаете этот код.

Damian Jones

Когда я запускаю код, я получаю полный столбец синего цвета, а не только ячейку в этом столбце.

Richard MacCutchan

Я только что попробовал его, и он отлично работает для меня. Я предлагаю вам воспользоваться вашим отладчиком и выяснить, что происходит.

raddevus

Вы получаете полный столбец синего цвета, потому что он перебирает каждую строку в datagridview и устанавливает ее синим цветом : dgvSODetail.Rows[i].Клетки[3].Стиль.Цвет Фона = Цвет.Синий

Строки[i].Клеток[3] в каждой строке, так как я изменения.

2 Ответов

Рейтинг:
8

Damian Jones

Добрался, просто размалывая его.... Подержанная Консоль.Writeline, чтобы помочь мне увидеть, что происходит:

for (int i = 0; i < dgvSODetail.Rows.Count; ++i)
            {
                if (dgvSODetail.Rows[i].Cells["Notes"].Value != null)
                {
                    if (dgvSODetail.Rows[i].Cells["Notes"].Value.ToString().Length > 0)
                    {
                        Console.WriteLine(dgvSODetail.Rows[i].Cells["Notes"].Value.ToString());

                        dgvSODetail.Rows[i].Cells[3].Style.BackColor = Color.Blue;
                    }
                }
                else
                {
                    dgvSODetail.Rows[i].Cells[3].Style.BackColor = Color.White;
                }


Рейтинг:
2

OriginalGriff

Видеть здесь: Раскрашивание ячеек DataGridView в соответствии с их содержимым в WinForms[^] - он не делает именно то, что вы хотите, но все, что вам нужно сделать, это ссылаться на правый столбец вместо текущего.