Khi một từ điển được liệt kê, nó sẽ mang lại KeyValuePair<TKey,TValue>
đối tượng ... vì vậy bạn chỉ cần xác định "giá trị" và "khóa" cho DataTextField
và DataValueField
tương ứng, để chọn giá trị gia tăng / chính tài sản.
Nhờ lời nhận xét của Joe, tôi đã đọc lại câu hỏi để có những câu hỏi đúng đắn. Thông thường, tôi mong đợi "khóa" trong từ điển là văn bản được hiển thị và "giá trị" là giá trị được tìm nạp. Tuy nhiên, mã mẫu của bạn sử dụng chúng theo cách khác. Trừ khi bạn thực sự cần chúng theo cách này, bạn có thể muốn xem xét viết mã của mình dưới dạng:
list.Add(cul.DisplayName, cod);
(Và sau đó thay đổi liên kết để sử dụng "Khóa" cho DataTextField
và "Giá trị" cho DataValueField
, tất nhiên.)
Trên thực tế, tôi đề nghị rằng có vẻ như bạn thực sự muốn một danh sách hơn là một từ điển, bạn có thể muốn xem xét lại việc sử dụng từ điển ngay từ đầu. Bạn chỉ có thể sử dụng 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));
}
Ngoài ra, hãy sử dụng danh sách các CultureInfo
giá trị thuần túy . LINQ làm cho điều này thực sự dễ dàng:
var cultures = service.LanguagesAvailable()
.Select(language => new CultureInfo(language));
languageList.DataTextField = "DisplayName";
languageList.DataValueField = "Name";
languageList.DataSource = cultures;
languageList.DataBind();
Nếu không sử dụng LINQ, bạn vẫn có thể sử dụng vòng lặp foreach bình thường:
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();