Установите ComboBox.Sorted
на false
и сортируйте bindingWorker.DataSource
по свойству IdWorker
:
cbWorker.Sorted = false;
...
bindingWorker.DataSource = model.Workers.Select(x => new ItemWorker{
IdWorker = x.Id,
FullName = x.FullName
})
.OrderBy(x => x.IdWorker)
.ToList();
cbWorker.DataSource = bindingWorker;
cbWorker.ValueMember = "IdWorker";
cbWorker.DisplayMember = "FullName";
Пояснение:
В вашем примере есть две проблемы:
- Установка ComboBox. Сортируется в true для привязанного к данным ComboBox
- Числовая сортировка элементов ComboBox с использованием ComboBox.Sorted
Установка ComboBox.Sorted в true для привязанного к данным ComboBox
С ComboBox.Sorted Property Документация:
Попытка установить свойство Sorted для элемента управления с привязкой к данным вызывает
ArgumentException. Вы должны отсортировать данные, используя базовые данные
модель.
Вероятно, не стоит устанавливать ComboBox.Sorted
на true
для данных ComboBox
. Даже если оно не вызывает исключение, оно может вызвать неожиданное поведение.
Числовая сортировка элементов ComboBox с использованием ComboBox.Sorted
Простой тест может показать, что если ComboBox.Sorted = true
:
- Элементы отсортированы по
ComboBox.DisplayMember
- Элементы сортируются как строки (что-то вроде
item.ToString()
)
Это означает, что даже если ComboBox.DisplayMember
был числовым типом, он будет отсортирован после вызова ToString()
для каждого номера, поэтому элементы будут отсортированы в алфавитном порядке , а не в виде чисел.
Например, если числа 10, 1, 3
будут отсортированы непосредственно в виде числовых значений, они будут отсортированы в 1, 3, 10
, но если числа сначала будут преобразованы в строки ("10", "1", "3"
), а затем отсортированы, они будут сортироваться по алфавиту по "1", "10", "3"
Заключение
Если вы хотите:
- Сортировка привязанных данных
ComboBox
- Сортировать
ComboBox
элементы не по алфавиту
- Сортировать по члену, отличному от
DisplayMember
Вы должны отсортировать элементы перед установкой элементов как ComboBox.DataSource
и установить ComboBox.Sorted
на false