Один из довольно простых способов сделать это - использовать событие DataGridView SortCompare
. Используйте событие, чтобы проверить, что в сортируемом столбце отображаются ваши пользовательские данные, и, если это так, извлеките числовую часть этих данных и выполните сортировку по ним.
Ниже приведен пример:
private void dataGridView1_SortCompare(object sender, DataGridViewSortCompareEventArgs e) {
if (e.Column.Index == 1) { // This is your custom data's column.
// Extract the numeric values from the cells being compared for the sort.
// BEWARE: code assumes you'll always be able to extract a long from the cell contents.
long cell1NumericValue = Int64.Parse(e.CellValue1.ToString().Split(' ')[0]);
long cell2NumericValue = Int64.Parse(e.CellValue2.ToString().Split(' ')[0]);
// Compare these numeric values to determine how to sort.
e.SortResult = cell1NumericValue.CompareTo(cell2NumericValue);
e.Handled = true;
}
}
Предположения:
- что столбец с вашими пользовательскими данными имеет индекс столбца 1
- что ваши пользовательские данные состоят из числа, за которым следует хотя бы один пробел
Мой код также предполагает, что преобразование значения ячеек никогда не приведет к ошибке. Возможно, ваши данные содержат значения, которые могут привести к сбою этого преобразования. В этом случае вы могли бы проверить ваши данные перед преобразованием (если оно не равно нулю и т. Д.), И если проверка не удалась, установите числовое значение ячейки для целей сортировки в -1 или что-то еще, так что оно всегда ниже допустимых значений в другие клетки. (Надеюсь, это имело смысл).
Применение этих типов сортировок довольно хорошо описано в этой статье MSDN . Возможно, вы захотите взглянуть. Один из примеров показывает, что вы можете сделать в случае связей (в этом примере сортировка по другому столбцу является сортировкой связей).