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
相关产品推荐
相关产品推荐

