Bir sözlük sayılan zaman, verecektir KeyValuePair<TKey,TValue>
sadece "Değerini" ve "Anahtar" vermek zorunda yani ... nesneleri DataTextField
ve DataValueField
seçmek için sırasıyla Değer / Anahtar özellikler.
Joe'nun yorumu sayesinde, bunları doğru şekilde almak için soruyu tekrar okudum. Normalde, sözlükteki "anahtar" ın görüntülenen metin olmasını ve "değer" in getirilen değer olmasını beklerdim. Örnek kodunuz onları tam tersi şekilde kullanır. Bu şekilde olmaları için gerçekten ihtiyacınız olmadıkça, kodunuzu şu şekilde yazmayı düşünebilirsiniz:
list.Add(cul.DisplayName, cod);
(Ve sonra bağlamayı değiştirerek elbette "Anahtar" DataTextField
ve "Değer" kullanmak için DataValueField
.)
Aslında, bir sözlük yerine gerçekten bir liste istediğiniz gibi göründüğü için, ilk başta bir sözlük kullanmayı yeniden düşünmek isteyebileceğinizi öneririm . Şunu kullanabilirsiniz 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));
}
Alternatif olarak, bir düz CultureInfo
değerler listesi kullanın . LINQ, bunu gerçekten kolaylaştırır:
var cultures = service.LanguagesAvailable()
.Select(language => new CultureInfo(language));
languageList.DataTextField = "DisplayName";
languageList.DataValueField = "Name";
languageList.DataSource = cultures;
languageList.DataBind();
LINQ kullanmıyorsanız, yine de normal bir foreach döngüsü kullanabilirsiniz:
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();