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

C#获取DataGridView数据提示索引超出范围如何解决

异常根因

.NET 中所有从0开始计数的有序集合,合法索引范围固定为 0 到 集合长度 - 1。RowCount 属性返回的是 DataGridView 的总行数,直接将这个值作为行索引访问,本质是在访问超出集合范围的不存在的行,必然触发索引越界异常。
另外有一个容易忽略的细节:DataGridView 默认开启 AllowUserToAddRows 属性,此时 RowCount 统计值会包含底部供用户录入新数据的空白行,这一行不存储实际业务数据,直接取倒数第一行大概率会拿到空值。

正确实现

先根据控件配置计算真实数据行的最后一行索引,同时增加空值判断,避免空引用异常:

// 计算最后一条数据行的索引
int lastRowIndex = dgvWellsFargo.AllowUserToAddRows 
    ? dgvWellsFargo.RowCount - 2 
    : dgvWellsFargo.RowCount - 1;

// 处理无数据的边界场景
if (lastRowIndex >= 0)
{
    DataGridViewRow targetRow = dgvWellsFargo.Rows[lastRowIndex];
    // 取值前做空值校验,避免null调用ToString()抛异常
    txtNoOfTransactions.Text = targetRow.Cells[1].Value?.ToString() ?? string.Empty;
    
    // 金额格式化前先做类型校验,避免格式转换失败
    if (decimal.TryParse(targetRow.Cells[2].Value?.ToString(), out decimal totalAmount))
    {
        txtTotal.Text = string.Format("{0:c2}", totalAmount);
    }
}
补充说明
  • DataGridView 的单元格索引同样从0开始计数,如果你的目标数据在第1、2列,需要把代码里的Cells[1]、Cells[2]调整为Cells[0]、Cells[1],避免取错列。
  • 如果 DataGridView 是绑定数据源模式,更推荐直接从绑定的数据源集合中取最后一条数据,不需要通过UI控件的行集合访问,能避开很多UI层的索引、状态相关问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 05:24:53