从数据集加载组合框-“当设置了数据源属性”时,无法修改项集合

本文关键字:属性 集合 修改 数据源 组合 加载 数据集 设置 | 更新日期: 2023-09-27 18:15:53

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

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

我想创建一个组合框(selectLaborCat),其第一个选项为"添加新劳动类别"(这将是索引0),然后是列表的其余部分,其中selectLaborCat。值=数据集。Id和selectLaborCat。文本=数据集。代码

我想我通过使用

得到了它的一部分正确
        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中获得"添加新劳工类别"?我尝试添加"添加新类别"作为数据集中的记录,但我总是希望它是组合框的索引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;

还是有更好的方法?

从数据集加载组合框-“当设置了数据源属性”时,无法修改项集合

一旦你添加了一个。datasource到你的列表框,你不能修改列表框。项目收集,即设置datasourceComboBox后,插入/删除抛出异常。您可以直接将项目添加到ListBox,而不是设置DataSource。然后你就可以直接操作它们了。

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

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

  • 用你的初始项作为数据创建一个BindingList列表项

  • listbox的数据源到该BindingList对象从BindingList,而不是从列表框

Ref: Microsoft Link