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;
}
}
答案 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
您将在他们给出的示例中看到,您可以在此处理程序中寻址当前行,而不需要循环所有行。