2009-01-31 12 views
7

मैं अपने DB में तालिकाओं है कि एक महत्वपूर्ण मूल्य जोड़ी के लिए संदर्भ पकड़ की एक संख्या है:gridview बाँध dropdownlist सूची में <keyvaluePair <int, string>>

फ़ोन नंबरों का

प्रकार:

  • 1 - होम
  • 2 - कार्य
  • 3 - मोबाइल
  • 4 - फैक्स

आदि

तो मेरे पास प्रकारों के लिए एक टेबल है और जब वे अन्य तालिकाओं में उपयोग किए जाते हैं तो वे इंट मान को विदेशी कुंजी के रूप में संदर्भित करते हैं। जब मैं उन्हें बाहर खींच रहा हूं तो मैं उन्हें कक्षा में keyvaluepair<int, string> आइटमों के रूप में संग्रहीत कर रहा हूं।

जब मुझे उनकी एक सूची प्राप्त करने की आवश्यकता थी तो मैंने सोचा कि मैं केवल एक ही डेटा प्राप्त करने के लिए दो अलग-अलग प्रकार के डेटा प्रकारों का उपयोग करने के बजाय उनमें से एक सूची <> सूची बनाउंगा।

मेरी समस्या तब आई है जब मुझे edittemplate बिट का उपयोग कर रहा है, तो मुझे ग्रिडव्यू के भीतर ड्रॉपडाउन सूची को पॉप्युलेट करने की आवश्यकता है। यदि मैं इसे खींचने के लिए डेटास्रोत का उपयोग करता हूं तो यह पाठ में टेक्स्ट के रूप में int और होम के रूप में int को रखने के बजाय टेक्स्ट में [1 होम] लिख देगा।

मुझे लगता है कि मेरे पास वास्तव में एक से अधिक भाग प्रश्न हैं।

एक:

क्या मैं बेवकूफ हूँ? क्या यह डेटा प्राप्त करने और इसे स्टोर करने का एक बहुत बुरा तरीका है (keyvaluepair भाग)? क्या मुझे बस इसे एक डाटाटेबल में स्टोर करना चाहिए? मैं इसे सभी को डेटाटेबल में रखना पसंद नहीं करता था। मेरे पास मेरे डीएलएल ने मेरे बीएलएल को ले लिया है और सबकुछ की वस्तुओं के बजाए ऑब्जेक्ट्स या List<> ऑब्जेक्ट्स के रूप में सबकुछ को समाहित करने का प्रयास किया है। ज्यादातर बार यह अच्छी तरह से काम किया है।

दो:

अगर मैं dropdownlist के लिए मेरे ObjectDataSource में बाध्य करने के लिए एक datatable के बजाय किसी वस्तु उपयोग कर रहा था, मैं कैसे वर्तमान में चयनित मूल्य निर्धारित कर सकते हैं, बजाय यह सिर्फ सूची में पहले आइटम है चयनित?

संपादित

के रूप में बताया नीचे मैं एक बेवकूफ किया जा रहा था और बस DataValueField और DataKeyField सेट की जरूरत थी।

बाध्य करने के लिए मैं बस करना था dropdownlist पाने के लिए:

SelectedValue='<%# DataBinder.Eval(Container, "DataItem.PhoneType.Key") %>' 

कारण मैं नहीं देखा था कि एक सीधे था, क्योंकि यह मेरी IntelliSense में नहीं दिख रहा था लेकिन जब मैं इसे मैन्युअल रूप से टाइप किया में, यह काम किया।

उत्तर

29

उपयोग एक शब्दकोश < पूर्णांक, स्ट्रिंग > और मूल्य को कुंजी और DataTextField करने के लिए अपने लटकती DataValueField निर्धारित किया है।

// A sample dictionary: 
    var dictionary = new Dictionary<int, string>(); 
    dictionary.Add(1, "Home"); 
    dictionary.Add(2, "Work"); 
    dictionary.Add(3, "Mobile"); 
    dictionary.Add(4, "Fax"); 

    // Binding the dictionary to the DropDownList: 
    dropDown.DataTextField = "Value"; 
    dropDown.DataValueField = "Key"; 
    dropDown.DataSource = dictionary; //Dictionary<int, string> 
    dropDown.DataBind(); 
+0

Dayam - मैंने सोचा कि मैं एक * आसान * 30 अंक या तो था, लेकिन तुम मुझे यह करने के लिए हराया। अच्छा काम और अच्छे जवाब! –

+1

आप .. धन्यवाद है कि यह शानदार ढंग से बाध्य .. यह रूप में अच्छी तरह एक सूची <> उनमें से साथ काम किया। लेकिन मैं कुछ हद तक है कि क्या एक शब्दकोश वैसे भी है में लगता है ... – Jon

+0

मैं DataValueField और DataTextField स्थापित करने के लिए भूल गया .. कारण मेरी मूल्य और प्रदर्शन ड्रॉपडाउन सूची का पाठ ही है। धन्यवाद! –

0

और उसके अपने कस्टम विधि

// Define enum 
public enum ServiceType : int 
{ 
    MinimumService = 1, 
    NormalService = 2, 
    VipService = 99 
} 

// custom method to get my custom text name for each enum type 
public string GetServiceTypeName(ServiceType serviceType) 
{ 
    string retValue = ""; 
    switch (serviceType) 
    { 
     case ServiceType.Print: 
      retValue = "We have some services for you"; 
      break; 
     case ServiceType.BookBinding: 
      retValue = "We ar glad to meet you"; 
      break; 
     default: 
      retValue = "We alywas are ready to make you happy"; 
      break; 
    } 
    return retValue; 
} 

// making dictionary (key and value) for dropdown datasource 
public static Dictionary<string, int> GetAllServiceTypeName() 
{ 
    Dictionary<string, int> dataSource = new Dictionary<string, int>(); 

    foreach (int item in Enum.GetValues(typeof(ServiceType))) 
     dataSource.Add(GetServiceTypeName((ServiceType)item), item); 

    return dataSource; 
} 


    // bind the dropdown to dictionary 
    ddlServiceType.DataSource = GetAllServiceTypeName(); 
    ddlServiceType.DataBind(); 

    // aspx markup code sample 
    <asp:DropDownList ID="ddlServiceType" runat="server" 
     DataTextField="Key" DataValueField="Value"> 
    </asp:DropDownList> 
संबंधित मुद्दे