从数据集加载comboBox - "设置DataSource属性时无法修改Items集合"

时间:2016-10-31 21:11:44

标签: c# asp.net winforms combobox

在我的应用程序中,我有一个模型

public class LaborCategory
{
    public int Id { get; set; }

    [MaxLength(10)]
    public string Code { get; set; }

    [MaxLength(50)]
    public string Name { get; set; }
    public decimal Rate { get; set; }
    public decimal OnSite { get; set; }
    public decimal OffSite { get; set; }
}

我想要创建一个comboBox(selectLaborCat),其第一个选项为"添加新的人工类别" (这将是索引0)然后列表的其余部分,其中selectLaborCat.Value = dataSet.Id和selectLaborCat.Text = dataSet.Code

我认为我通过使用

获得了正确的一部分
        var categories = _context.LaborCategories.OrderBy(c => c.Code).ToArray();

        selectLaborCat.DisplayMember = "Code";
        selectLaborCat.ValueMember = "Id";

        selectLaborCat.DataSource = categories;

因为这会像我期望的那样呈现comboBox。

但是,如果我尝试selectLaborCat.Items.Insert(0, "Add New Labor Category");它会出错,说我无法做到设置DataSource属性时无法修改项目集合

如何获得我的"添加新的劳工类别"在索引0?我尝试添加"添加新类别"作为数据集中的记录,但我总是希望它是comboBox的索引0,无论我如何对数据集进行排序。

我是否被迫以列表形式检索我的数据集,创建新列表,添加我的默认"添加新类别"作为第一个元素,然后将数据集列表复制到新列表,并将组合框绑定到它,如

        var categories = _context.LaborCategories.OrderBy(c => c.Code).ToList();
        var comboBoxElements = new List<LaborCategory>();

        var laborCategory = new LaborCategory();
        laborCategory.Id = 0;
        laborCategory.Code = "Add New Labor Category";
        comboBoxElements.Add(laborCategory);


        foreach (var category in categories)
        {
            comboBoxElements.Add(category);
        }

        selectLaborCat.DisplayMember = "Code";
        selectLaborCat.ValueMember = "Id";

        selectLaborCat.DataSource = comboBoxElements;

还是有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

将.DataSource添加到列表框后,无法修改ListBox.Items集合,即在将datasource设置为ComboBox后,插入/删除抛出异常。解决方法可以是,您可以直接将项目添加到ListBox,而不是设置DataSource。然后你就可以直接操纵它们了。

如果想设置DataSource,请准备数据源,另一个选项可以是BindingList

此外,您可以使用BindingList对象:

  • 使用您的初始项目创建BindingList作为数据绑定

  • 列出项目

  • listbox的BindingList对象的数据源添加和删除项目 来自BindingList,而不是来自列表框

参考:Microsoft Link