C# 如何重置或刷新DataGridView单元格背面颜色?

C# 如何重置或刷新DataGridView单元格背面颜色?,c#,datagridview,C#,Datagridview,我面临有关DataGridView单元格背面颜色的问题 int cnt = dataGridView1.Rows.Count; for (int i = 0; i < cnt; i++) { string starting = dataGridView1.Rows[i].Cells[9].Value.ToString(); string startings = Convert.ToDateTime(starti

我面临有关DataGridView单元格背面颜色的问题

int cnt = dataGridView1.Rows.Count;
        for (int i = 0; i < cnt; i++)
        {
            string starting = dataGridView1.Rows[i].Cells[9].Value.ToString();
            string startings = Convert.ToDateTime(starting.ToString()).ToString("dd MMM yyyy");
            string ending = dataGridView1.Rows[i].Cells[10].Value.ToString();
            string endings = Convert.ToDateTime(ending.ToString()).ToString("dd MMM yyyy");

            TimeSpan ts = Convert.ToDateTime(ending.ToString()) - Convert.ToDateTime(starting.ToString());
            double diff = ts.TotalDays + 1;
            int dif = Convert.ToInt32(diff);
            for (int d = 0; d < dif; d++)
            {
                string str = Convert.ToDateTime(starting.ToString()).AddDays(d).ToString("dd MMM yyyy");
                dataGridView2.Rows[i].Cells[str].Style.BackColor = Color.Olive;
            }
        }    
首先,我正在更改datagridview2的特定单元格的背景色

int cnt = dataGridView1.Rows.Count;
        for (int i = 0; i < cnt; i++)
        {
            string starting = dataGridView1.Rows[i].Cells[9].Value.ToString();
            string startings = Convert.ToDateTime(starting.ToString()).ToString("dd MMM yyyy");
            string ending = dataGridView1.Rows[i].Cells[10].Value.ToString();
            string endings = Convert.ToDateTime(ending.ToString()).ToString("dd MMM yyyy");

            TimeSpan ts = Convert.ToDateTime(ending.ToString()) - Convert.ToDateTime(starting.ToString());
            double diff = ts.TotalDays + 1;
            int dif = Convert.ToInt32(diff);
            for (int d = 0; d < dif; d++)
            {
                string str = Convert.ToDateTime(starting.ToString()).AddDays(d).ToString("dd MMM yyyy");
                dataGridView2.Rows[i].Cells[str].Style.BackColor = Color.Olive;
            }
        }    
我需要根据datagridview1中输入的新值重置背景色。这是我的密码

Private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
    {
        if (e.ColumnIndex == 7 || e.ColumnIndex == 8 || e.ColumnIndex == 9 || e.ColumnIndex == 10)
        {
            int prd_per_d = Convert.ToInt32(dataGridView1.CurrentRow.Cells[7].Value);
            int qty=Convert.ToInt32(dataGridView1.CurrentRow.Cells[6].Value);
            dataGridView1.CurrentRow.Cells[8].Value = qty / prd_per_d + 5;

            DateTime sdt = Convert.ToDateTime(dataGridView1.CurrentRow.Cells[9].Value);
            int req_day = Convert.ToInt32(dataGridView1.CurrentRow.Cells[8].Value);
            dataGridView1.CurrentRow.Cells[10].Value = sdt.AddDays(req_day);

            int cnt = dataGridView1.Rows.Count;
            for (int i = 0; i < cnt; i++)
            {
                string starting = dataGridView1.Rows[i].Cells[9].Value.ToString();
                string startings = Convert.ToDateTime(starting.ToString()).ToString("dd MMM yyyy");
                string ending = dataGridView1.Rows[i].Cells[10].Value.ToString();
                string endings = Convert.ToDateTime(ending.ToString()).ToString("dd MMM yyyy");

                TimeSpan ts = Convert.ToDateTime(ending.ToString()) - Convert.ToDateTime(starting.ToString());
                double diff = ts.TotalDays + 1;
                int dif = Convert.ToInt32(diff);

                for (int d = 0; d < dif; d++)
                {
                    string str = Convert.ToDateTime(starting.ToString()).AddDays(d).ToString("dd MMM yyyy");

                    dataGridView2.Rows[i].Cells[str].Style.BackColor = Color.Olive;
                }
            }

        }
    }    
但当我在datagridview1中输入值时,并没有发生可见的更改。它仅适用于新单元格,但不会将现有彩色单元格更改为默认值。
知道为什么吗?

大约一周前我也遇到了同样的问题。我只用两行程序代码就解决了这个问题。希望这能帮助你

        this.dataGridView1.RowsDefaultCellStyle.BackColor = Color.Bisque;
        this.dataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.Beige;

嗯,你错过了CellEndEdit事件的ui更新,对吗?这很可能是因为它仅限于刷新已编辑的单元格。也许你应该在结尾添加一个DGV.Refresh调用?嗯,你确定那些单元格/列名吗?我怀疑他们里面是否有空间。。!但是,依我看,应该抛出一个异常