C# WinForm组合框添加文本;选择";数据绑定后

C# WinForm组合框添加文本;选择";数据绑定后,c#,winforms,data-binding,.net-4.0,combobox,C#,Winforms,Data Binding,.net 4.0,Combobox,在我的表单中,我有一个控件组合框。我想在数据绑定后添加文本“选择”。我试试这个 cbOperatorList.DataSource = operatorService.GetOperatorList(); cbOperatorList.Items.Insert(0, "Select"); 但当我这么做的时候。我例外什么 如果设置属性,则无法更改项目集合 数据源 更新 public BindingList<Operator> GetOperatorList(string filter

在我的表单中,我有一个控件组合框。我想在数据绑定后添加文本“选择”。我试试这个

cbOperatorList.DataSource = operatorService.GetOperatorList();
cbOperatorList.Items.Insert(0, "Select");
但当我这么做的时候。我例外什么

如果设置属性,则无法更改项目集合 数据源

更新

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());
}

您没有描述
GetOperatorList()
返回的内容,但可以先设置一个变量以获取该列表,并在将数据源设置为该变量之前将项目插入该列表

您必须重构代码以处理此“选择”项,以免与运算符对象混淆。

如果
GetOperatorList()
返回一个不可变的
IEnumerable
,您可以使用linq将其与
新对象[]{“选择”}
连接起来。假设
T
不是
object
,则必须强制转换:

cbOperatorList.DataSource = operatorService
    .GetOperatorList()
    .Cast<object>()
    .Concat(new object[] { "Select" }); 
cbOperatorList.DataSource=operatorService
.GetOperatorList()
.Cast()
.Concat(新对象[]{“选择”});
编辑

如果希望“选择”一词出现在开头,请反转连接:

cbOperatorList.DataSource = (new object[] { "Select" })
    .Concat(
        operatorService.GetOperatorList().Cast<object>()
     ); 
cbOperatorList.DataSource=(新对象[]{“选择”})
康卡特先生(
operatorService.GetOperatorList().Cast()
); 

@Greg如果您想在开头“选择”,请参阅编辑的文章。如果你想把它放在中间,它会变得更复杂。你的代码工作是错误的。因为显示的数据是错误的。我只看到“选择”文本,然后是对象
cbOperatorList.DataSource = (new object[] { "Select" })
    .Concat(
        operatorService.GetOperatorList().Cast<object>()
     );