排序DataGridView时出现ArgumentOutOfRangeException

时间:2014-10-23 10:13:40

标签: c# datatable sqlite vs2010-express

我正在尝试使用以下代码按列对DGV进行排序:

points.Clear();
foreach ( CalibrationPoint pt in ch.SWCalibration.Points )
    points.Add( pt );
if ( points.Count > 0 )
    this.dgv.Sort( this.dgv.Columns[ 'X' ], ListSortDirection.Ascending );

其中pointsSortableBindingList,绑定到DGV

当我调用Sort方法时,我得到 ArgumentOutOfRangeException:索引超出范围。必须是非负数且小于集合的大小。参数名称:index

这里是堆栈跟踪输出:

System.Collections.ArrayList.get_Item(Int32 index)
System.Windows.Forms.DataGridViewColumnCollection.get_Item(Int32 index)
...

下面是我的函数调用,上面发布了sort,其余的是函数调用。

你知道为什么会这样吗?我检查过,当points.Count> 0,dgv.Rows.Count也是> 0,即添加行,每个点添加到列表

2 个答案:

答案 0 :(得分:4)

奇怪的是,这一行编译

this.dgv.Sort( this.dgv.Columns[ 'X' ], ListSortDirection.Ascending );

奇怪的是,DataGridViewColumnCollection的索引器接受表示列索引的32位整数或具有列名称的字符串。

这里发生的是将char自动转换为int 因此,您的代码引用了索引为88的列(X的ascii值),当然也没有具有如此高索引的列。
要修复此错误,请使用正确的索引号或使用列的名称。 例如

this.dgv.Sort( this.dgv.Columns["ColumnName"], ListSortDirection.Ascending );

答案 1 :(得分:1)

this.dgv.Columns可能不包含' X'。确保按名称或索引正确指定列。请参阅Columns property