在devexpress网格的背景颜色 - winforms网格

时间:2013-09-05 18:59:18

标签: c# .net devexpress devexpress-windows-ui

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

我想根据ID的值给出背景颜色(以另一种方式)。 如果条目是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;
                        }

        }

2 个答案:

答案 0 :(得分:1)

每行都会引发RowStyle事件 - http://documentation.devexpress.com/#WindowsForms/DevExpressXtraGridViewsGridGridView_RowStyletopic

RowStyleEventArgs e(e.RowHandle)在处理RowGroups时也可能是否定的 http://documentation.devexpress.com/#WindowsForms/CustomDocument695

循环的每次迭代都使用e.RowHandle而不检查负值 - 这会改变整个列的背面颜色。

我将下面的代码修改为基于ID列在偶数行上生成交替行颜色模式的版本。

     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;
            }
        }
    }

答案 1 :(得分:0)

自从我使用DX之后已经有一段时间了,但是这个事件看起来像是每行引发的,所以你的代码实际上做的是多次重新绘制 - 我猜这可能是问题。

检查此链接,它显示了如何执行此操作: http://documentation.devexpress.com/#windowsforms/DevExpressXtraGridViewsGridGridView_RowStyletopic

您将在他们给出的示例中看到,您可以在此处理程序中寻址当前行,而不需要循环所有行。