2013-04-17 4 views
9

में मेरी डिजाइनर संपत्ति का क्रमबद्ध क्यों नहीं है एएसपी.NET में उपयोग किए जाने वाले कस्टम डेटा स्रोत को बनाने के प्रयास में, मैंने एक कस्टम डेटा स्रोत वर्ग, एक कस्टम संपादक और एक कस्टम बनाया है serializable वर्ग।एएसपीएक्स

जो मैं समझने में असफल हूं वह क्यों काम नहीं करता है ... भले ही मुझे संभवतः आवश्यकतानुसार अधिक गुण हैं (मैं ब्राउज़िंग और घंटों तक चीजों की कोशिश कर रहा हूं), जो मुझे लगता है कि PersistenceMode(PersistenceMode.InnerProperty) को समझना चाहिए था चाल ... साथ ही, ऐसा लगता है कि मेरा कोड Why can't I declare sub-elements (properties) of a UserControl in a WebForm? जैसा है। इस प्रकार

कोड काम करता है: उपयोग करने के बाद, वी.एस. में गुण सही ढंग से अपडेट किया जाता है:

[ParseChildren(true)] 
[PersistChildren(true)] 
public class MyDataSource : DataSourceControl 
{ 
    // [much more irrelevant code...] 

    [Browsable(true)] 
    [EditorBrowsable(EditorBrowsableState.Always)] 
    [PersistenceMode(PersistenceMode.InnerProperty)] 
    [MergableProperty(false)] 
    [TypeConverter(typeof(ExpandableObjectConverter))] 
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] 
    [Editor(typeof(Editors.ResultRequestEditor), typeof(System.Drawing.Design.UITypeEditor))] 
    public ResultRequest Request { get; set; } 
} 

[Serializable] 
[PersistChildren(true)] 
[TypeConverter(typeof(ExpandableObjectConverter))] 
[ParseChildren(true)]  
public class ResultRequest 
{ 
    [Browsable(true)] 
    [EditorBrowsable(EditorBrowsableState.Always)] 
    public string ColumnName { get; set; } 

    [Browsable(true)] 
    [EditorBrowsable(EditorBrowsableState.Always)] 
    public Type ColumnType { get; set; } 

    [Browsable(false)] 
    [EditorBrowsable(EditorBrowsableState.Always)] 
    public object[] ResultTypeParameters { get; set; } 
} 

कस्टम संपादक काम करने के लिए लगता है।

हालांकि, कुछ को अद्यतन करने के बाद जानकारी ASPX फाइल में कायम नहीं कर रहा है:

<cc1:MyDataSource ID="SearchDataSource1" runat="server" ProviderID="MyProvider1" /> 

मैं क्या उम्मीद डेटा स्रोत के भीतर कुछ क्रमबद्धता, जैसे था:

<cc1:MyDataSource ID="SearchDataSource1" runat="server" ProviderID="MyProvider1"> 
    <Request> 
     // blah 
    </Request> 
</cc1:MyDataSource> 

किसी कृपया समझा सकते हैं यह क्यों काम नहीं करता है?

+1

क्या आपने कुछ विशेषताओं के बिना प्रयास किया है, उदाहरण के लिए TypeConverters? –

+0

मुझे समझ में नहीं आता कि आप क्या करने की कोशिश कर रहे हैं। मूल रूप से आप कह रहे हैं: मेरे पास तीन वर्ग हैं, और वे काम नहीं करते हैं। आप क्या करने की कोशिश कर रहे हैं? आपका अपरिवर्तनीय व्यवहार और आपका अपेक्षित व्यवहार क्या है? आप डेटास्रोत में कुछ क्रमिकरण की उम्मीद करते हैं? एक वर्ग में serialization? आम तौर पर धारावाहिक एक पाठ या बाइनरी फ़ाइल के अंदर होता है। तो मेरा अगला सवाल होगा: क्या फाइल? –

+0

वैसे मूल रूप से मैं 'ResultRequest' कक्षा के लिए एक कस्टम संपादक बनाने की कोशिश कर रहा हूं। डेटा स्रोत स्वयं काम करता है, मैं इसे पीछे कोड के बजाय एएसपीएक्स से कॉन्फ़िगर नहीं कर सकता। TypeConverters वहां हैं क्योंकि डिफ़ॉल्ट क्रमिकरण (आपके एएसपीएक्स एक्सएमएल में) काम नहीं करता है - f.ex. जबकि मुझे पता है कि 'ऑब्जेक्ट []' को क्रमबद्ध करने के लिए, डिजाइनर नहीं करता है, इसलिए मैं उसे बताने का इरादा रखता हूं कि यह कैसे किया जाता है। यह भी संपादक के लिए है। हां, मैंने यह समझने के प्रयास में घंटों के लिए विशेषताओं को जोड़ने और हटाने का प्रयास किया कि यह कैसे काम करता है (निष्कर्ष: यह काम नहीं करता है और मैं इसे समझ नहीं पा रहा हूं)। – atlaste

उत्तर

1

कृपया मेरे नमूना पर एक नज़र डालें यह कम जटिल है, इसलिए इसमें आसान होगा समझने के लिए:

सबसे पहले माता-पिता नियंत्रण (आपके मामले में यह डेटा स्रोत होगा):

[ToolboxData("<{0}:TabContainer runat=server></{0}:TabContainer>")] 
[ParseChildren(ChildrenAsProperties = false)] 
[PersistChildren(true)] 
public class TabContainer : Panel, INamingContainer 
{ 

    #region private properties 

    List<TabItem> tabs = new List<TabItem>(); 

    #endregion 

    [Bindable(true)] 
    public event EventHandler TabClick; 

    [Browsable(true)] 
    [PersistenceMode(PersistenceMode.InnerProperty)] 
    public List<TabItem> Tabs 
    { 
     get { return this.tabs; } 
    } 
} 

लें नोटिस मेरे पास है झूठ के लिए ChildrenAsProperties सेट करें। और यहाँ, बच्चे परिभाषा है TabItem:

public class TabItem : Panel, IPostBackEventHandler 
{ 


    String clientClick = String.Empty; 

    public event EventHandler Click; 


    [Bindable(true)] 
    [Category("Appearance")] 
    public string Text 
    { 
     get 
     { 
      if (ViewState["Text"] == null) 
      { 
       ViewState["Text"] = ""; 
      } 
      return (string)ViewState["Text"]; 
     } 
     set 
     { 
      ViewState["Text"] = value; 
     } 
    } 
} 

अब डिजाइनर के अंदर मैं TabContainer इस तरह की घोषणा कर सकते हैं:

 <cc1:TabContainer ID="TabContainer1" runat="server" 
     </cc1:TabContainer> 

और अंत में बच्चे के नियंत्रण है कि राज्य की रक्षा जोड़ें:

 <cc1:TabContainer ID="TabContainer1" runat="server" 
      OnTabClick="TabContainer_TabClick"> 
      <Tabs> 
       <cc1:TabItem ID="Tab1" Text="Hello" runat="server" /> 
       <cc1:TabItem ID="Tab2" Text="World" runat="server" /> 
      </Tabs> 
     </cc1:TabContainer> 

सादर !

+0

धन्यवाद, लेकिन मुझे लगता है कि यह वास्तव में एक समाधान नहीं है: मुद्दा आंशिक रूप से है कि 'ऑब्जेक्ट []' और 'टाइप' को क्रमबद्ध करने की आवश्यकता है। 'IList ' 'टी' के साथ एक धारावाहिक प्रकार क्रमबद्ध है और इसलिए 'PersistenceMode' के साथ काम करता है, जबकि मेरा उदाहरण नहीं है। मुझे ज्यादातर इन सभी विशेषताओं को जोड़कर परेशानी हो रही है और यह समझना है कि इसे एक साथ कैसे चिपकाएं ... शायद यदि आपने अपना उदाहरण थोड़ा अधिक जटिल बना दिया है, तो यह तुलनीय होगा? – atlaste

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