我正在寻找并尝试不同的解决方案来解决我的问题,但没有一个有效。如果具有特定索引的单元格具有特定值,我需要在一行中的所有单元格中设置粗体字体。我做错了什么?
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (row.Cells[14].Value.ToString() == "Yes")
{
row.DefaultCellStyle.Font = new Font(dataGridView1.Font, FontStyle.Bold);
}
}
编辑: 抱歉,是我的错。条件语句始终检查错误的单元格,并且我的代码运行完美。
因此,如果
DataGridViewCell
有某个值,您希望该值以某种字体打印。
用于显示 DataGridViewCell 值的字体位于单元格的
DataGridViewCellStyle
中。
因此,我们可以使您的要求更加通用:如果 DataGridViewCell 有某个值,您希望该单元格使用特定的 DataGridViewCellStyle 来显示其值。
您可以使用两种方法:
对我来说,第一种方法似乎是最简单的。大多数单元格不会经常更改值,因此在我看来,仅当值更改时才执行此操作更有效,而不是每次都必须格式化单元格的值。
DataGridViewCell 可以(或不能)有
DataGridViewCellStyle
。如果单元格有样式,则它使用该样式。如果它没有样式(值等于 null),则使用 DefaultCellStyle
的 DataGridViewColumn
。如果该列也没有样式,则使用 DataGridView.DefaultCellStyle
。
要让单元格或列使用父级的单元格样式,只需将(默认)CellStyle 设置为空即可。实际使用的样式,检查完CellStyle、列的单元格样式等后在DataGridViewCell.InheritedStyle
因此,如果您希望某个单元格使用非默认的 DataGridViewCellStyle,只需指定您想要的单元格样式即可。如果您想再次使用该列的默认单元格样式,只需指定 null。
const string specialDisplayValue = "yes";
IEqualityComparer<string> CellTextcomparer => StringComparer.CurrentCultureIgnoreCase;
void OnCellValueChanged(DataGridViewCell cell)
{
string displayedCellValue = this.GetDisplayedValue(cell);
if (this.CellTextComparer.Equals(displayedCellValue, specialDisplayValue))
{
// special text shown, use special style with special font:
cell.Style = new DataGridViewCellStyle(cell.Column.InheritedStyle);
cell.Style.Font = new Font(cell.Style.Font, FontStyle.Bold);
}
else
{
// other value, use the default style:
cell.Style = null; // the style from the column will be used.
}
}
如果Columns的InheritedStyles不会改变,可以考虑在构造函数中只定义一次特殊样式。然后你只需决定是分配 null 还是特殊样式。如果所有列都使用相同的样式,则只需使用一种以 DataGridView.CellStyle 作为模板创建的特殊样式。
使用事件:
dataGridView1.CellFormatting += dataGridView1_CellFormatting;
private void dataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
string displayValue = e.Value.ToString();
if (this.CellTextComparer.Equals(displayValue, specialDisplayValue))
{
// special value, special font
e.CellStyle.Font = new Fone(e.CellStyle.Font, FontStyle.Bold);
}
// else: different value, don't change the font
}
注意:每次必须格式化单元格时都会调用此方法,即使单元格的值尚未更改。因此效率较低。