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

C# DataGridView如何根据已知列最值获取对应行Bank列值

解决方案

你原有逻辑只提取了数值列生成独立数组,丢失了数值和对应行Bank列的绑定关系,不需要单独把数值抽成数组,直接在遍历行时保留行关联信息,匹配到最值后直接读取对应行的Bank值即可。

实现代码

// 获取DataBuy列最大值对应的Bank值
var validBuyRecords = DataGridView1.Rows
    .Cast<DataGridViewRow>()
    // 过滤空白新行、空值行
    .Where(row => !row.IsNewRow && !string.IsNullOrWhiteSpace(row.Cells[1].FormattedValue?.ToString()))
    .Select(row => new
    {
        BankName = row.Cells["Bank"].FormattedValue.ToString(), // 直接用列名取Bank值,避免索引写错
        BuyPrice = Convert.ToDouble(row.Cells[1].FormattedValue)
    });

if (validBuyRecords.Any())
{
    var maxBuyItem = validBuyRecords.MaxBy(x => x.BuyPrice);
    textBoxBuy.Text = maxBuyItem.BankName;
}

// 获取DataSell列最小值对应的Bank值
var validSellRecords = DataGridView1.Rows
    .Cast<DataGridViewRow>()
    .Where(row => !row.IsNewRow && !string.IsNullOrWhiteSpace(row.Cells[2].FormattedValue?.ToString()))
    .Select(row => new
    {
        BankName = row.Cells["Bank"].FormattedValue.ToString(),
        SellPrice = Convert.ToDouble(row.Cells[2].FormattedValue)
    });

if (validSellRecords.Any())
{
    var minSellItem = validSellRecords.MinBy(x => x.SellPrice);
    textBoxSell.Text = minSellItem.BankName;
}

说明

  • 用列名row.Cells["Bank"]取Bank列值比硬编码索引更稳定,后续调整列顺序也不会出错,如果你习惯用索引,替换成对应列索引即可
  • 增加了!row.IsNewRow判断,过滤DataGridView自带的末尾空白新增行,避免空值转换报错
  • 取值前用Any()判断是否存在有效数据,避免无有效数据时触发序列为空的异常
  • .MaxBy()/.MinBy()是.NET 6+支持的方法,如果你的项目版本更低,替换为OrderByDescending(x=>x.BuyPrice).First()和OrderBy(x=>x.SellPrice).First()即可,效果完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 00:57:15