我正在使用LINQ创建一个匿名类型列表,然后将其与ComboBox绑定。但我想在该列表中添加一个空项目,但它不起作用。
XNamespace ns = xDocItems.Root.Name.Namespace;
var items =
from i in
xDocItems.Descendants(ns + "insync_navpaymentmethods")
select new
{
code = (string)i.Element(ns + "Code"),
};
这里我使用LINQ从XElement创建匿名类型列表。
items.ToList().Insert(0, new { code = string.Empty });
//items.ToList().Add(new { code = string.Empty }); //Not working
在此列表中添加空白项目。因此,用户可以在组合框中选择空白项目。
cmbPaymentMethods.DataSource = items.ToList();
cmbPaymentMethods.DisplayMember = "code";
cmbPaymentMethods.ValueMember = "code";
我会感谢任何建议。
基肖尔马布
答案 0 :(得分:4)
我强烈怀疑这个版本,但没有显示额外的项目。那是因为您将新项目添加到您丢弃的“临时”列表中,然后您正在为数据源构建新列表。
您只想调用ToList()
一次,并将该列表用于插入和数据源:
var itemsList = items.ToList();
itemsList.Insert(0, new { code = string.Empty }); // Or use Add for the end...
cmbPaymentMethods.DataSource = itemsList;
答案 1 :(得分:2)
items.ToList()将返回该对象的新实例,因此该项目将被添加到新列表中,而不是您想要的列表。
每次有“items.ToList()”时,都会创建一个新实例。你需要:
var list = items.ToList();
list.Add(new { code = string.Empty });
cmbPaymentMethods.DataSource = list;
答案 2 :(得分:0)
如何使用XNamespace ns = xDocItems.Root.Name.Namespace; var items = 来自我 xDocItems.Descendants(ns +“insync_navpaymentmethods”) 选择新的 { code =(string)i.Element(ns +“Code”),