2009-04-08 19 views
35

मेरे पासके अंदरहै जो SqlDataSource से पोस्टबैक पर आबादी है। इसमें एक पैरामीटर है जो एक और नियंत्रण है। मुझे कभी-कभी कई पोस्टबैक की आवश्यकता होती है, लेकिन क्या होता है कि प्रत्येक बार अपडेट पैनल रीफ्रेश होता है, आइटम DropDownList में जोड़े जाते हैं। तो DropDownList गलत डेटा, या दोहराया डेटा होने के समाप्त होता है।DropDownList AppendDataBoundItems (पहली वस्तु खाली होने और कोई डुप्लीकेट नहीं)

मेरे पास AppendDataBoundItems संपत्ति true पर सेट है क्योंकि मुझे पहले आइटम को खाली होने की आवश्यकता है।

मैं इस समस्या को कैसे दूर कर सकता हूं? क्या रिक्त पहला आइटम रखने का कोई और तरीका है?

(यह DropDownList एक asp.net-2.0 वेब अनुप्रयोग में है, और codebehind सी # में है)

धन्यवाद।

उत्तर

61
इसके बजाय AppendDataboundItems='true' (जो समस्या के बारे में आप बात कर रहे हैं कारण होगा) का उपयोग करने का

, DropDownList के लिए DataBound घटना का जवाब और फिर इस सूची के शीर्ष करने के लिए अपने "रिक्त" आइटम जोड़ें।

<asp:DropDownList runat="server" ID="MyList" 
    ondatabound="MyListDataBound"></asp:DropDownList> 
फिर पीछे अपने कोड में

:

protected void MyListDataBound(object sender, EventArgs e) 
{ 
    MyList.Items.Insert(0, new ListItem("- Select -", "")); 
} 
+0

धन्यवाद .. !! इससे – msbyuva

+0

Thnx मदद मिली! एक आकर्षण की तरह काम करता है – matskn

+0

क्या मुझे एकमात्र व्यक्ति को ऑनडाटाबाउंड के साथ कोई समस्या हो रही है जिसे आपने उपयोग करने के लिए घोषित किया है? ऐसा लगता है कि कोड के पीछे के अंत में नहीं दिख रहा है (इस तथ्य के बावजूद कि पूरे ड्रॉपडाउनलिस्ट आबादी और वहां बनाई गई है।) –

0

कोड काम करता है, यह एक मूल्य देने की कोशिश:

MyList.Items.Insert(0, new ListItem("- Select -", "0")); 
4

आप शायद के पीछे कोड में है कि DropDownList बाँध। तो तुम फिर से पोस्टबैक के बाद ऐसा नहीं करना चाहिए:

// probably in Page_Load method 
if (!Page.IsPostBack) 
{ 
    // do data binding here 
}; 
1
<asp:DropDownList ID="DropDownList1" AppendDataBoundItems="true" runat="server" 
    DataSourceID="SqlDataSource1" DataTextField="state" DataValueField="state"> 
    <asp:ListItem Text="(Select a State)" Value="" /> 
</asp:DropDownList> 
<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:pubsConnectionString %>" 
    SelectCommand="SELECT DISTINCT [state] FROM [authors]"> 
</asp:SqlDataSource> 
0

यहाँ एक विचार है।

AutoPostBack नामक ड्रॉप डाउन सूची में एक संपत्ति है जो इसे सत्य पर सेट करती है और फिर आपके पीछे के कोड में if(!Page.IsPostBack) के अंदर सभी बाध्यकारी विधि डाल दी जाती है। यह मेरे लिए काम किया।

संबंध।

2

यहाँ एक विचार है, हम 2 घटनाओं का उपयोग कर सकते हैं: databound और DataBinding:

protected void MyListDataBound(object sender, EventArgs e) 
{ 
    MyList.Items.Insert(0, new ListItem("- Select -", "")); 
} 

protected void MyListDataBinding(object sender, EventArgs e) 
{ 
    MyList.Items.Items.Clear(); 
} 
+0

MyListDataBinding फ़ंक्शन में सूची साफ़ करना प्रभावी रूप से वही चीज़ है जो AppendDataBoundItems = "false" सेट करना है। –

3

वहाँ अच्छा जवाब यहाँ हैं लेकिन मैं अधिक जानकारी शामिल करने के लिए, क्योंकि वहाँ कई विकल्प हैं की जरूरत महसूस हुई कि काम करते हैं और हमें यह तय करने की ज़रूरत है कि किस का उपयोग करना है।

सबसे पहले, हमें AppendDataBoundItems समझना चाहिए। यदि AppendDataBoundItems = "true", ListItems को पुराने लोगों को साफ़ किए बिना DropDownList में जोड़ा गया है। अन्यथा, DropDownList अगले DataBind से पहले साफ़ हो गया है।

1. html में एक खाली विकल्प परिभाषित करें और केवल एक बार DropDownList को डेटाबेस से ListItems जोड़ें: MSDN AppendDataBoundItems doc

मूल रूप से 2 विकल्प अधिकतर उत्तर द्वारा कवर कर रहे हैं।यहाँ

सूचना 3 चीजें:

  • खाली ListItem html में परिभाषित किया गया है DropDownList आइटम गिनती है जब> 1
  • AppendDataBoundItems="true"
  • DataBind Postbacks पर बुलाया नहीं है या

    स्रोत:

    <asp:DropDownList ID="MyList" runat="server" AppendDataBoundItems="true" DataValueField="Id" DataTextField="Name" > 
        <asp:ListItem Text="- Select One -" Value="" /> 
    </asp:DropDownList> 
    

    पीछे कोड:

    protected void Page_Load(object sender, System.EventArgs e) 
    { 
        if (MyList.Items.Count <= 1) { 
         MyList.DataSource = MyDataSource; 
         MyList.DataBind(); 
        } 
    } 
    

    नोट: मैं गिनती IsPostBack जाँच बनाम जाँच के तर्क की तरह। हालांकि पोस्टबैक अक्सर डुप्लिकेट डेटाबेसिंग का कारण होते हैं, लेकिन अन्य तरीकों से इसका कारण बनना संभव है। आइटम गिनती की जांच करना मूल रूप से यह देखने के लिए जांच कर रहा है कि यह पहले ही लोड हो चुका है या नहीं।

    या (विकल्प IsPostBack का उपयोग करने के बजाय)

    protected void Page_Load(object sender, System.EventArgs e) 
    { 
        if (!IsPostBack) { 
         MyList.DataSource = MyDataSource; 
         MyList.DataBind(); 
        } 
    } 
    

    2. साफ और प्रत्येक पृष्ठ ताज़ा करने पर DropDownList से लोड करें। पहला विकल्प से

    सूचना 3 मतभेद:

    • AppendDataBoundItems="false"
    • खाली ListItem कोड में पीछे जोड़ा जाता है (अगर यह तो निर्धारित नहीं है false यह डिफ़ॉल्ट मान है)। हम इसे HTML में परिभाषित नहीं कर सकते क्योंकि AppendDataBoundItems="false" के साथ, इसे साफ़ कर दिया जाएगा।
    • DataBind हर Page_Load

    स्रोत पर कहा जाता है:

    <asp:DropDownList ID="MyList" runat="server" DataValueField="Id" DataTextField="Name" 
        OnDataBound="MyList_DataBound" > 
    </asp:DropDownList> 
    

    कोड के पीछे:

    protected void Page_Load(object sender, System.EventArgs e) 
    { 
        MyList.DataSource = MyDataSource; 
        MyList.DataBind(); 
    } 
    
    protected void MyList_DataBound(object sender, EventArgs e) 
    { 
        MyList.Items.Insert(0, new ListItem("- Select One -", "")); 
    } 
    
  • 0

    बस EnableViewState = "false" ड्रापडाउन टैग में जोड़े

    <asp:DropDownList runat="server" ID="DropDownList1" DataSourceID="SqlDataSource" 
    DataTextField="Name" DataValueField="ID" EnableViewState="false" 
    AppendDataBoundItems="true"> 
        <asp:ListItem Value="">Select</asp:ListItem> 
    </asp:DropDownList> 
    
    संबंधित मुद्दे