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

        }
4

2 回答 2

1

已经为每一行引发了 RowStyle 事件 - http://documentation.devexpress.com/#WindowsForms/DevExpressXtraGridViewsGridGridView_RowStyletopic

在处理 RowGroups http://documentation.devexpress.com/#WindowsForms/CustomDocument695时,RowStyleEventArgs e (e.RowHandle) 也可以是负数

循环的每次迭代都使用 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;
            }
        }
    }
于 2013-09-05T22:26:07.830 回答
0

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

检查此链接,它显示了如何做到这一点: http ://documentation.devexpress.com/#windowsforms/DevExpressXtraGridViewsGridGridView_RowStyletopic

正如您将在他们给出的示例中看到的那样,您可以在此处理程序中处理当前行,并且不需要循环所有行。

于 2013-09-05T22:29:55.527 回答