Август 14

Когда речь заходит об отображании табличных данных на форме, первое что приходит в голову — это использовать элемент управления DataGridView, обладающий поистине огромными возможностями (см. статью http://www.rsdn.ru/article/dotnet/datagridview20.xml). Но, как говорит Жванецкий, есть нюанс. Дело в том, что при отображении большого числа строк, пользоваться этим контролом несколько неудобно: строки сливаются, глаз то и дело перескакивает на соседнюю строчку. Во многих платных компонентах есть чересстрочная подсветка, суть которой — использование разных цветов фона для соседних строк.

Реализовать такое поведение DataGridView можно двумя способами.

Способ первый. Подписываемся на событие DataGridView.RowPrePaint, которое происходит перед окрашиванием объекта DataGridViewRow, и изменяем свойство DefaultCellStyle.BackColor. Значение BackColor выбираем в зависимости от того, четная либо нечетная строка обрабатывается:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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.

clip_image002

Рис. 1. Чересстрочная подсветка

Второй способ. Создаем собственный класс-наследник DataGgidView и переопределяем метод OnRowPrePaint:

1
2
3
4
5
6
7
8
9
10
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.

clip_image004

Рис. 2. Созданный компонент на панели инструментов

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

Исходный код можно скачать здесь: http://csdeveloper.ru/download/sample-001.rar