还原 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中的合并单元格