需求:根据相邻行条件判断,ID一致者设置相同的背景色,相邻之间的ID设置不同的背景色来区分。
效果如下图所示:
设计思路:对相邻行ID进行比较,结果相同设置相同背景色,结果不同的设置与前者不同背景色。初始化阶段获取小于等于当前控件显示数目进行初始化显示;显示内容过多时,为了性能考虑,使用DataGridView自带Scroll事件来设置背景色。
Load事件:
int display = 0;
//34为当前页默认显示行的最大值
if (dgv_Test.Rows.Count > 34)
{
display = 34;
}
else
{
display = dgv_Test.Rows.Count;
}
//循环当前显示行
for (int i = 0; i < display; i++)
{
dgv_Test.Rows[0].DefaultCellStyle.BackColor = Color.FromArgb(242, 242, 242);
if (dgv_Test.Rows[y].Cells["ID"].Value.ToString() == dgv_Test.Rows[y + 1].Cells["ID"].Value.ToString())
{
dgv_Test.Rows[y + 1].DefaultCellStyle.BackColor = dgv_Test.Rows[y].DefaultCellStyle.BackColor;
}
else
{
if (dgv_Test.Rows[y].DefaultCellStyle.BackColor == Color.White)
{
dgv_Test.Rows[y + 1].DefaultCellStyle.BackColor = Color.FromArgb(242, 242, 242);
}
else
{
dgv_Test.Rows[y + 1].DefaultCellStyle.BackColor = Color.White;
}
}
}
Scroll事件:
private void dgv_Test_Scroll(object sender, ScrollEventArgs e)
{
//判断滚动条滚动方向是否为垂直滚动
if (e.ScrollOrientation == ScrollOrientation.VerticalScroll)
{
if (dgv_Test.DisplayedRowCount(false) > 0)
{
//当滚动条向下滚动不等于最低端时
if (e.NewValue + dgv_Test.DisplayedRowCount(false) != dgv_Test.Rows.Count)
{
for (int y = e.NewValue; y < e.NewValue + dgv_Test.DisplayedRowCount(false); y++)
{
if (dgv_Test.Rows[y].Cells["ID"].Value.ToString() == dgv_Test.Rows[y + 1].Cells["ID"].Value.ToString())
{
dgv_Test.Rows[y + 1].DefaultCellStyle.BackColor = dgv_Test.Rows[y].DefaultCellStyle.BackColor;
}
else
{
if (dgv_Test.Rows[y].DefaultCellStyle.BackColor == Color.White)
{
dgv_Test.Rows[y + 1].DefaultCellStyle.BackColor = Color.FromArgb(242, 242, 242);
}
else
{
dgv_Test.Rows[y + 1].DefaultCellStyle.BackColor = Color.White;
}
}
}
}
}
}
}