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

如何获取DataTable每行中水果与蔬菜的最高价?附代码求助

解决每行水果与蔬菜最高价的需求

数据表

Date     City    Apple-FT Banana-FT Potato-VG Carrot-VG
03/07    A         25      30       70         65
04/07    B         15      07       15         25

需求说明

需要获取每日**水果(FT标识)与蔬菜(VG标识)**的最高价,并对对应的最高价单元格进行背景色标记。

原代码存在的问题

  1. 列类型判断逻辑错误:拆分列名后取第一个元素的末尾两位判断FT,实际应直接识别列名后缀-FT/-VG
  2. 最大值计算范围错误:计算整行所有列的最大值,未区分水果和蔬菜类别
  3. 行遍历遗漏数据:从索引1开始遍历行,会跳过第一行数据
  4. 多层嵌套循环导致代码冗余、可读性差

修正后的实现代码

// 遍历每一行数据
foreach (DataRow row in dtRep.Rows)
{
    // 处理水果(FT)类别的最高价
    var ftColumns = dtRep.Columns.Cast<DataColumn>()
        .Where(col => col.ColumnName.EndsWith("-FT"))
        .ToList();
    
    if (ftColumns.Any())
    {
        decimal ftMaxValue = ftColumns.Max(col => Convert.ToDecimal(row[col]));
        foreach (var ftCol in ftColumns)
        {
            decimal currentValue = Convert.ToDecimal(row[ftCol]);
            if (currentValue == ftMaxValue)
            {
                // 标记最高价单元格(若为桌面应用,可替换为对应控件的样式设置逻辑)
                row[ftCol] = $"<span style='background-color: #ffcccc;'>{currentValue}</span>";
            }
        }
    }

    // 处理蔬菜(VG)类别的最高价
    var vgColumns = dtRep.Columns.Cast<DataColumn>()
        .Where(col => col.ColumnName.EndsWith("-VG"))
        .ToList();
    
    if (vgColumns.Any())
    {
        decimal vgMaxValue = vgColumns.Max(col => Convert.ToDecimal(row[col]));
        foreach (var vgCol in vgColumns)
        {
            decimal currentValue = Convert.ToDecimal(row[vgCol]);
            if (currentValue == vgMaxValue)
            {
                row[vgCol] = $"<span style='background-color: #ccffcc;'>{currentValue}</span>";
            }
        }
    }
}

代码改进说明

  • 精准分类计算:分别筛选FT和VG列,单独计算各自类别的最高价,完全匹配需求
  • 遍历逻辑完善:覆盖所有数据行,无数据遗漏
  • 可读性提升:用LINQ简化列筛选和最大值计算,避免多层嵌套循环
  • 样式区分清晰:用不同背景色标记水果、蔬菜的最高价,便于视觉区分
  • 场景适配灵活:若为WinForms/WPF等桌面应用,可将HTML标记替换为对应控件的背景色设置逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 18:15:25