我有一个 DataGridView,我想通过为这些值提供不同的 ForeColor 来向运算符(operator)显示哪些值发生了变化。运算符(operator)可以通过单击“放弃”按钮来决定放弃所有更改。在这种情况下,我需要让单元格使用继承的样式。
我的问题是,一旦我创建了一个 CellStyle 来指示它已更改,我就无法撤消此操作,因此单元格使用继承的样式。
我做了一些研究。在文章 Cell Styles in the Windows Forms DataGridView Control MSDN 警告:
唉,这似乎不起作用:
DataGridViewCell cell = ...;
Debug.Assert(!cell.HasStyle); // cell is not using its own style
var cachedColor = cell.Style.ForeColor; // cache the original color
cell.Style.ForeColor = Color.Red; // indicate a change
Debug.Assert(cell.HasStyle); // now cell is using its own style
// restore to the 'not set' state:
cell.Style.ForeColor = cachedColor;
Debug.Assert(!cell.HasStyle); // exception, not using inherited style
cell.Style = cell.InheritedStyle; // try other method to restore
Debug.Assert(!cell.HasStyle); // still exception
所以问题: 如何将样式设置恢复到原来的“未设置”状态?
最佳答案
看来我完全误解了 Cell.Style 和 Cell.InheritedStyle。
我认为继承的样式是从行/交替行/DataGridView继承的样式,并且样式是生成的样式。
不是!
生成的样式是 DataGridViewCell.InheritedStyle。这个样式等于 DataGridViewCell.Style,或者如果它有一个空值,它等于 DataGridViewRow.InheritedStyle 的样式,它又等于 DataGridViewRow.DefaultStyle 的值,或者如果它是空的,则 DataGridView.AlternatingRowsDefaultCellStyle 等。
所以要知道实际使用的是哪种样式,请获取 DataGridViewCell.InheritedStyle,以指定特定样式更改 DataGridViewCell.Style 的属性,它会在您获取时自动创建并填充继承值。
要丢弃 DataGridViewCell.Style,只需将其设置为 null。之后 DataGridViewCell.HasStyle 将是 false 并且 DataGridViewCell.InheritedStyle 将是从交替行/所有行继承的样式。
例子:
- “更改”按钮会将当前单元格的前景色更改为红色,将整行的背景色更改为 AliceBlue
- 一个按钮“放弃”将恢复到默认的单元格样式
private void buttonChange_Click(object sender, EventArgs e)
{
DataGridViewCell cell = this.dataGridView1.CurrentCell;
DataGridViewRow row = cell.OwningRow;
if (!row.HasDefaultCellStyle)
{
row.DefaultCellStyle.BackColor = Color.AliceBlue;
}
if (!cell.HasStyle)
{
cell.Style.ForeColor = Color.Red;
}
}
结果:当前单元格以红色前景色显示,当前行以AliceBlue背景色显示
private void buttonDiscard_Click(object sender, EventArgs e)
{
DataGridViewCell cell = this.dataGridView1.CurrentCell;
DataGridViewRow row = cell.OwningRow;
if (row.HasDefaultCellStyle)
{
row.DefaultCellStyle = null;
Debug.Assert(!row.HasDefaultCellStyle);
}
if (cell.HasStyle)
{
cell.Style = null;
Debug.WriteLine(!cell.HasStyle);
}
}
结果:当前单元格和当前行以其原始颜色显示
关于c# - 如何将 DataGridViewCellStyle 恢复为其继承的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36545774/