2008-11-23 12 views
5

(नीचे पोस्ट के नीचे करने के लिए समाधान खोजने के लिए स्क्रॉल करें।)DropdownList.selectedIndex हमेशा 0 (हाँ, मैं क्या ज़रूरत है! IsPostBack)

जो एक Datalist शामिल एक asp.net पृष्ठ मिल गया। इस डेटालिस्ट के अंदर, एक टेम्पलेट है जिसमें ड्रॉपडाउनलिस्ट है और प्रत्येक बार डेटालिस्ट किसी आइटम से भरा हुआ है, आइटमक्रेटेड कमांड कहा जाता है। आइटमक्रेटेड कमांड ड्रॉपडाउन सूची को डेटाबेस करने के लिए ज़िम्मेदार है।

मुझे लगता है कि समस्या यहाँ है, कि मैं को ItemCreatedCommand उपयोग कर रहा हूँ पॉप्युलेट - लेकिन विचित्र बातें कि अगर मैं रंग "हरी" चुनते हैं, पेज autopostback जाएगा, और मैं देखेंगे कि लटकती हरे रंग पर अभी भी है, लेकिन जब उपयोग करने के लिए यह SelectedIndex है की कोशिश कर रहा, मैं हमेशा 0 मिलता है ...

protected void DataListProducts_ItemCreatedCommand(object 
    source, DataListItemEventArgs e) 

var itemId = (String)DataListProducts.DataKeys[e.Item.ItemIndex]; 
var item = itemBLL.GetFullItem(itemId); 

var DropDownListColor = (DropDownList)e.Item.FindControl("DropDownListColor"); 

//Also tried with : 
//if(!isPostBack) { 

DropDownListColor.DataSource = item.ColorList; 
DropDownList.Color.Databind(); 

// } End !isPostBack) 

    Label1.test = DropDownListColor.SelectedIndex.toString(); 
// <- THIS IS ALWAYS 0! *grr* 

मैं नीचे कोड देखने के लिए थोड़ा संकुचित है, लेकिन अभी भी आप देख सकते हैं कि मैं कोशिश कर रहा हूं करने के लिए :) :) का कारण मैं यह क्यों कर रहा हूं, और रंगों के लिए डेटासोर्स सीधे i aspx-page घोषित नहीं करता है, यह है कि मुझे परीक्षण (शोकोल्टर) चलाने की आवश्यकता है, लेकिन मैं नहीं करता कोड के साथ एचटीएमएल पेज को अव्यवस्थित करने के लिए चाहते हैं कि मुझे लगता है कि कोड कोड-फ़ाइल में होना चाहिए।

संपादित करें: SelectedIndexChange को बदलने की कोशिश के बाद - मैं कैसे DataList अंदर तत्वों को बदलने के लिए कर रहा हूँ - अब मैं अपने सिर में एक "तार्किक" भ्रम की स्थिति आ रही है? चूंकि, जहां तक ​​मुझे पता है - I में की जांच करने का कोई तरीका नहीं है, यह डाइटलिस्ट में आइटम विशेष ड्रॉपडाउनसूची से संबंधित है ... या?

या तो बुलबुला घटना के लिए:) लेकिन ऐसा करते हैं सवाल :)

समाधान पर अपने विचार पोस्ट करें, मैं कुछ तरीके आज़मा सकते हैं और क्या मैं के साथ अंत देखने के लिए जा रहा हूँ ItemCommand, या घटना संभाल, प्रेषकों माता-पिता मिल (जो एक datalistItem है और वहाँ में तत्वों में हेरफेर।

protected void DropDownListColor_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      DropDownList dropDownListColor = (DropDownList)sender; 
      DataListItem dataListItem = (DataListItem)dropDownListColor.Parent; 

      var item = items[dataListItem.ItemIndex]; 
      var color = item.ItemColor[dropDownListColor.SelectedIndex]; 

      var LabelPrice = (Label)dataListItem.FindControl("LabelPrice"); 
      LabelPrice.Text = color.Price; 
     } 
+0

आप के लिए कारण के बारे में अधिक स्पष्ट कर सकते हैं जोड़ना नहीं इसे पेज में डालना? मुझे यकीन नहीं है कि मैं सही ढंग से समझता हूं। आप कहते हैं कि आप एएसपीएक्स/एचटीएमएल को अव्यवस्थित नहीं करना चाहते हैं, लेकिन मुझे कोई कारण नहीं दिखता कि ड्रॉपडाउन को बाध्यकारी क्यों करना थोड़ा अलग होगा? –

+0

ठीक है, ईमानदार होने के लिए, मुझे लगता है कि मैं "एचटीएमएल को अव्यवस्थित नहीं" छोड़ने जा रहा हूं, क्योंकि मैं घंटों तक घूम रहा हूं, और ऐसा लगता है कि मुझे जो चाहिए वह कोई आसान कार्यान्वयन नहीं है। लेकिन कारण कोड और डिजाइन का सख्त पृथक्करण रखना था। (अब मुझे एएसपीएक्स में एक आई-चेक जोड़ना होगा) –

उत्तर

8

जब DataList डेटा-बाउंड, AutoPostBack, अभी तक संभाला नहीं किया गया है में मानों यानी है ItemCreated घटना stil हैं एल मूल मूल्यों।

आपको ड्रॉपडाउन नियंत्रण की चयनित इंडेक्स चेंज घटना को संभालने की आवश्यकता है।

+0

आह - धन्यवाद;) मैं कोशिश करूँगा :) –

0

अपने 2 प्रश्न के बारे में:

मैं तुम्हें ड्रॉप-डाउन से AutoPostBack निकालने के लिए, "नई जानकारी" बटन जोड़ने के लिए, और घटना बटन क्लिक में डेटा अपडेट कर लें।

बटन कमांड और कमांड ऑर्ग्यूमेंट मान रख सकता है, इसलिए डेटाबेस रिकॉर्ड के साथ संबद्ध होना आसान है।

+0

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

0

अपने समाधान के लिए धन्यवाद पर सी # उदाहरण के साथ कुछ MSDN लिंक

protected void ddlOnSelectedIndexChanged(object sender, EventArgs e) { 
    try { 
     ModalPopupExtender1.Show(); 
     if (ViewState["Colors"] != null) { 
      FillColors(ViewState["Colors"].ToString()); 
     } 

     DropDownList dropDownListColor = (DropDownList)sender; 
     DataListItem dataListItem = (DataListItem)dropDownListColor.Parent; 

     Image image = (Image)dataListItem.FindControl("mdlImage"); 
     Label ProductCode = (Label)dataListItem.FindControl("lblprdCode"); 
     Label ProductName = (Label)dataListItem.FindControl("lblProdName"); 
     DropDownList ddlQuantity = (DropDownList)dataListItem.FindControl("ddlQuantity"); 
     Label ProductPrice = (Label)dataListItem.FindControl("lblProdPrice"); 
     Label TotalPrice = (Label)dataListItem.FindControl("lblTotPrice"); 
     //Label ProductPrice = (Label)dataListItem.FindControl("lblProdPrice"); 
    } catch (Exception ex) { 

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