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

将DataGridView行值加载到ComboBox时出现Out Of Range Exception错误

报错原因与修复方案

报错本质

你遇到的System.ArgumentOutOfRangeException是典型的索引越界错误,触发原因是代码访问了不存在的集合下标:下标小于0,或者大于等于集合总长度。在你当前的开发场景下,常见的触发诱因有三个:

  • 你选中的是DataGridView的空白新增行(如果开启了允许用户添加行的属性),该行没有绑定实际数据,访问单元格时会触发越界
  • 访问DataGridView单元格时用的列索引超过了实际加载的列总数,比如你从Excel加载了3列,列下标只能是0/1/2,写Cells[3]就会越界
  • 删除If判断后直接访问SelectedRows[0],此时如果没有选中的有效行,集合为空,访问下标0直接触发越界,所以报错落在首个Items.Add行的前一行取值逻辑上

修复步骤

1. 补全行有效性判断

不要删除原有选中行判断的If语句,反而要补全判断逻辑,排除空白行和无选中行的情况:

// 先确认有选中行,且选中行不是空白新增行
if (dataGridView1.SelectedRows.Count > 0 
    && dataGridView1.SelectedRows[0].Index != dataGridView1.NewRowIndex)
{
    // 后续加载到ComboBox的逻辑写在这里
}

2. 修正单元格取值逻辑

优先用列名访问单元格,避免数字索引写错导致越界,如果必须用数字索引,先确认索引值小于总列数:

// 列名写法,更稳妥
var cellValue = dataGridView1.SelectedRows[0].Cells["你的Excel列名"].Value?.ToString();
// 数字索引写法,先判断索引是否合法
int targetColIndex = 2;
if (targetColIndex < dataGridView1.ColumnCount)
{
    var cellValue = dataGridView1.SelectedRows[0].Cells[targetColIndex].Value?.ToString();
}

3. 修正ComboBox加项逻辑

加项前先清空原有内容,空值判断后再添加,避免空值或者索引越界:

comboBox1.Items.Clear();
// 示例:把选中行的所有非空单元格值加载到ComboBox
foreach (DataGridViewCell cell in dataGridView1.SelectedRows[0].Cells)
{
    if (cell.Value != null)
    {
        comboBox1.Items.Add(cell.Value.ToString());
    }
}

注意:如果你的需求是把选中行的某几列固定值加到ComboBox,不要在加项过程中用下标访问还没添加的ComboBox元素,所有取值优先从DataGridView的选中行获取,不要从ComboBox的Items集合获取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:18:03