ArgumentOutOfRangeException при сортировке DataGridView
Я пытаюсь отсортировать 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: индекс был вне диапазона. Должен быть неотрицательным и меньшим, чем размер коллекции. Имя параметра: индекс
Вот вывод трассировки стека:
System.Collections.ArrayList.get_Item(Int32 index)
System.Windows.Forms.DataGridViewColumnCollection.get_Item(Int32 index)
...
ниже мой вызов функции, с сортировкой, указанной выше, а остальные вызовы функции.
ты знаешь, почему это происходит? я проверил, когда points.Count > 0, dgv.Rows.Count также> 0, т.е. строки добавляются с каждой точкой, добавленной в список
2 ответа
Странно эта строка компилируется
this.dgv.Sort( this.dgv.Columns[ 'X' ], ListSortDirection.Ascending );
Странно, потому что индексатор DataGridViewColumnCollection принимает 32-разрядное целое число, которое представляет индекс столбца или строку с именем столбца.
Здесь происходит автоматическое преобразование char в int.
Таким образом, ваш код ссылается на столбец с индексом 88 (значение ascii для X) и, конечно, нет столбца с таким высоким индексом.
Чтобы исправить эту ошибку, используйте правильный номер индекса или имя столбца. Например
this.dgv.Sort( this.dgv.Columns["ColumnName"], ListSortDirection.Ascending );
this.dgv.Columns, вероятно, не содержит 'X'. Убедитесь, что вы правильно указали столбец по имени или индексу. См. Свойство столбцов.