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

设置DataGridView行背景色失败:Active列为false时行未变红

解决DataGridView中Active为false的行背景色不生效的问题

看起来你在给DataGridView设置行背景色时遇到了问题——明明判断了Active列值为false,但行颜色没变化。我帮你分析下代码里的两个核心问题,再给你修正方案:

问题1:索引不匹配导致判断逻辑失效

你代码里分别用了ouput.ToList()作为DataGridView的数据源,又单独查了db.Users.ToList()来获取Active值。但这两个集合的元素顺序、数量不一定完全对应,用activate[color.Index]去取的话,很可能拿到的不是当前行对应的用户的Active值,自然无法触发正确的变色逻辑。

问题2:样式设置对象错误

你用了dgv_loadout.DefaultCellStyle.BackColor = Color.Red;,这是设置整个DataGridView的默认单元格样式,而不是单独某一行的样式。就算条件满足,要么所有行都变红(如果最后一次循环的条件满足),要么完全没效果。


修正后的代码方案

我们直接从DataGridView行绑定的实体对象里获取Active值,同时单独设置对应行的样式:

// 绑定数据源
dgv_loadout.DataSource = ouput.ToList();

// 遍历DataGridView的每一行
foreach (DataGridViewRow row in dgv_loadout.Rows)
{
    // 跳过自动生成的新行(如果你的DataGridView允许添加新行的话)
    if (row.IsNewRow) continue;

    // 这里替换成你实际的实体类名称,比如User、Loadout等
    var boundItem = (YourEntityModel)row.DataBoundItem;
    
    // 判断当前行对应的Active值是否为false
    if (boundItem.Active == false)
    {
        // 设置当前行的背景色为红色
        row.DefaultCellStyle.BackColor = Color.Red;
    }
}

更可靠的优化方案(推荐)

如果你的数据源可能会动态更新,建议把样式设置逻辑放到DataBindingComplete事件里,这样每次数据绑定完成后都会自动应用样式:

  1. 先给DataGridView绑定DataBindingComplete事件:
// 可以在窗体构造函数或者DataGridView初始化时添加
dgv_loadout.DataBindingComplete += dgv_loadout_DataBindingComplete;
  1. 实现事件处理方法:
private void dgv_loadout_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
    foreach (DataGridViewRow row in dgv_loadout.Rows)
    {
        if (row.IsNewRow) continue;
        var boundItem = (YourEntityModel)row.DataBoundItem;
        if (!boundItem.Active)
        {
            row.DefaultCellStyle.BackColor = Color.Red;
        }
    }
}

这样不管是第一次绑定数据,还是后续数据源更新重新绑定,都能确保Active为false的行自动变成红色~

内容的提问来源于stack exchange,提问作者Identifier1210

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:20:15