还原datagridview控件中的单元格样式更改?

时间:2014-08-21 18:59:46

标签: c# winforms datagridview

我的程序显示绑定的datagridview。如果用户更改任何单元格中的值,程序将更改该单元格的背景颜色。这是代码:

 private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
 {
    this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.BackColor = Color.PaleGoldenrod;
 }

我的程序有一个'撤消'基本上执行dataTable.RejectChange();的按钮。当用户激活“撤消”按钮时,datagridview中更改的所有内容都将恢复为原始值。但是,单元格背景颜色仍然像用户更改了单元格中的值。

很简单,我想知道是否有一种方法可以用来单元格样式(主要是背景颜色)恢复到原始状态(交替灰色和白)?

我正在考虑使用以下语句捕获原始默认设置:

defaultCellStyle = this.dataGridView1.DefaultCellStyle;

而且,当执行撤消时,我可以执行以下操作:

this.dataGridView1.DefaultCellStyle = this.defaultCellStyle;

然而,这似乎不起作用,因为gridview仍然保留了单元格中的着色,就好像它们已被更改一样。

我不想跟踪每个已更改的单元格,只是为了遍历它们并将背景颜色更改为默认值。我希望有一种方法可以获取整个datagridview并将其恢复为默认设置。有谁知道我怎么能做到这一点?

2 个答案:

答案 0 :(得分:4)

如果您执行了类似下面代码的操作,则无需跟踪每个已更改的单元格:

        dt.RejectChanges();
        for (int x = 0; x < Grid.RowCount; x++)
        {
            for (int y = 0; y < Grid.ColumnCount; y++)
            {
                if (Grid.Rows[x].Cells[y].HasStyle)
                {
                    Grid.Rows[x].Cells[y].Style = null;
                }
            }
        }

这不是最漂亮的,但如果没有CellValueChanged针对RejectChanges来电,可能就是这样。当然,这假设您的默认单元格样式始终是您要重置为的样式。

编辑:纠正了问题,一旦某个单元格的值发生了变化,HasStyle始终为true

答案 1 :(得分:0)

我正在更改级别的BackColor而不是 Cell 级别,但这是我将颜色更改还原为所有行的默认设置的操作:

        foreach (DataGridViewRow R in dgv_TermTasks.Rows)
        {
            R.DefaultCellStyle.BackColor = dgv_TermTasks.DefaultCellStyle.BackColor;
        }

dgv_TermTasks是DataGridView本身。