2008-10-24 10 views
5

में ड्रॉपडाउनलिस्ट को उप-वर्गीकरण करना मैं एएसपी.NET में अंतर्निहित ड्रॉपडाउनलिस्ट को उप-वर्ग बनाना चाहता हूं ताकि मैं इसमें कार्यक्षमता जोड़ सकूं और इसे अपने पृष्ठों में उपयोग कर सकूं। मैंने इसे UserControl के साथ करने का प्रयास किया लेकिन पाया कि यह आंतरिक DropDownList का खुलासा नहीं करता है (तार्किक रूप से, मुझे लगता है)। मैंने जवाब के लिए गुगल किया है लेकिन कुछ भी नहीं मिला।ASP.NET

मैं वास्तविक वर्ग लिखने तक आया हूं, और ड्रॉपडाउनलिस्ट से उप-वर्ग करना संभव है लेकिन मैं अपने एएसपी.NET पृष्ठ में फ़ाइल को पंजीकृत करने में असमर्थ हूं और इसे स्रोत दृश्य में उपयोग करने में असमर्थ हूं। शायद मुझे मेरी कक्षा में कुछ संपत्तियां याद आ रही हैं?

कोई विचार?

+0

क्या आपको वास्तव में इसे विस्तारित करने की आवश्यकता है? या क्या आप इसमें डीडीएल के साथ उपयोगकर्ता नियंत्रण कर सकते हैं और फिर उन घटनाओं में से एक होने पर अपनी कार्यक्षमता जोड़ने के लिए अपने उपयोगकर्ता नियंत्रण के अंदर विभिन्न ईवेंट (ऑनसेलेटेड इंडेक्स चेंज, ऑनडाटा बाइंडिंग इत्यादि) को हुक कर सकते हैं? आप किस प्रकार की अतिरिक्त कार्यक्षमता जोड़ने की कोशिश कर रहे हैं? –

+0

एकमात्र चीज जो मैं इसके साथ करना चाहता हूं वह एक प्रारंभिक वैल्यू प्रॉपर्टी जोड़ती है जो पहले मान को परिभाषित करती है जो हमेशा डीडीएल में मौजूद होती है। – deadtime

+0

क्या डीडीएल को आंतरिक DropDownList या कुछ के रूप में बेनकाब करना समझदारी होगी? – deadtime

उत्तर

15

आप ड्रॉपडाउनलिस्ट को एक कस्टम नियंत्रण में विस्तारित करना चाहते हैं ... उपयोगकर्ता नियंत्रण में नहीं।

MyLibrary नामक एक नई कक्षा लाइब्रेरी प्रोजेक्ट बनाएं।

एक बार जब आप अपने पुस्तकालय संकलन एक वर्ग कहा जाता MyDropDownList.cs

namespace My.Namespace.Controls 
{ 
[ToolboxData("<{0}:MyDropDownList runat=\"server\"></{0}:MyDropDownList>")] 
public class MyDropDownList: DropDownList 
{ 
    // your custom code goes here 
    // e.g. 
    protected override void RenderContents(HtmlTextWriter writer) 
    { 
     //Your own render code 
    } 
} 
} 

जोड़ें, आप अपने वेब अनुप्रयोग में इसे करने के लिए एक संदर्भ जोड़ सकते हैं।

और अपने web.config में एक tagprefix

<add tagPrefix="my" namespace="My.Namespace.Controls" assembly="MyLibrary" /> 

कि आप अपने aspx/ascx के

<my:MyDropDownList ID="myDDl" runat="server"> 
    ... 
</my:MyDropDownList> 
+1

+1 यह कस्टम नियंत्रण बनाने के तरीके का एक शानदार वर्णन है जो बेस एएसपी.NET ऑब्जेक्ट्स से उनकी कार्यक्षमता का उत्तराधिकारी है। बहुत स्पष्ट और संक्षिप्त! – kdmurray

0

एक टिप्पणी में, आप अपने लक्ष्य स्पष्ट करने के लिए इस जोड़ने की अनुमति चाहिए: केवल " जो चीज़ मैं इसके साथ करना चाहता हूं वह एक प्रारंभिक वैल्यू प्रॉपर्टी जोड़ती है जो पहले मान को परिभाषित करती है जो हमेशा डीडीएल में मौजूद होती है। "

मुझे नहीं लगता कि आपको इसे पूरा करने के लिए एक विशेष उपयोगकर्ता नियंत्रण या कस्टम नियंत्रण बनाने की आवश्यकता है।

मैं अक्सर सूची नियंत्रणों को पॉप्युलेट करने के लिए अपने वेब ऐप्स में इस कोड का उपयोग करता हूं। आप एक बुलियन में यह इंगित करते हैं कि सूची के शीर्ष पर एक अतिरिक्त सूची इटैम जोड़ा जाना चाहिए, और उस आइटम के लिए टेक्स्ट।

public static void BindListControl (ListControl ctl, SqlDataReader dr, 
     String textColumn, String valueColumn, bool addBlankRow, string blankRowText) 
    { 
     ctl.Items.Clear(); 
     ctl.DataSource = dr; 
     ctl.DataTextField = textColumn; 
     ctl.DataValueField = valueColumn; 
     ctl.DataBind(); 

     if (addBlankRow == true) ctl.Items.Insert(0, blankRowText); 
    } 

अगर आप हर DropDownList इस तरह के "एक शहर चुनें" के रूप में अपनी प्रारंभिक मूल्य एक खाली, या पाठ के रूप में करना चाहते हैं,, उपयोगी है, उदाहरण के लिए।