在我的应用程序中,我有一个模型
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;
还是有更好的方法吗?
答案 0 :(得分:0)
将.DataSource添加到列表框后,无法修改ListBox.Items集合,即在将datasource
设置为ComboBox
后,插入/删除抛出异常。解决方法可以是,您可以直接将项目添加到ListBox
,而不是设置DataSource
。然后你就可以直接操纵它们了。
如果想设置DataSource,请准备数据源,另一个选项可以是BindingList
。
此外,您可以使用BindingList对象:
使用您的初始项目创建BindingList作为数据绑定
列出项目