开发快速网格 - winForms 网格中的背景颜色

本文关键字:网格 背景 颜色 开发 winForms | 更新日期: 2023-09-27 18:30:16

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

开发快速网格 - winForms 网格中的背景颜色

已经为每一行引发 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;
            }
        }
    }

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

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

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