2009-05-14 4 views
15

अगर मैं एक सूची < व्यक्ति> जहां व्यक्ति वर्गकैसे मैं एक सूची <Person> करने के लिए एक पुनरावर्तक बाँध भी बाध्य आइटम अपडेट करने हैं? (2 तरह)

class Person 
{ 
    string Forename 
    { 
     get;set; 
    } 
    string Surname 
    { 
     get; set; 
    } 
} 

और मैं यह एक एएसपी पुनरावर्तक नियंत्रण है कि इस तरह दिखता है करने के लिए बाध्य द्वारा परिभाषित किया गया है:

<asp:Repeater ID="Repeater1" runat="server"> 
    <ItemTemplate> 
     <asp:Label ID="lblForename" runat="server" Text="Forname" AssociatedControlID="txtForename" /> 
     <asp:TextBox ID="txtForename" runat="server" Text='<%# ((Person)Container.DataItem).Forename %>' /> 
     <br /> 
     <asp:Label ID="lblSurname" runat="server" Text="Forname" AssociatedControlID="txtSurname" /> 
     <asp:TextBox ID="txtSurname" runat="server" Text='<%# ((Person)Container.DataItem).Surname %>' /> 
     <br /> 
    </ItemTemplate> 
</asp:Repeater> 

उस डेटा को प्राप्त करने का सबसे अच्छा तरीका क्या है जिसे उपयोगकर्ता ऑब्जेक्ट में वापस टाइप करता है?

मैंने सोचा था कि बाध्यकारी डेटा के पूरे मुद्दे कि यह प्रभावी रूप से आप के लिए संचालित किया गया था, लेकिन जब मैं Repeater1.Items संग्रह का निरीक्षण किया, वहाँ कोई परिवर्तन कर रहे हैं। मैं अगर ऐसा है

//This is only intended to be pseudo code 
for each item in Repeater1.Items 
    ((Person)item.DataItem).Forename = item.FindControl("txtForname").Text; 
end for 

की तर्ज पर कुछ करने के लिए कोड लिखने के लिए है, क्यों DataItem संपत्ति हमेशा खाली है?

अतिरिक्त जानकारी:

मैं पहले से ही कोड बोल रहा हूँ

this.Repeater1.DataSource = this.PersonList; 
this.Repeater1.DataBind(); 

के प्रभाव मैं Bind("Forename") उपयोग करने की कोशिश की है, लेकिन इस टेक्स्ट बॉक्स से जानकारी वापस लाने के लिए प्रतीत नहीं होता वस्तु में, क्या मुझे इसे मैन्युअल रूप से करना है?

उत्तर

8

सरल उत्तर इस्तेमाल कर सकते हैं जैसे यह है कि पुनरावर्तक नियंत्रण दो तरह के डाटाबेसिंग का समर्थन नहीं करता है जिसे आप ढूंढ रहे हैं। उस पर, DataItem प्रॉपर्टी का उपयोग केवल पुनरावर्तक आइटम के निर्माण के दौरान किया जाता है, और ItemDataBound ईवेंट के बाद, यह कुछ भी सेट नहीं होता है। तो आप पोस्टबैक के बाद विशिष्ट पुनरावर्तक आइटम बनाते समय मूल ऑब्जेक्ट प्राप्त करने के लिए उस प्रॉपर्टी का उपयोग नहीं कर सकते (जैसा कि आप अपने छद्म कोड में कर रहे हैं)।

आपको सुझाव दिया गया है कि आपको दोहराने वाले आइटमों के माध्यम से लूप करना होगा (यह सुनिश्चित करना सुनिश्चित करें कि आइटम ListItemType.Item या AlternatingItem का कुछ भी करने से पहले) और फिर टेक्स्टबॉक्स से मान निकालें और अपडेट में उनका उपयोग करें ।

+0

वह उत्तर नहीं जिसकी मैं उम्मीद कर रहा था, लेकिन ऐसा लगता है कि आप सही हैं। – ilivewithian

2

उपरोक्त के अतिरिक्त, आप भी सूची को पुनरावर्तक बाध्य करने के लिए की जरूरत है। अभी पाठ बॉक्स पूर्व नाम के मान को सौंपा जाता है (या potentailly बाध्य करता है, तो आप

<# Bind("Forename") %> 

टैग का उपयोग), लेकिन पुनरावर्तक कंटेनर कोई DataItem है।

7

आप उस व्यक्ति की सूची के साथ पुनरावर्तक में आबद्ध करें यदि आप चाहते हैं

this.Repeater1.DataSource = GetPersons(); 

जबकि GetPersons() है व्यक्ति की एक सूची लौट रहा एक विधि वस्तुओं आप

<asp:TextBox ID="txtForename" runat="server" Text='<%# Eval("Forename") %>' /> 
+4

नहीं, यह पुनरावर्तक भरता है, लेकिन यह उपयोगकर्ता के दर्ज किया गया डेटा वापस नहीं मिलता है। इवल 1-तरफा डेटा बाध्यकारी है, सवाल 2-तरफा डेटा बाइंडिंग के बारे में पूछ रहा है। –

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

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