天天看点

Winform DataGridView根据相邻行条件判断设置背景色【Scroll事件】

需求:根据相邻行条件判断,ID一致者设置相同的背景色,相邻之间的ID设置不同的背景色来区分。

效果如下图所示:

Winform DataGridView根据相邻行条件判断设置背景色【Scroll事件】

设计思路:对相邻行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;
                                }
                            }                  
                        } 
                    }
                }
            }
        }
           

继续阅读