При перечислении словаря он выдаст 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();