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