c# - WinForm ComboBox 在数据绑定(bind)后添加文本 "Select"

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

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

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

但是当我这样做的时候。我得到异常是什么

Changing the collection of items is impossible if you set the property DataSource.

更新

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

最佳答案

如果GetOperatorList()返回一个不可变的 IEnumerable<T> ,您可以使用 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>()
     ); 

关于c# - WinForm ComboBox 在数据绑定(bind)后添加文本 "Select",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8751701/

相关文章:

c# - Datagridview 未在已打开的表单上更新

c# - 如何处理 Form.MaximumBox 点击

c# - 使用 Json.net 序列化时如何根据类型更改属性名称?

c# - 使用 AutoMapper 对集合进行多态映射

c# - WINFORM 或 WPF : How to trigger custom event inside the constructor of the class that emits it

wpf - 是否有一组接口(interface)可以实现以避免在 WPF 绑定(bind)中有转换器

c# - 当集合为空时,UWP XAML 抛出未处理的异常

Make 文件中的 Android 数据绑定(bind) (Android.mk)

c# - 我如何从这个 C# 代码中找出结果

c# - 在没有 Entity Framework 的情况下创建 Odata Web API 应用程序