1

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

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

我希望将列绑定到文本和值

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

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

4

4 回答 4

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 }

于 2013-06-14T16:41:45.280 回答
1

您可以创建一个匿名类型,并像这样绑定它 -

var list = countryRegionList.Select(o => new { o.CountryCode }).Distinct();
ddlCountry_Billing.DataSource = list;
ddlCountry_Billing.DataTextField = "CountryCode";
ddlCountry_Billing.DataValueField = "CountryCode";
ddlCountry_Billing.DataBind();

或者

var list = countryRegionList.Select(o => o.CountryCode).Distinct();
foreach(var item in list)
    ddlCountry_Billing.Items.Add(new ListItem(item, item));
于 2013-06-14T16:46:20.597 回答
0

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

假设 CountryCode 是一个字符串,列表已经是一个 IEnumerable<string>

只需两行:

ddlCountry_Billing.DataSource = list;
ddlCountry_Billing.DataBind();

早上给我打电话...

于 2013-06-14T18:28:55.853 回答
0

那是因为var list实际上是IList<string>现在,而不是任何对象在countryRegionList.

您需要删除.DataTextField = "CountryCode".DataValueField="CountryCode设置器或根据CountryCode但仍返回完整对象执行不同的过滤器。

于 2013-06-14T16:42:40.940 回答