2009-09-14 8 views
5

कुछ फॉर्म बनाने के लिए आसान बनाने के लिए, हम एक संशोधित फॉर्मव्यू नियंत्रण का उपयोग करते हैं जो उपयोगकर्ता नियंत्रण के अंदर है। यह उपयोगकर्ता नियंत्रण एक ग्रिड और एक FormView के लिए है, तो आप ग्रिड में एक आइटम का चयन कर सकते हैं, और एक FormView देखने/संपादन के लिए एक मॉडल में प्रस्तुत किया है:उपयोगकर्ता नियंत्रण के माध्यम से किसी ITEMplate का खुलासा कैसे करें?

<I2CL:Grid runat="server" ID="Grid" OnSelecting="Selecting" ShowCreate="true" /> 
<I2:Modal ID="SFModal" runat="server" UpdateMode="Conditional"> 
<ContentTemplate> 
    <I2:FormView runat="server" ID="FVSubForm" DefaultMode="Edit" DataSourceID="DSSubForm" /> 
    <I2:ILDataSource ID="DSSubForm" runat="server" /> 
</ContentTemplate> 
</I2:Modal> 

एक पेज में, नियंत्रण इस तरह दिखता है:

<I2C:TabGrid ID="TG" runat="server" Property="ParentProperty"> 
    <Columns> 
    <I2:Column Header="Column 1" DataSource="Column1" /> 
    <I2:Column Header="Column 2" DataSource="Column2" /> 
    </Columns> 
    <EditItemTemplate> 
    <I2Form:Dropdown ID="Col1" runat="server" SelectedValue='<%# Bind("Column1") %>' List="Column1Options" /> 
    <I2Form:Textbox ID="Col2" runat="server" Text='<%# Bind("Column2") %>' /> 
    </EditItemTemplate> 
</I2C:TabGrid> 

समस्या यह है कि हम EditItemTemplate का उपयोग करते हैं। एक ही रास्ता मैं पता लगा सकते हैं कि यह कैसे हुक अप करने के लिए TabGrid नियंत्रण में एक ITemplate है और OnInit में संदर्भ लागू करने के लिए है:

[PersistenceMode(PersistenceMode.InnerProperty), 
TemplateContainer(typeof(FormView))] 
public ITemplate EditItemTemplate { get; set; } 

protected override void OnInit(EventArgs e) 
{ 
base.OnInit(e); 
FVSubForm.EditItemTemplate = EditItemTemplate; 
} 

इस के साथ समस्या यह है कि इसकी वजह संदर्भ में एक वस्तु के लिए है उपयोगकर्ता नियंत्रण, EditItemTemplate संदर्भ जो परिवर्तनों के लिए FormView में शब्दकोश प्रविष्टियों से संबंधित है, नष्ट हो जाते हैं, इसलिए जब आप डेटा स्रोत पर भेजे गए परिवर्तनों का शब्दकोश प्राप्त करते हैं, तो वे प्रत्येक पोस्टबैक पर खाली होते हैं।

I2: ILDataSource यहां ऑब्जेक्टडेटा स्रोत के निकट एक कस्टम कार्यान्वयन है। जेनेरिक ऑब्जेक्ट कॉल के बजाए, यह सीधे पृष्ठ में GetEntity() (या इस मामले में उपयोगकर्ता नियंत्रण) और UpdateEntity(obj Entity) को सहेजने के लिए कॉल करता है। चूंकि यह एक बहुत ही विशिष्ट परिदृश्य है, इसलिए हम ऑब्जेक्टडेटा स्रोत में 90% कोड को खत्म कर सकते हैं।

मुझे क्या करना सक्षम होना चाहते हैं सीधे <I2:FormView> अंदर की <EditItemTemplate> को <I2C:TabGrid> में <EditItemTemplate> बात है। क्या यह संभव है, या किसी के पास जाने के लिए किसी अन्य मार्ग का सुझाव है?

नोट: मैंने FVSubForm पर एडिट इटैम टेम्पलेट को प्रॉक्सी प्रॉपर्टी के रूप में उजागर करने का प्रयास किया, लेकिन यह काम नहीं किया क्योंकि बच्चे के नियंत्रण से पहले संपत्ति उपयोगकर्ता नियंत्रण पर सेट की गई है, इसलिए FVSubForm शून्य है। अगर यह चारों ओर काम किया जा सकता है, तो मैं निश्चित रूप से सभी कान हूँ। बिना

[TemplateContainer (typeof (FormView), System.ComponentModel.BindingDirection.TwoWay)]

:

उत्तर

5

एक बात आपको बस इतना करना दो तरह से डेटा बाइंडिंग समर्थन के रूप में अपने ITemplate संपत्ति निशान है यह, एएसपी.NET पृष्ठ के लिए उचित कोड उत्पन्न नहीं करेगा जो बाइंड() अभिव्यक्तियों को काम करने की अनुमति देता है।

मुझे यकीन नहीं है कि आपको बस इतना ही चाहिए, लेकिन यह कोशिश करने के लिए कुछ है।

डेविड

+0

सुझाव के लिए धन्यवाद ... लेकिन स्थिति यह है: ITemplate ही उपयोगकर्ता में नियंत्रण के लिए बाध्य नहीं होता है, यह FormView नियंत्रण है कि यह है कि के लिए निर्दिष्ट की किसी भी बंधन पर होता है पर ITemplate है ... यह उचित बाध्यकारी विशेषताओं सेट है। मैंने वैसे भी कोशिश की, लेकिन अंतिम परिणाम (रिक्त अपडेट मान वापस आ रहे हैं) पर कोई अंतर नहीं –

+0

हालांकि यह प्रत्यक्ष मुद्दा नहीं था, यह एक बाध्यकारी प्रॉक्सी प्रचार नहीं कर रहा था, जिस पर उपयोगकर्ता नियंत्रण बाध्य था, जिस पर उपयोगकर्ता नियंत्रण बाध्य था द्वि-दिशात्मक बाध्यकारी ... चूंकि ग्रिड सीधे संपादन योग्य नहीं है, मैंने कभी भी इस Eval() केवल नीचे सब कुछ में व्यवहार व्यवहार नहीं देखा। धन्यवाद डेविड, आपको बक्षीस अंक! –

+0

धन्यवाद निक। काश हम परिस्थितियों में बाइंड() का उपयोग करने की कोशिश करने के लिए एक त्रुटि स्थिति बना चुके हैं, जहां यह कुछ भी नहीं करेगा क्योंकि ITemplate ठीक से चिह्नित नहीं है। यदि आप उत्सुक हैं, तो पेज के लिए जेनरेट कोड को दोवे ध्वज के साथ और बिना देखें।ध्वज के साथ, आपको एक पूरी नई __ExtractValues__ विधि दिखाई देगी, जिसमें बाइंड() काम करने के लिए सभी तर्क हैं। –

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

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