WinForm ComboBox добавляет текст «Выбрать» после привязки данных - PullRequest
2 голосов
/ 06 января 2012

В моей форме у меня есть один элемент управления ComboBox. Я хочу после привязки данных добавить текст "Выбрать". Я пытаюсь это

cbOperatorList.DataSource = operatorService.GetOperatorList();
cbOperatorList.Items.Insert(0, "Select");

Но когда я это сделаю. Я получаю исключение, что

Изменение коллекции предметов невозможно, если установить свойство DataSource.

UPDATE

public BindingList<Operator> GetOperatorList(string filter = "")
{
            return
                new BindingList<Operator>(
                    this.operatorRepository.All.Where(
                        item => item.FirtsName.Contains(filter) || item.LastName.Contains(filter) || item.MiddleName.Contains(filter)).
                        ToList());
}

UPDATE

Я исправил проблему, используя этот код

cbOperatorList.DataSource =
                this.operatorService.GetOperatorList().Concat(new[] { new Operator { LastName = "Select", Id = 0 } }).OrderBy(
                    item => item.Id).ToList();

Ответы [ 2 ]

3 голосов
/ 06 января 2012

Если GetOperatorList() возвращает неизменный IEnumerable<T>, вы можете использовать linq для объединения этого с new object[] { "Select" }.Предполагая, что T не object, вам нужно будет разыграть:

cbOperatorList.DataSource = operatorService
    .GetOperatorList()
    .Cast<object>()
    .Concat(new object[] { "Select" }); 

РЕДАКТИРОВАТЬ

Если вы хотите, чтобы слово «Выбрать» появилосьначало, обратная конкатенация:

cbOperatorList.DataSource = (new object[] { "Select" })
    .Concat(
        operatorService.GetOperatorList().Cast<object>()
     ); 
1 голос
/ 06 января 2012

Вы не описываете, что возвращает GetOperatorList(), но вы могли бы сначала установить переменную, чтобы получить этот список, и вставить свой элемент в список до , установив DataSource для этой переменной.

Вы должны были бы реорганизовать свой код для обработки этого элемента «Выбрать», чтобы не путать его с объектами вашего оператора.

...