您好我正在使用Linq来SQl来绑定组合框控件。如何在组合框列表的顶部添加项目?
var items = from c in db.Contacts
orderby c.Name ascending
select c;
if (items.ToList().Count > 0)
{
cmb1.BindingContext = new BindingContext();
cmb1.DataSource = items;
cmb1.DisplayMember = "Name";
cmb1.ValueMember = "ID";
}
cmb1.Items.Insert(0, "--Select--");
以上代码失败。
答案 0 :(得分:9)
一种方法是在绑定之前将“--Select--”联系人占位符插入结果中:
var items = (from c in db.Contacts
orderby c.Name ascending
select c).ToList();
items.Insert(0, new Contact { ID = 0, Name = "--Select--" });
cmb1.BindingContext = new BindingContext();
cmb1.DataSource = items;
cmb1.DisplayMember = "Name";
cmb1.ValueMember = "ID";
或者您可以使用匿名版本的结果执行相同的操作:
var items = (from c in db.Contacts
orderby c.Name ascending
select new { c.ID, c.Name }).ToList();
items.Insert(0, new { ID = 0, Name = "--Select--" });
cmb1.BindingContext = new BindingContext();
cmb1.DataSource = items;
cmb1.DisplayMember = "Name";
cmb1.ValueMember = "ID";
答案 1 :(得分:2)
正如您在自己对问题的评论中所述,您无法在数据绑定后插入项目。
一种选择是使用Concat将包含“选择”项的序列与查询结果连接起来。
答案 2 :(得分:0)
不将--Selected--项直接插入combo.items集合,而是插入绑定到组合的项目列表。
List = linq query;
List.Insert(0, "--Select--");
combo.Datasource = List;
答案 3 :(得分:0)
以上所有都不起作用。我尝试了所有并最终得到了以下内容。 Linq查询输出枚举和列表似乎是不可变的,如数组
我希望您的要求符合以下要求
cbo.Items.Clear();
Region optAll = new Region { RegionName = "All", RegionId = 0 };
var qOrg = (from rows in LDC.Regions orderby rows.RegionName
select new
{
rows.RegionId,
rows.RegionName
}).ToList();
if(needAll)
cbo.Items.Add(optAll);
foreach (var region in qOrg)
{
cbo.Items.Add(region);
}
cbo.DisplayMember = "RegionName";
cbo.ValueMember = "RegionId";
答案 4 :(得分:0)
在绑定到组合框OnLoad后,在列表顶部添加一个空白选择。 EF 6
db.Users.Load();
var updateList = db.Users.Local.ToBindingList(); updateList.Inset(0, new User { ID=0, UserId = "" }); this.userComboBox.DataSource = updateList}