天天看點

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;
                                }
                            }                  
                        } 
                    }
                }
            }
        }
           

繼續閱讀