对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,即添加行,并将每个点添加到列表
奇怪的是,这一行编译
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"。请确保按名称或索引正确指定列。请参见列属性。