C# 更改DataGridView中特定单元格的前景色

C# 更改DataGridView中特定单元格的前景色,c#,winforms,datagridview,C#,Winforms,Datagridview,我正在尝试更改datagridview中特定单元格的前景色。我想给同一行中的不同单元格赋予不同的颜色 grid.Rows[row].Cells[col].Style.ForeColor = Color.Red 使用上述选项将更改所有行的颜色,而不仅仅是要更改的单元格 有没有一种方法可以单独改变特定单元格的颜色,而不影响行中的其他单元格 似乎我需要更改一些我不熟悉的行属性。您可以使用 dgv.Rows[curRowIndex].DefaultCellStyle.SelectionBackColo

我正在尝试更改datagridview中特定单元格的前景色。我想给同一行中的不同单元格赋予不同的颜色

grid.Rows[row].Cells[col].Style.ForeColor = Color.Red
使用上述选项将更改所有行的颜色,而不仅仅是要更改的单元格

有没有一种方法可以单独改变特定单元格的颜色,而不影响行中的其他单元格

似乎我需要更改一些我不熟悉的行属性。

您可以使用

dgv.Rows[curRowIndex].DefaultCellStyle.SelectionBackColor = Color.Blue;
使用上述选项将更改所有行的颜色,而不仅仅是要更改的单元格

不,这是不对的。它只会在指定索引处更改单元格的文本颜色(前景色)

您需要检查代码中是否没有在其他地方设置行的前景色

下面的代码可以很好地更改背景色和前景色

//this will change the color of the text that is written
dataGridView1.Rows[0].Cells[4].Style.ForeColor = Color.Red;

//this will change the background of entire cell
dataGridView1.Rows[0].Cells[4].Style.BackColor = Color.Yellow;

使用CellFormatting事件:

void grid_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
   DataGridViewCell cell = grid.Rows[e.RowIndex].Cells[e.ColumnIndex];
   if (cell.Value is double && 0 == (double)cell.Value) { e.CellStyle.ForeColor = Color.Red; }
}
如果你能写下你的条件来找到特定的单元格

或者试试这个

private void ColorRows()
   {
     foreach (DataGridViewRow row in dataGridViewTest.Rows)
     {
       int value = Convert.ToInt32(row.Cells[0].Value);
       row.DefaultCellStyle.BackColor = GetColor(value);
     }
   }

   private Color GetColor(int value)
   {
     Color c = new Color();
     if (value == 0)
       c = Color.Red;
     return c;
   }

   private void dataGridViewTest_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
   {
     ColorRows();
   }

如果在加载默认数据(datagridview.Datasource=Table)后立即应用样式或设置Row.DefaultStyle, 它将不会影响,直到您下次加载网格

(即,如果您在加载事件中设置了样式,则不会受到影响。但是,如果您在单击按钮或其他操作后再次调用相同的函数,则会正常工作)

解决此问题:


在DatagridView_DataBindingComplete事件中设置样式。它可以很好地工作并改变颜色您也可以

@downvoter我可以知道downvote的原因吗?我发布的代码经过测试,运行得非常好。我不确定它是设计的还是什么,但我遇到了与OP相同的问题。我将DataGridView绑定到数据集的一个表,并在RowsAdded中设置了样式。对第0行调用RowsAdded一次,然后对第1-7行再次调用RowsAdded。如果我为第0行设置样式,出于某种原因,它将被复制到其他行。如果我为任何其他行设置样式,它将按所述工作。可能来源于[link],您的代码对我有效,更改单个单元格的前景色。令人惊讶的是,这实际上就是答案。我在RowsAdded中设置样式,出于某种原因,它被调用了两次,一次用于第0行,然后再次用于其他行。如果我碰巧为第0行设置了样式,它将应用于所有其他行。在DataBindingComplete中设置样式,但由于某些原因修复了它。