- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 DataGridView,我想通过为这些值提供不同的 ForeColor 来向运算符(operator)显示哪些值发生了变化。运算符(operator)可以通过单击放弃按钮来决定放弃所有更改。在这种情况下,我需要让单元格使用继承的样式。
我的问题是,一旦我创建了一个 CellStyle 来指示它已更改,我就无法撤消它,以便单元格使用继承的样式。
我做了一些研究。在文章中Cell Styles in the Windows Forms DataGridView Control MSDN 警告:
Caching the values stored in the cell's Style property is important regardless of whether a particular style value is set. If you temporarily replace a style setting, restoring it to its original "not set" state ensures that the cell will go back to inheriting the style setting from a higher level.
唉,这似乎行不通:
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/
我是一名优秀的程序员,十分优秀!