2009-08-12 15 views
26

मैं इस विचित्र चीज में आया हूं कि मैं एक अलग (तार्किक) तरीके से काम करने की उम्मीद कर रहा था, लेकिन ऐसा नहीं है। क्या यह एक बग या "फीचर" है?डाटाबेस एएसपी.नेट सूची की सूची ड्रॉपडाउन सूची मुद्दे

तो ड्रॉपडाउनलिस्ट है कि मैं सूची सूची की सूची के साथ कोडबेंड में पॉप्युलेट कर रहा हूं।

List<ListItem> users = new List<ListItem>(); 
foreach (SubscriptionUser su in subscriptionDetails.UserList) 
{ 
    users.Add(new ListItem(su.FirstName + " " + su.LastName, su.EmailAddress)); 
} 
ddlPrimaryContact.DataSource = users; 
ddlPrimaryContact.DataBind(); 

अब, किसी ने मुझे समझा सकता है क्यों डेटाबाउंड DropDownList दोनों पाठ और मूल्य बिल्कुल वैसा ही करने के लिए सेट: प्रत्येक नया ListItem 2 तर्क, IntelliSense-उपलब्ध किए गए दस्तावेज़ के अनुसार, इसके पाठ और मूल्य के अनुरूप हो जाता है (ListItem टेक्स्ट) ListItem.Text को टेक्स्ट और ListItem.Value के रूप में मूल्य के रूप में उपयोग करने के बजाय?

ARGH!! http://www.freeimagehosting.net/uploads/fe65d0e7d5.jpg

या मैं कुछ गलत कर रहा हूँ?

+0

चूंकि आप अपनी सूची बनाने के लिए पहले से ही लूपिंग कर रहे हैं, क्यों न केवल प्रत्येक सूची आइटम को ड्रॉपडाउन सूची में जोड़ें? – ScottE

उत्तर

53

हाय जब डेटाबेस (कुछ भी करने के लिए) आपको अपने DropDownList के DataTextField और DataValueField को सेट करने की आवश्यकता है। आपके मामले में आप निम्नलिखित कोड

List<ListItem> users = new List<ListItem>(); 
foreach (SubscriptionUser su in subscriptionDetails.UserList) 
{ 
    users.Add(new ListItem(su.FirstName + " " + su.LastName, su.EmailAddress)); 
} 
ddlPrimaryContact.DataTextField = "Text"; 
ddlPrimaryContact.DataValueField = "Value"; 
ddlPrimaryContact.DataSource = users; 
ddlPrimaryContact.DataBind(); 
+0

धन्यवाद। इस बीच मैंने इसे समझ लिया। मुझे लगता है कि मुझे लगता है कि यह "मिलान" स्वचालित रूप से किया जाएगा, लेकिन स्पष्ट रूप से मैं गलत था ... – Farinha

8

आप अपने ड्रॉपडाउन सूची के लिए बाध्य करना चाहिए का उपयोग करना चाहिए के रूप में:

ddlPrimaryContact.DataSource = users; 
ddlPrimaryContact.DataTextField = "Value"; 
ddlPrimaryContact.DataValueField = "Text"; 
ddlPrimaryContact.DataBind(); 

आप से पूछना क्यों, जहाँ तक मुझे पता है, डेटाबाउंड नियंत्रण ग्रंथों और मूल्यों लेता है (यदि उन्हें डेटासोर्स संग्रह में प्रत्येक आइटम के लिए ToString विधि को कॉल करके उपर्युक्त की तरह आपूर्ति नहीं की जाती है। इसलिए आपके संग्रह में प्रत्येक ListItem इसे टेक्स्ट प्रॉपर्टी को ToString विधि द्वारा वापस कर देता है।

5

या, वैकल्पिक रूप से, आप इसे इस तरह से बांध सकते हैं। (यह मानते हुए आप SubscriptionUser FullName (जो su.FirstName + रिटर्न + su.LastName कहा जाता है "" एक केवल पढ़ने के लिए संपत्ति में जोड़ सकते हैं)

ddlPrimaryContact.DataSource = subscriptionDetails.UserList; 
ddlPrimaryContact.DataBind(); 

तो, अपने ASPX पेज पुट में:

<asp:DropDownList id="ddlPrimaryContact" runat="server" DataTextField="FullName" DataValueField="EmailAddress" /> 
+0

यह एक सुंदर साफ विधि है, यह अधिक सहज और रखरखाव योग्य है। मैं इस विधि का उपयोग कर समाप्त हुआ, क्योंकि यह प्रत्येक ड्रॉपडाउन सूची आइटम के लिए मेरे मौजूदा वर्ग ऑब्जेक्ट की संरचना का पालन करता था। – Bryan

5

आप कर सकते हैं भी है सीधे .. ड्रॉपडाउन के लिए ListItem जोड़ने

List<ListItem> users = new List<ListItem>(); 
     for (int count = 0; count < 10; count++) 
     { 
      ListItem li = new ListItem("List " + count.ToString(), count.ToString()); 
      ddl.Items.Add(li); 
     } 
5

एक DropDownList और .NET स्वतः DropDownList के पाठ के साथ ListItem के पाठ से मेल करने के लिए ListItem आइटम जोड़ने के लिए एक रास्ता है, और सा नहीं है मुझे मूल्य के लिए:

List<ListItem> users = new List<ListItem>(); 
// fill in list 
ddlUsers.Items.AddRange(users.ToArray()); 
संबंधित मुद्दे