从数据集加载组合框-“当设置了数据源属性”时,无法修改项集合
本文关键字:属性 集合 修改 数据源 组合 加载 数据集 设置 | 更新日期: 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到你的列表框,你不能修改列表框。项目收集,即设置datasource
到ComboBox
后,插入/删除抛出异常。您可以直接将项目添加到ListBox
,而不是设置DataSource
。然后你就可以直接操作它们了。
如果你想设置数据源,准备你的数据源,另一个选项可以是BindingList
。
此外,您可以使用BindingList对象:
-
用你的初始项作为数据创建一个BindingList列表项
- listbox的数据源到该BindingList对象从BindingList,而不是从列表框
Ref: Microsoft Link