Когда словарь пронумерован, он выдаст KeyValuePair<TKey,TValue>
объекты ... поэтому вам просто нужно указать «Значение» и «Ключ» для DataTextField
и, DataValueField
соответственно, для выбора свойств « Значение / Ключ» .
Благодаря комментарию Джо, я перечитал вопрос, чтобы все исправить. Обычно я ожидаю, что «ключом» в словаре будет отображаемый текст, а «значением» - полученное значение. Однако в вашем примере кода они используются наоборот. Если вам действительно не нужно, чтобы они были такими, вы можете написать свой код как:
list.Add(cul.DisplayName, cod);
(А затем изменив привязку, чтобы использовать "Ключ" для DataTextField
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();