2011-10-05 16 views
8

के बाद गतिशील कॉलम गायब हो जाते हैं मेरे पास BoundFields और दो TemplateFields के साथ GridView है। इन दो TemplateFields में, मैं गतिशील रूप से UserControls बना रहा हूं जिसमें DropDownList और TextBox है, जो उपयोगकर्ता संशोधित कर सकते हैं।पोस्टबैक

जब मैं PostBack के बाद नियंत्रण के मान प्राप्त करने का प्रयास करता हूं, तो BoundFields में मान अभी भी वहां हैं लेकिन मेरे गतिशील नियंत्रण गायब हो जाते हैं। मैं उन्हें फिर से बना सकता हूं लेकिन इसे उपयोगकर्ता के मूल्य नहीं मिलेगा ... मैं इन मानों को खोने से पहले कैसे प्राप्त कर सकता हूं?

RowDataBound घटना में:

Select Case type 
    Case "BooleanBis" 
     e.Row.Cells(2).Controls.Clear() 
     Dim list1 As BooleanBisList = New BooleanBisList(avant, False) 
     e.Row.Cells(2).Controls.Add(list1) 

     e.Row.Cells(4).Controls.Clear() 
     Dim list2 As BooleanBisList = New BooleanBisList(apres, True) 
     e.Row.Cells(4).Controls.Add(list2) 
    Case "Boolean" 
     e.Row.Cells(2).Controls.Clear() 
     Dim list3 As BooleanList = New BooleanList(avant, False) 
     e.Row.Cells(2).Controls.Add(list3) 

     e.Row.Cells(4).Controls.Clear() 
     Dim list4 As BooleanList = New BooleanList(apres, True) 
     e.Row.Cells(4).Controls.Add(list4) 
End Select 

मेरी बटन क्लिक करें घटना में, मैं उपयोगकर्ता नियंत्रण प्राप्त करने की कोशिश:

यहाँ मेरी कोड के कुछ है

Case "String" 
    temp.ChampValeurApres = DirectCast(Tableau1.Rows(i).Cells(selectedColumn).Controls(1), TextBox).Text 

लेकिन मुझे त्रुटि मिलती है कि यह अस्तित्व में नहीं है।

उत्तर

8

आप RowCreated बजाय RowDataBound में गतिशील नियंत्रण बनाना चाहिए क्योंकि इस घटना के हर पोस्टबैक जब GridView databound हो जाता है करने के लिए इसे DataSource है जबकि RowDataBound केवल सक्रिय कर देगा पर निकाल दिया जाता।

गतिशील रूप से बनाए गए नियंत्रण एक ही आईडी से हर पोस्टबैक पर निर्मित किया जाना चाहिए के रूप में पहले, तो वे ViewState में उनके मूल्यों को बनाए रखने और घटनाओं को सही ढंग से सक्रिय कर देगा (f.e। एक DropDownList के SelectedIndexChanged घटना)।

तो आप उन्हें RowCreated में बनाना चाहिए और उन्हें RowDataBound में "भरने" (उदा DropDownList डेटा स्रोत/आइटम या एक TextBox -टेक्स्ट)।

+0

बहुत बहुत धन्यवाद! मुझे अभी भी एक समस्या है, मेरे पास पढ़ने के नियंत्रण के साथ कॉलम है। और इन नियंत्रणों का मान पोस्टबैक के बाद पुनर्प्राप्त नहीं किया गया है। कोई उपाय ? – user874854

+0

@ user874854: 'readonly' नियंत्रण ViewState में क्लाइंटसाइड पर परिवर्तनों को बनाए रखता है (केवल सर्वरसाइड पर परिवर्तन)। उन्हें [गुण] के माध्यम से 'readonly' बनाएं' (http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.webcontrol.attributes.aspx) -कोलेक्शन, उदाहरण के लिए: 'TextBox1.Attributes .Add ("केवल पढ़ने के लिए", "केवल पढ़ने के लिए"); '। इस तरह आप ASP.NET को मूर्ख बनाते हैं। देखो [यहां] (http://www.codeproject.com/KB/aspnet/Readonly.aspx) आगे के इंफोस के लिए। –

0

मेरे द्वारा उपयोग किए:

EnableViewState="false" 
GridView विशेषताओं में

। इसे हटाने से मेरी समस्या हल हो गई!