开发快速网格 - 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;
}
}
已经为每一行引发 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
正如您将在他们给出的示例中看到的那样,您可以在此处理程序中寻址当前行,并且不需要循环所有行。