Цвета фона в сетке devexpress — сетка winforms

ID      Subject     Marks
1000    English       65
1000    Physics       70
1000    Chemistry     75
1001    English       78
1001    Physics       71
1001    Chemistry     60
1002    English       85
1002    Physics       80
1002    Chemistry     79

Я хочу указать цвета фона (альтернативным способом) на основе значения идентификатора. Если записи для 1000, то я хотел бы дать 1000 записей цвет фона, скажем, например, голубой, затем для записей ID 1001 другой цвет, затем снова для 1002, дать тот же цвет фона (или может быть другой один).

Я использую этот код ниже, однако я неправильно получаю цвета фона. Я получаю все строки в сетке с голубым цветом фона.

Есть предположения?

private void gridView1_RowStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowStyleEventArgs e)
        {
                    ColumnView View = dataGrid.MainView as ColumnView;
                        DevExpress.XtraGrid.Columns.GridColumn col = View.Columns["ID"];
                        for (int i = 0; i <= gridView1.DataRowCount - 1; i++)
                        {
                            if (gridView1.GetRowCellValue(i, col) != gridView1.GetRowCellValue((i + 1), col))
                            {
                                e.Appearance.BackColor = Color.LightCyan;
                            }
                        if (i == gridView1.DataRowCount) break;
                        }

        }

person Sharpeye500    schedule 05.09.2013    source источник
comment
Можете ли вы описать, какой именно результат вы получаете?   -  person G-Man    schedule 05.09.2013
comment
Добавлено в вопрос, он дает одинаковый цвет для всех строк.   -  person Sharpeye500    schedule 05.09.2013


Ответы (2)


Событие RowStyle уже вызывается для каждой строки — http://documentation.devexpress.com/#WindowsForms/DevExpressXtraGridViewsGridGridView_RowStyletopic

RowStyleEventArgs e (e.RowHandle) также может иметь отрицательное значение при работе с RowGroups http://documentation.devexpress.com/#WindowsForms/CustomDocument695

Каждая итерация вашего цикла использовала e.RowHandle без проверки отрицательных значений, что меняло задний цвет всего столбца.

Я изменил приведенный ниже код на версию, которая создает чередующийся цветовой шаблон строки в четных строках на основе столбца идентификатора.

     private void dataGrid_RowStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowStyleEventArgs e)
    {
        if (e.RowHandle >= 0)
        {
            ColumnView View = dataGrid.MainView as ColumnView;
            DevExpress.XtraGrid.Columns.GridColumn col = View.Columns["ID"];
            if (Convert.ToInt32(gridView1.GetRowCellValue(e.RowHandle, col)) % 2 == 0)
            {
                e.Appearance.BackColor = Color.LightCyan;
            }
            else
            {
                e.Appearance.BackColor = Color.White;
            }
        }
    }
person tim    schedule 05.09.2013

Прошло некоторое время с тех пор, как я работал с DX-вещами, но это событие выглядит как что-то, что вызывается на строку, и поэтому ваш код на самом деле перерисовывает несколько раз - я предполагаю, что это, возможно, часть проблемы .

Проверьте эту ссылку, она показывает, как это сделать: http://documentation.devexpress.com/#windowsforms/DevExpressXtraGridViewsGridGridView_RowStyletopic

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

person Stephen Byrne    schedule 05.09.2013