Я наследую элемент управления DataGridView для элемента управления, который я разрабатываю. Моя цель - сделать каждый цвет строки, представляющий состояние объекта, которое может меняться во время выполнения. В моем объекте реализуется шаблон наблюдаемого шаблона. Итак, я решил разработать свой собственный класс DataGridViewRow, внедряя шаблон Observer и делая свою строку наблюдением за объектом. В этом классе, у меня есть этот метод:Изменение цвета строки datagridview во время выполнения
public void UpdateColors(int state)
{
DefaultCellStyle.BackColor = m_ETBackColors[state];
DefaultCellStyle.ForeColor = m_ETForeColors[state];
}
Я не могу наблюдать свой объект на данный момент, так, чтобы проверить изменения цвета, я называю свой метод UpdateColors на выбранные строки на событии SelectionChanged.
И вот момент, когда он не работает! Мои ранее выбранные строки остаются синими (например, когда они были выбраны), тексты ячеек слоируются при прокрутке. Я попытался вызвать DataGridView.Refresh(), но это тоже не работает.
Я должен добавить, что мой datagridview не привязан к источнику данных: я не знаю, сколько столбцов у меня есть до выполнения, поэтому я могу его подавать вручную.
Может ли кто-нибудь сказать мне, что я делаю неправильно?
========== ========== Update
Это работает:
public void UpdateColors(int state)
{
DefaultCellStyle.BackColor = System.Drawing.Color.Yellow;
DefaultCellStyle.ForeColor = System.Drawing.Color.Black;
}
Но это не работает:
public void UpdateColors(int state)
{
DefaultCellStyle.BackColor = m_ETBackColors[nEtattech];
DefaultCellStyle.ForeColor = m_ETForeColors[nEtattech];
}
с:
System.Drawing.Color[] m_ETBackColors = new System.Drawing.Color[] { };
System.Drawing.Color[] m_ETForeColors = new System.Drawing.Color[] { };
Там нет переполнения массива: они являются параметрами конструктора.
Я уже пробовал это, установка пользовательских цветовых свойств для моей строки в UpdateColors и используя событие CellFormatting в моем DataGrid , но он не работает: 'частная пустота DataGridViewEtat_Technique_CellFormatting (объект отправителя, System.Windows.Forms.DataGridViewCellFormattingEventArgs е) { DataGridViewTechnicalStateRow строка = Ряды [e.RowIndex] в качестве DataGridViewTechnicalStateRow; строка.DefaultCellStyle.BackColor = row.BCL; строка.DefaultCellStyle.ForeColor = row.FCL; } ' – Rifu