WinForm ComboBox在数据绑定后添加文本“选择”

时间:2012-01-05 23:59:25

标签: c# winforms data-binding .net-4.0 combobox

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

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

更新

我使用此代码解决了问题

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

2 个答案:

答案 0 :(得分:3)

如果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 :(得分:1)

您没有描述GetOperatorList()返回的内容,但您可以先设置一个变量来获取该列表,然后在将DataSource设置为该变量之前将项目插入列表中。< / p>

您必须重构代码才能处理此“选择”项目,以免与操作员对象混淆。