Коли словник перераховується, це дасть KeyValuePair<TKey,TValue>
об'єкти ... так що вам просто потрібно вказати значення «Value» і «ключ» для DataTextField
і , DataValueField
відповідно, для вибору Value / Основні властивості.
Завдяки коментарю Джо, я перечитав питання, щоб правильно їх вирішити. Зазвичай я очікую, що "ключем" у словнику буде текст, що відображається, а "значення" - отримане значення. Ваш зразок-код використовує їх навпаки. Якщо ви дійсно не потребуєте їх таким чином, ви можете розглянути можливість написання коду як:
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();