需求:根據相鄰行條件判斷,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;
}
}
}
}
}
}
}