เมื่อมีการแจกแจงพจนานุกรมมันจะให้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 loop ตามปกติได้:
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();