C# 更改DataGridView中特定单元格的前景色
我正在尝试更改datagridview中特定单元格的前景色。我想给同一行中的不同单元格赋予不同的颜色C# 更改DataGridView中特定单元格的前景色,c#,winforms,datagridview,C#,Winforms,Datagridview,我正在尝试更改datagridview中特定单元格的前景色。我想给同一行中的不同单元格赋予不同的颜色 grid.Rows[row].Cells[col].Style.ForeColor = Color.Red 使用上述选项将更改所有行的颜色,而不仅仅是要更改的单元格 有没有一种方法可以单独改变特定单元格的颜色,而不影响行中的其他单元格 似乎我需要更改一些我不熟悉的行属性。您可以使用 dgv.Rows[curRowIndex].DefaultCellStyle.SelectionBackColo
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中设置样式,但由于某些原因修复了它。