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> です

次の 2 行を実行するだけです。

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 に答える