C# Winforms 编程向DataGridView添加数据时如何设置行字体颜色
DataGridView行字体颜色修改失效解决方案
失效原因
你当前代码修改的是Menu Item列的全局默认单元格样式,该样式仅对修改之后新增的单元格生效,不会回溯修改已经添加完成的单元格,反复切换列默认样式无法实现指定分类行标红的需求。
最优解决方案(适配你现有逻辑,改动最小)
添加分类行时直接单独设置该行对应单元格的样式,不需要修改列的全局默认样式,修正后完整代码如下:
public void LoadDGV() { try { // 先清空原有行避免重复加载 dgvResults.Rows.Clear(); // 列默认样式保持黑色即可,不需要反复修改 dgvResults.Columns["Menu Item"].DefaultCellStyle.ForeColor = Color.Black; // 添加Entrees分类行,单独设置标红 int entreeHeaderIndex = dgvResults.Rows.Add("Entrees"); dgvResults.Rows[entreeHeaderIndex].Cells["Menu Item"].Style.ForeColor = Color.Red; // 填充主菜数据 for (int i = 0; i < lstQuantityEntrees.Count(); i++) { dgvResults.Rows.Add(); dgvResults[0, i+1].Value = lstNameEntrees[i]; dgvResults[1, i+1].Value = lstQuantityEntrees[i]; dgvResults[2, i+1].Value = ((lstQuantityEntrees[i] * lstPriceEntrees[i]).ToString("C2")); } // 添加Drinks分类行,单独设置标红 int drinkHeaderIndex = dgvResults.Rows.Add("Drinks"); dgvResults.Rows[drinkHeaderIndex].Cells["Menu Item"].Style.ForeColor = Color.Red; } catch (Exception ex) { MessageBox.Show(message + ex.Message, "Program Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
其他可选适配方案
- 批量遍历设置(适合数据加载完成后统一修改样式场景)
所有数据加载完成后遍历行,按规则设置对应单元格颜色:foreach (DataGridViewRow row in dgvResults.Rows) { var cellVal = row.Cells["Menu Item"].Value?.ToString(); if (cellVal is "Entrees" or "Drinks") { row.Cells["Menu Item"].Style.ForeColor = Color.Red; } } - 注册CellFormatting事件(适合数据会动态更新的场景,样式自动生效)
先为DataGridView绑定CellFormatting事件,事件逻辑如下:private void dgvResults_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) { // 仅处理Menu Item列的非表头单元格 if (e.ColumnIndex == dgvResults.Columns["Menu Item"].Index && e.RowIndex >= 0) { var cellVal = e.Value?.ToString(); e.CellStyle.ForeColor = cellVal is "Entrees" or "Drinks" ? Color.Red : Color.Black; } }
注意:单元格/行级别的
Style优先级高于列、控件级别的默认样式,直接设置行/单元格Style可以避免被全局样式覆盖。
内容的提问来源于stack exchange,提问作者tech127956
相关产品推荐
相关产品推荐

