如何使用List的Select结果绑定DropDownList

时间:2013-06-14 16:36:53

标签: c# asp.net

我有以下代码将数据源绑定到asp.net中的下拉列表:

var list = countryRegionList.Select(o => o.CountryCode).Distinct();

我希望列绑定到文本和值

ddlCountry_Billing.DataTextField = "CountryCode";
ddlCountry_Billing.DataValueField = "CountryCode";

然而,它给了我一个错误,说找不到这个专栏。那么如果数据源是List的选择视图,如何解决这个问题?

4 个答案:

答案 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();

早上给我打电话......