DatagridVIew 单单元格格式化

DatagridVIew single cell formatting

试图找到关于这个问题的答案,但没有找到对我有用的东西。 我需要根据不同的 conditions.Fof 示例更改我的 dataGridView 中单个单元格的字体颜色(背景颜色等)- 此 dataGridView 中同一行的另一个单元格中的值。 我之前找到的所有解决方案都不能为我解决这个问题。

下面是我解决这个问题的建议。

这是我的解决方案: 您需要创建事件 datagridView_cell_Formating:

并添加类似这样的代码:

 private void datagridView_cell_Formating(object sender, DataGridViewCellFormattingEventArgs e)
    {
        if (this.dataGridView1.Columns[e.ColumnIndex].Name == "Target_column")
        {
            if ((e.Value != null) && (dataGridView1.Rows[e.RowIndex].Cells["Condition_cell"].Value.ToString() == "value"))
            {
                e.CellStyle.ForeColor = Color.Yellow;
            }
            else if ((e.Value != null))
            {
                e.CellStyle.ForeColor = Color.Red;
            }
        }
    }

希望这会对某人有所帮助。

每个 DataGridView 都有一个 DefaultCellStyle。 DataGridView 的每个 DataGridViewColumn 可能有一个 DefaultCellStyle。如果这是 NULL,则使用 DataGridView 的 DefaultCellStyle。要查看列使用的实际单元格样式,请使用 InheritedCellStyle

同样,每个 DataGridViewCell 都有一个 Style。如果为空,则使用单元格列的 InheritedCellStyle,因此如果此列为空 DefaultCellStyle,,则使用 DataGridViewDefaultCellStyle。 DataGridViewCell实际使用的Style在属性InheritedCellStyle.

  • 单元格具有 non-null 样式:InheritedStyle 等于此
  • 单元格有空样式,列有non-null默认样式:Cell.InheritedStyle等于列默认样式
  • 单元格具有空样式,列具有空默认样式:Cell.InheritedStyle 等于 DataGridview 样式

如果只想改变某个单元格X的单元格样式,只需设置DefaultCellStyle即可。您可以克隆 InheritedStyle 并更改属性。

void SetCellBackColor(DataGridViewCell cell, Color color)
{
    cell.Style = (DataGridViewCellStyle)(cell.InheritedStyle.Clone());

    // or slightly more efficient:
    if (cell.Style == null)
       cell.Style = (DataGridViewCellStyle)(cell.InheritedStyle.Clone());

    cell.Style.BackColor = color;
}
void SetCellBackColorToDefault(DataGridViewCell cell)
{
    // set Style to null; the Column's InheritedStyle will be used
    cell.Style = null;
}
       protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
        {
         if (e.Row.RowType == DataControlRowType.DataRow)
        {
        DataRowView dr = (DataRowView)e.Row.DataItem;
        string temp = dr[3].ToString().Trim();
        int sub = int.Parse(temp);

           foreach (TableCell cell in e.Row.Cells)
            {
               if (sub > 0)
               {
                e.Row.Cells[3].BackColor = Color.Coral;
                }
                if (sub > 25)
                 {
                  e.Row.Cells[5].BackColor = Color.Coral;
                 }
               }
           }
      }

如果这没有帮助,请详细说明要求。