Чересстрочная подсветка в DataGridView
Когда речь заходит об отображании табличных данных на форме, первое что приходит в голову — это использовать элемент управления DataGridView, обладающий поистине огромными возможностями (см. статью http://www.rsdn.ru/article/dotnet/datagridview20.xml). Но, как говорит Жванецкий, есть нюанс. Дело в том, что при отображении большого числа строк, пользоваться этим контролом несколько неудобно: строки сливаются, глаз то и дело перескакивает на соседнюю строчку. Во многих платных компонентах есть чересстрочная подсветка, суть которой — использование разных цветов фона для соседних строк.
Реализовать такое поведение DataGridView можно двумя способами.
Способ первый. Подписываемся на событие DataGridView.RowPrePaint, которое происходит перед окрашиванием объекта DataGridViewRow, и изменяем свойство DefaultCellStyle.BackColor. Значение BackColor выбираем в зависимости от того, четная либо нечетная строка обрабатывается:
void dataGridView1_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
{
// получаем текущий элемент DataGridView
DataGridView grid = sender as DataGridView;
if (grid != null)
{
if (e.RowIndex % 2 == 1)
// нечетная строка
grid.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.LemonChiffon;
else
// четная строка
grid.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.WhiteSmoke;
}
}
Результат можно наблюдать на рис. 1.
Рис. 1. Чересстрочная подсветка
Второй способ. Создаем собственный класс-наследник DataGgidView и переопределяем метод OnRowPrePaint:
class MyDataGridView:DataGridView
{
protected override void OnRowPrePaint(DataGridViewRowPrePaintEventArgs e)
{
if (e.RowIndex % 2 == 1)
// нечетная строка
this.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.LemonChiffon;
else
// четная строка
this.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.WhiteSmoke;
base.OnRowPrePaint(e);
}
}
После компиляции проекта на Toolbox’е (рис. 2) появился наш компонент MyDataGridView, использование которого ничем не отличается от использования стандартного DataGridView.
![]()
Рис. 2. Созданный компонент на панели инструментов
Второй способ является предпочтительным когда в приложении используется несколько объектов DataGridView и для всех их используется единый стиль оформления.
Исходный код можно скачать здесь: http://csdeveloper.ru/download/sample-001.rar
