gpt4 book ai didi

c# - 如何将 DataGridViewCellStyle 恢复为其继承值

转载 作者:行者123 更新时间:2023-11-30 16:03:18 31 4
gpt4 key购买 nike

我有一个 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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com