如何在组合框顶部插入项目?

3

您好,我正在使用Linq to 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--");

这段代码出现了故障。

它在哪里失败了?看起来还不错... - Youp Bernoulli
无法在数据绑定后插入该项... - User13839404
5个回答

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";

2

正如您在评论中指出的那样,您无法在数据绑定后插入项目。

一种选择是使用Concat将包含您的“Select”项的序列与查询结果连接起来。


0

将所选项目插入到绑定到组合框的项列表中,而不是直接插入到combo.items集合中。

List = linq query;
List.Insert(0, "--Select--");

combo.Datasource = List;

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";

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}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接