我正在尝试更改 datagridview 中特定单元格的前景色。我想为同一行中的不同单元格赋予不同的颜色。
grid.Rows[row].Cells[col].Style.ForeColor = Color.Red
使用上述将更改所有行颜色,而不仅仅是我要更改的单元格。
有没有办法单独改变特定单元格的颜色 - 不影响该行的其他单元格?
似乎我需要更改一些我不熟悉的 Row 属性。
我正在尝试更改 datagridview 中特定单元格的前景色。我想为同一行中的不同单元格赋予不同的颜色。
grid.Rows[row].Cells[col].Style.ForeColor = Color.Red
使用上述将更改所有行颜色,而不仅仅是我要更改的单元格。
有没有办法单独改变特定单元格的颜色 - 不影响该行的其他单元格?
似乎我需要更改一些我不熟悉的 Row 属性。
使用上述将更改所有行颜色,而不仅仅是我要更改的单元格
不,这是不正确的。它只会更改指定索引处单元格的文本颜色(前景色)。
您需要检查您是否没有在代码中的其他位置设置行的前景色。
以下代码适用于更改背面和前景色
//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;
如果您在加载默认数据(datagridview.Datasource=Table)后立即应用样式或设置 Row.DefaultStyle,则在下次加载网格之前不会影响。
(即,如果您在加载事件中设置样式。它不会受到影响。但是如果您再次调用相同的函数,例如单击按钮或其他内容,它将起作用)
解决这个问题:
在 DatagridView_DataBindingComplete 事件中设置样式。它可以正常工作并改变颜色,你也可以
使用 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();
}
您可以使用
dgv.Rows[curRowIndex].DefaultCellStyle.SelectionBackColor = Color.Blue;