2009-06-11 13 views
29

मेरे पृष्ठ पर मेरे पास DropDownList है जो मैं SqlDataSource से डेटाबेस मानों के साथ पॉप्युलेट करता हूं (नीचे कोड देखें)।asp.net ड्रॉपडाउनसूची - डीबी मानों से पहले रिक्त रेखा जोड़ें

मैं अपने खुद के पाठ या मान से पहले एक रिक्त पंक्ति कैसे जोड़ सकते हैं?

<asp:DropDownList ID="drpClient" runat="server" Width="200px" 
    AutoPostBack="True" DataSourceID="dsClients" DataTextField="name" 
     DataValueField="client_id"> 
</asp:DropDownList> 
<asp:SqlDataSource ID="dsClients" runat="server" 
    ConnectionString="my_connection_string" 
    ProviderName="System.Data.SqlClient" 
    SelectCommand="SELECT [client_id], [name] FROM [clients]"> 
</asp:SqlDataSource> 

धन्यवाद।

पीएस क्या आप SqlDataSource का उपयोग करने की सलाह देते हैं या क्या यह किसी अन्य तरीके से पॉप्युलेट करना बेहतर है?

+0

यह इससे संबंधित है: http://stackoverflow.com/questions/267064/asp-net-add-blank-item-at-top-of-dropdownlist – mcfea

उत्तर

50

आप बस DropDownList मार्कअप के अंदर एक ListItem जोड़ सकते हैं। उसके बाद डेटासोर्स के सभी मूल्यों को जोड़ा जाएगा।

<asp:DropDownList ID="drpClient" runat="server" Width="200px" 
      AutoPostBack="True" DataSourceID="dsClients" DataTextField="name" 
      DataValueField="client_id" AppendDataBoundItems="true"> 
    <asp:ListItem>-- pick one --</asp:ListItem> 
</asp:DropDownList> 
+6

आपको इसे 'जगह' के बजाय 'संलग्न' करने के लिए कहना है ' –

+0

जैसा कि आपने कहा था, यह याद करना आसान है :-) –

20
<asp:DropDownList ID="drpClient" runat="server" Width="200px" 
     AutoPostBack="True" DataSourceID="dsClients" DataTextField="name" 
     DataValueField="client_id" AppendDataBoundItems="True"> 

    <asp:ListItem Text="" Value="" /> 
</asp:DropDownList> 

यह याद करना आसान है, इसलिए AppendDataBoundItems विशेषता को न भूलें।

6

मैं वास्तव में इस परीक्षण नहीं किया है, लेकिन मैं आप किसी आइटम के बाद आप ड्रॉप डाउन सूची आबद्ध है जोड़ सकता है कि यह सोचते हैं रहा हूँ। आप इस घटना को किसी भी ड्रॉपडाउन सूची में जोड़ सकते हैं जिसे आप इस खाली बॉक्स को जोड़ना चाहते हैं।

protected void DropDownList_DataBound(object sender, EventArgs e) 
    { 
     DropDownList ddl = (DropDownList)sender; 
     ListItem emptyItem = new ListItem("", ""); 
     ddl.Items.Insert(0, emptyItem); 
    } 
+2

जस्टिन - लाइन जोड़ने के इस तरीके से समस्या यह है कि यह अभी भी चयन योग्य है। यदि अलगाव के लिए एक खाली रेखा जोड़ा जाता है, तो इसे उपयोगकर्ता द्वारा चयन योग्य नहीं किया जाना चाहिए। –

2

मैं एक खाली विकल्प जोड़ने का चयन करें आदेश को बदलने का समाधान:

 <asp:SqlDataSource ID="dsClients" runat="server" 
      ConnectionString="my_connection_string" 
      ProviderName="System.Data.SqlClient" 
      SelectCommand="SELECT [client_id], [name] FROM [clients] union SELECT NULL, '--- pick one ----' "> 
     </asp:SqlDataSource> 

अभिवादन !!!

1

उस्तरा शैली कार्यान्वयन में मुझ पर यह इस तरह दिखता है:

function PutDefaultPrivilegePanelListHints() { 
    $('#role').val(''); 
    ... 
} 

भी विनीत के माध्यम से और अधिक लचीला समाधान नहीं है:

@Html.EnumDropDownListFor(
    model => model.Privilege.Role, 
    "-- Select role --", 
    new 
    { 
     @style = "width: 216px !important", 
     @class = "form-control", 
     id = "role", 
     required = "required" 
    }) 

और जावास्क्रिप्ट में जो लोड पर निष्पादित किया जाता है मैं इस राशि मान्यता (एचटीएमएल 5 पर भरोसा करने के लिए नहीं):

$('.required').each(function() { $(this).rules('add', { required: true, messages: { required: '' } }) }); 
बेशक

, वहाँ एक सर्वर sid है ई भी जांचें। मुझे नहीं लगता कि कक्षाओं का सामना करना एक अच्छा विचार है। उदाहरण के लिए, पेज में जो कुछ भी मैं दिखाता हूं वह कुछ वर्ग है। इस वर्ग में कई समृद्ध प्रकार के गुण हैं। यह उन सभी संपत्तियों को दोहराने के लिए एक दुःस्वप्न होगा, लेकिन कुछ अतिरिक्त वर्गों में उन्हें बेकार कर देगा क्योंकि कुछ लोगों ने यहां स्टैक ओवरफ्लो पर सुझाव दिया है।

आखिरकार, मुझे कुछ विशिष्ट मार्कअप के लिए अपना व्यावसायिक तर्क क्यों बदलना चाहिए? इसके बजाय, मैं जावास्क्रिप्ट और कुछ मॉडल चेक के माध्यम से सबकुछ से निपटता हूं।

संबंधित मुद्दे