Ketika kamus disebutkan, itu akan menghasilkan KeyValuePair<TKey,TValue>
objek ... jadi Anda hanya perlu menentukan "Nilai" dan "Kunci" untuk DataTextField
dan DataValueField
masing - masing, untuk memilih properti Nilai / Kunci .
Terima kasih atas komentar Joe, saya membaca ulang pertanyaan untuk mendapatkan jawaban yang benar. Biasanya saya mengharapkan "kunci" dalam kamus menjadi teks yang ditampilkan, dan "nilai" menjadi nilai yang diambil. Kode sampel Anda menggunakannya dengan cara lain. Kecuali jika Anda benar-benar membutuhkannya seperti ini, Anda mungkin ingin mempertimbangkan untuk menulis kode Anda sebagai:
list.Add(cul.DisplayName, cod);
(Dan tentu saja, mengubah pengikatan menjadi menggunakan "Kunci" DataTextField
dan "Nilai" untuk DataValueField
.)
Sebenarnya, saya menyarankan karena sepertinya Anda benar-benar menginginkan daftar daripada kamus, Anda mungkin ingin mempertimbangkan kembali menggunakan kamus sejak awal. Anda bisa menggunakan 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));
}
Alternatifnya, gunakan daftar CultureInfo
nilai biasa . LINQ membuatnya sangat mudah:
var cultures = service.LanguagesAvailable()
.Select(language => new CultureInfo(language));
languageList.DataTextField = "DisplayName";
languageList.DataValueField = "Name";
languageList.DataSource = cultures;
languageList.DataBind();
Jika Anda tidak menggunakan LINQ, Anda masih dapat menggunakan foreach loop normal:
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();