Изменение цвета ячейки Datagridview не работает - PullRequest
3 голосов
/ 08 июля 2010

У меня есть Datagridview, привязанный к данным, который хранит данные из базы данных

Я создал функцию, которая проверяла, находится ли дата в правильном диапазоне времени

, если ее правильное ничего не происходит.

иначе он должен изменить цвет строки / ячейки на красный

Я много чего пробовал, но ничего не работает

Вот метод, который я создал:


        private void CheckFactTermijn()
        {
            for (int i = 0; i < dataGridView1.Rows.Count; i++)
            {
                DateTime FactuurDatum = Convert.ToDateTime(dataGridView1.Rows[i].Cells[2].Value.ToString());
                int termijn = Convert.ToInt32(dataGridView1.Rows[i].Cells[7].Value.ToString());
                DateTime finalDate = FactuurDatum.AddDays((double)termijn);</p>

            if (finalDate > DateTime.Now)
            {
            }
            else
            {
                    dataGridView1.Rows[i].DefaultCellStyle.BackColor = Color.Red;
            }
        }
    }

Ответы [ 3 ]

3 голосов
/ 01 февраля 2013

Я полагаю, что решение заключается в том, КОГДА вы устанавливаете цвет, а не метод, в котором вы это делаете. Было предложено несколько различных событий, и некоторые действительно будут работать. Одна из проблем, связанных с использованием событий форматирования ячейки, привязки данных, завершения или даже событий рисования, заключается в том, что они запускаются несколько раз. Из того, что я понял, есть проблема с элементом управления datagridview в том, что вы не можете изменить цвет любой из ячеек, пока ПОСЛЕ формы не будет показано. Таким образом, методы, которые выполняются, или события, которые запускаются до вызова Shown (), не изменят цвет. События, которые рассматриваются как решение проблемы, обычно работают, но поскольку они вызываются много раз, возможно, это не самый эффективный ответ.

Вероятно, самое простое решение этой проблемы - поместить ваш код для заполнения / окрашивания ваших сеток в методе Shown () формы вместо конструктора. Ниже приведена ссылка на сообщение на форумах msdn, которое сообщило мне о решении, оно помечено как ответ на 3/4 пути вниз по странице.

MSDN на форуме с решением

1 голос
/ 08 июля 2010

Я не уверен, когда ваш код выполняется, но попробуйте установить свойства DefaultCellStyle вашего DataGridView в DataGridView.CellFormatting событии вашего DGV .

В приведенной выше ссылке на MSDN есть пример того, чтоты пытаешься сделать.

Обратите внимание, что вы не будете перебирать каждую строку в вашем DGV (как это делает ваш метод);вместо этого вы должны использовать свойство ColumnIndex DataGridViewCellFormattingEventArgs, чтобы проверить, для какого столбца сработало событие.

0 голосов
/ 08 июля 2010

dataGridView1.Rows [i] .DefaultCellStyle.BackColor = Color.Red;

Необходимо изменить bakColor для всего ряда.За исключением ячеек, имеющих собственный набор Style.BackColor .

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...