c#中的ArgumentOutOfRange异常

时间:2010-12-01 09:51:43

标签: c# winforms exception

我正在尝试在Windows窗体中访问DataGridView控件中所选行的列名,但我得到以下代码的 ArgumenOutOfRange 异常:

MessageBox.Show(dataGridView1.SelectedColumns[dataGridView1.CurrentCell.ColumnIndex].ToString());

产:

ArgumentOutOfRangeException was unhandled

Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index

有谁能告诉我如何克服这个错误?

4 个答案:

答案 0 :(得分:4)

SelectedColumns是一个仅包含所选列的列表(是的,这就是它的工作原理)。所以这个列表大小与Columns属性列表的大小不同(显然是你想要的)。

MessageBox.Show(dataGridView1.Columns[dataGridView1.CurrentCell.ColumnIndex].ToString());

答案 1 :(得分:1)

如果我没有错,那么您可能应该从Columns集合中获取列值,而不是从SelectedColumns集合中获取列值。

dataGridView1.Columns[dataGridView1.CurrentCell.ColumnIndex]

答案 2 :(得分:0)

ColumnIndex属性可以返回-1(来自文档):

  

包含的列的索引   细胞;如果单元格不是,则为-1   包含在一列中。

你可以这样吗?

答案 3 :(得分:0)

DataGridView.SelectedColumns集合是DataGridView.Columns的一个独立集合,可以有不同的列集(子​​集)。

例如,如果您有一个5列视图,并且选择了第三个和第四个,那么

DataGridView.SelectedColumns.Count == 2
DataGridView.Columns.Count == 5

并且您正在使用第四列(索引3)您的代码变为

DataGridView.SelectedColumns[3]

使用IndexOutOfBounds爆炸(正确)。

总而言之,在您的情况下,您应该使用Columns属性,而不是SelectedColumns。