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

如何高亮GridView中的重复列?现有代码逻辑存疑求解答

代码解析与高亮重复列的修正方案

原有代码工作原理

这段代码是ASP.NET GridView控件的PreRender事件处理方法,在控件渲染到页面前执行,逻辑如下:

  • 初始化HashSet<string>集合uniqueValues,用于记录已出现过的列值(HashSet自带去重特性,判断值是否存在的效率很高)。
  • 遍历GridView的每一行:
    • 获取当前行第2列(索引从0开始,Cells[1]对应第二列)的文本内容。
    • 若该值已在uniqueValues中,就给当前行的第1列添加duplicate-highlight CSS类,标记为重复项;若未出现过,则将该值加入集合。

当前代码的不足

现有逻辑仅给后续重复行的第1列添加高亮,不符合你“高亮存在重复值的列”的需求——它既没有高亮重复值所在的目标列,也没有标记第一次出现的重复值行。

实现高亮重复列的修正代码

要实现所有包含重复值的目标列单元格高亮,需要先统计所有值的出现次数,再批量标记:

C# 代码

protected void GridView1_PreRender(object sender, EventArgs e)
{
    // 统计目标列各值的出现次数
    Dictionary<string, int> valueCount = new Dictionary<string, int>();
    int targetColumnIndex = 1; // 要检查重复的列索引(对应第二列)

    foreach (GridViewRow row in GridView1.Rows)
    {
        string cellText = row.Cells[targetColumnIndex].Text.Trim();
        if (valueCount.ContainsKey(cellText))
        {
            valueCount[cellText]++;
        }
        else
        {
            valueCount[cellText] = 1;
        }
    }

    // 给所有包含重复值的单元格添加高亮样式
    foreach (GridViewRow row in GridView1.Rows)
    {
        string cellText = row.Cells[targetColumnIndex].Text.Trim();
        if (valueCount[cellText] > 1)
        {
            // 高亮重复值所在的列
            row.Cells[targetColumnIndex].CssClass = "duplicate-highlight";
            // 若需要高亮整行,取消下方注释
            // row.CssClass = "duplicate-highlight";
        }
    }
}

CSS 样式(添加到standardDesign.css)

.duplicate-highlight {
    background-color: #fff3cd; /* 浅黄色高亮,可自行调整颜色 */
    border: 1px solid #ffeeba;
}

说明

  1. 第一步先遍历所有行,统计目标列每个值的出现次数,筛选出重复值(出现次数>1)。
  2. 第二步再次遍历行,给目标列中包含重复值的单元格添加高亮样式。
  3. 若需要高亮整行,取消代码中对应注释即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 15:47:20