Когда речь заходит об отображании табличных данных на форме, первое что приходит в голову — это использовать элемент управления 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.

clip_image002

Рис. 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.

clip_image004

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

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

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