You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 12:54:05