我有以下代码将数据源绑定到asp.net中的下拉列表:
var list = countryRegionList.Select(o => o.CountryCode).Distinct();
我希望列绑定到文本和值
ddlCountry_Billing.DataTextField = "CountryCode";
ddlCountry_Billing.DataValueField = "CountryCode";
然而,它给了我一个错误,说找不到这个专栏。那么如果数据源是List的选择视图,如何解决这个问题?
答案 0 :(得分:3)
var list = countryRegionList.Select(o => o.CountryCode).Distinct();
这将返回仅CountryCode
属性的集合,我假设它是一个字符串,因此要绑定的字符串上没有 CountryCode 属性。
您需要DistinctBy,或在投影中使用匿名类型:
var list = countryRegionList.Select(o => new { o.CountryCode }).Distinct();
请注意,new { o.CountryCode }
是new { CountryCode = o.CountryCode }
答案 1 :(得分:1)
你可以创建一个anonymous type,并像这样绑定它 -
var list = countryRegionList.Select(o => new { o.CountryCode }).Distinct();
ddlCountry_Billing.DataSource = list;
ddlCountry_Billing.DataTextField = "CountryCode";
ddlCountry_Billing.DataValueField = "CountryCode";
ddlCountry_Billing.DataBind();
OR
var list = countryRegionList.Select(o => o.CountryCode).Distinct();
foreach(var item in list)
ddlCountry_Billing.Items.Add(new ListItem(item, item));
答案 2 :(得分:0)
那是因为var list
现在实际上是IList<string>
,而不是countryRegionList
中的任何对象。
您需要删除.DataTextField = "CountryCode"
和.DataValueField="CountryCode
设置者,或者根据CountryCode
执行不同的过滤器,但仍会返回完整的对象。
答案 3 :(得分:0)
var list = countryRegionList.Select(o =&gt; o.CountryCode).Distinct();
假设CountryCode是一个字符串,列表已经是IEnumerable&lt; string&gt;
只需两行:
ddlCountry_Billing.DataSource = list;
ddlCountry_Billing.DataBind();
早上给我打电话......