特定 dataGridView 行中的粗体字体

问题描述 投票:0回答:1

我正在寻找并尝试不同的解决方案来解决我的问题,但没有一个有效。如果具有特定索引的单元格具有特定值,我需要在一行中的所有单元格中设置粗体字体。我做错了什么?

foreach (DataGridViewRow row in dataGridView1.Rows)
                    {
                        if (row.Cells[14].Value.ToString() == "Yes")
                        {
                            row.DefaultCellStyle.Font = new Font(dataGridView1.Font, FontStyle.Bold);
                        }
                    }

编辑: 抱歉,是我的错。条件语句始终检查错误的单元格,并且我的代码运行完美。

c# winforms datagridview fonts
1个回答
1
投票

因此,如果

DataGridViewCell
有某个值,您希望该值以某种字体打印。

用于显示 DataGridViewCell 值的字体位于单元格的

DataGridViewCellStyle
中。

因此,我们可以使您的要求更加通用:如果 DataGridViewCell 有某个值,您希望该单元格使用特定的 DataGridViewCellStyle 来显示其值。

您可以使用两种方法:

  • 每当单元格更改值时,如果它已获得“特定值”,则为该单元格指定特殊样式,每当它更改为另一个值时,让它使用默认样式。
  • 每当需要格式化单元格的值时,请格式化单元格。

对我来说,第一种方法似乎是最简单的。大多数单元格不会经常更改值,因此在我看来,仅当值更改时才执行此操作更有效,而不是每次都必须格式化单元格的值。

关于 DataGridViewCellStyles

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
}

注意:每次必须格式化单元格时都会调用此方法,即使单元格的值尚未更改。因此效率较低。

© www.soinside.com 2019 - 2024. All rights reserved.