对DataGridView排序时出现ArgumentOutOfRangeException

本文关键字:ArgumentOutOfRangeException DataGridView 排序 | 更新日期: 2023-09-27 18:27:29

我正试图用以下代码按列对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 );

其中points是绑定到DGV 的SortableBindingList

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

这是堆栈跟踪输出:

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

下面是我的函数调用,上面发布了排序和其他函数调用。

你知道为什么会发生这种事吗?我查了一下,什么时候点。计数>0,dgv。Rows.Count也大于0,即添加行,并将每个点添加到列表

对DataGridView排序时出现ArgumentOutOfRangeException

奇怪的是,这一行编译

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 );

this.dgv.Columns可能不包含"X"。请确保按名称或索引正确指定列。请参见列属性。

相关文章:
  • 没有找到相关文章