Настройка ячейки DataGridView - PullRequest
       9

Настройка ячейки DataGridView

0 голосов
/ 01 сентября 2011

Я хотел бы создать ячейку для таблицы данных, которая будет принимать значение Int64 для сортировки.

Кроме того, в этой ячейке будет отображаться дополнительное значение, представляющее собой разницу текущего значения с эталонным значением, которое у меня есть вне таблицы данных.

Я мог бы сделать это как строку, но сортировка не будет правильно обрабатываться, потому что она будет выглядеть как 1, 10, 11, 2 .... и т. Д.

Поэтому я подумал, что если бы я мог создать собственную ячейку и определить значение ячейки long и отобразить строку, это было бы здорово ... но я не уверен, что это можно сделать ....

Кто-нибудь знает, как это можно сделать простым способом? Обратите внимание, что я загружаю представление данных вручную, но я определяю типы столбцов, чтобы разрешить сортировку.

1 Ответ

0 голосов
/ 02 сентября 2011

Один из довольно простых способов сделать это - использовать событие 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 . Возможно, вы захотите взглянуть. Один из примеров показывает, что вы можете сделать в случае связей (в этом примере сортировка по другому столбцу является сортировкой связей).

...