【问题标题】:WinForm ComboBox add text "Select" after data bindingWinForm ComboBox在数据绑定后添加文本“Select”
【发布时间】:2012-01-05 23:59:25
【问题描述】:

在我的表单中,我有一个控件 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();

【问题讨论】:

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


    【解决方案1】:

    如果GetOperatorList() 返回一个不可变的IEnumerable&lt;T&gt;,您可以使用 linq 将它与new object[] { "Select" } 连接起来。假设T 不是object,您将不得不转换:

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

    编辑

    如果您希望单词“Select”出现在开头,请反转连接:

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

    【讨论】:

    • @Greg 如果您想在开头“选择”,请查看已编辑的帖子。如果你想要它在中间的某个地方,它会变得更加复杂。
    • 您的代码工作错误。因为显示的数据是错误的。我只看到“选择”文本,然后是对象
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-19
      • 1970-01-01
      • 2011-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多