辞書が列挙されている場合、それが得られますKeyValuePair<TKey,TValue>
あなただけの「価値」と「キー」に指定する必要がありますので...オブジェクトをDataTextField
してDataValueField
選択し、それぞれの値を / Keyプロパティ。
ジョーのコメントのおかげで、私は質問を読み直してこれらを正しい方向に回しました。通常、私はディクショナリの「キー」が表示されるテキストであり、「値」がフェッチされる値であることを期待します。ただし、サンプルコードではこれらを逆に使用します。このようにする必要がない限り、次のようにコードを記述することを検討してください。
list.Add(cul.DisplayName, cod);
(そしてもちろん、「Key」DataTextField
と「Value」を使用するようにバインディングを変更しますDataValueField
。)
実際、辞書ではなくリストが本当に必要なように思われるので、そもそも辞書の使用を再検討することをお勧めします。あなたはただ使うことができますList<KeyValuePair<string, string>>
:
string[] languageCodsList = service.LanguagesAvailable();
var list = new List<KeyValuePair<string, string>>();
foreach (string cod in languageCodsList)
{
CultureInfo cul = new CultureInfo(cod);
list.Add(new KeyValuePair<string, string>(cul.DisplayName, cod));
}
または、プレーンなCultureInfo
値のリストを使用します。LINQはこれを本当に簡単にします:
var cultures = service.LanguagesAvailable()
.Select(language => new CultureInfo(language));
languageList.DataTextField = "DisplayName";
languageList.DataValueField = "Name";
languageList.DataSource = cultures;
languageList.DataBind();
LINQを使用していない場合でも、通常のforeachループを使用できます。
List<CultureInfo> cultures = new List<CultureInfo>();
foreach (string cod in service.LanguagesAvailable())
{
cultures.Add(new CultureInfo(cod));
}
languageList.DataTextField = "DisplayName";
languageList.DataValueField = "Name";
languageList.DataSource = cultures;
languageList.DataBind();