我正在尝试使用以下代码按列对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
是SortableBindingList
,绑定到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,即添加行,每个点添加到列表答案 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。