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

Posted

技术标签:

【中文标题】还原 datagridview 控件中的单元格样式更改?【英文标题】:Revert cell style changes in a datagridview control? 【发布时间】:2014-08-21 18:59:45 【问题描述】:

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

 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 恢复为默认设置。有谁知道我如何做到这一点?

【问题讨论】:

【参考方案1】:

如果您执行以下代码,则不必跟踪每个更改的单元格:

        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 的问题。

【讨论】:

你说得对……不是最漂亮的,但它让我得到了我想要的。非常感谢! 没问题凯文。不过,我注意到我的回答有一点问题,所以我更新了它以将样式设置为 null 以避免为该单元格永久设置​​ HasStyle 标志。【参考方案2】:

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

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

dgv_TermTasks 是 DataGridView 本身。

【讨论】:

以上是关于还原 datagridview 控件中的单元格样式更改?的主要内容,如果未能解决你的问题,请参考以下文章

使用按钮将数值从 Numeric 控件传递到 DataGridView 控件中的相应单元格

C# 中datagridview中的如何给单元格设置滚动条,是单元格不是整个datagridview

c#winfrom中datagridview控件如何自定义一个datagridview的列。主要是想实现类似EXCEL中的合并单元格

设置DataGridView控件中字体的样式

更改 datagridview 行中单个单元格的样式

DataGridView控件中如何获取选中单元格内容?