2010-12-22 20 views
5

से लौटे मैं क्या पर काम कर रहा हूँ पर कुछ त्वरित पृष्ठभूमि:संशोधन करना एक संग्रह ObjectDataSource

  • मैं एक RadGrid एक ObjectDataSource से बंधा है कि वस्तुओं का संग्रह
  • कि पर रिटर्न के साथ एक पृष्ठ मिल गया है पृष्ठ; मेरे पास दो सूचियां भी हैं; एक में ऑब्जेक्ट्स के आईडी शामिल हैं जिन्हें ऑब्जेक्टडेटा स्रोत से लौटाए गए संग्रह के साथ विलय करने की आवश्यकता होती है, और दूसरे में ऑब्जेक्ट्स के आईडी शामिल होते हैं जिन्हें उस संग्रह से हटाया जाना चाहिए
  • इसे संभालने के लिए वर्तमान प्रक्रिया बहुत हैक-आश है; जब कोई आइटम उन दो सूचियों में से किसी एक में जोड़ा जाता है; एक अलग विधि कहा जाता है जो myDataSource के परिणाम को डंप करता है।() को एक चर में बदलें, और हेरफेर करता है। इसके बाद ग्रिड में डेटासोर्सआईड साफ़ हो गया है, और संग्रह डेटासोर्स प्रॉपर्टी को सौंपा गया है, और उसके बाद डेटाबिंड कहा जाता है। (अनिवार्य रूप से ObjectDataSource को खोल और इसके स्थान पर मैन्युअल डेटा बाइंडिंग का उपयोग कर)

मेरा प्रश्न इस प्रकार है: क्या यह संभव करने के लिए किसी भी तरह "अवरोधन" संग्रह ObjectDataSource से लौटे तो मैं संग्रह में हेरफेर कर सकते हैं इससे पहले कि यह RadGrid को पारित कर दिया है ?

यदि यह संभव नहीं है; यह एक डीलरब्रेकर नहीं है। मेरा मानना ​​है कि मैं दो सूचियों को स्वीकार करने के लिए चयन() विधि को संशोधित कर सकता हूं; और वहां हेरफेर प्रदर्शन करते हैं। मेरे पास एक और एवेन्यू है जो ग्रिड के लिए NeedDataSource() ईवेंट को कार्यान्वित करना है, और वहां भी कुशलतापूर्वक उपयोग करना है।

आदर्श रूप से, मैं पहले विकल्प का उपयोग करना चाहता हूं। क्या कोई पहले ऐसा करने में सफल रहा है?

उत्तर

2

आप ObjectDataSource & ObjectDataSourceView से निकाले जाते हैं कर सकते हैं और क्रमश: GetView & ExecuteSelect, कुछ इस तरह ओवरराइड:

public class MyObjectDataSource : ObjectDataSource 
{ 
    private MyObjectDataSourceView _view; 
    private MyObjectDataSourceView GetView() 
    { 
     if (_view == null) 
     { 
      _view = new MyObjectDataSourceView(this, "DefaultView", Context); 
      if (IsTrackingViewState) 
      { 
       ((IStateManager)_view).TrackViewState(); 
      } 
     } 
     return _view; 
    } 

    protected override DataSourceView GetView(string viewName) 
    { 
     return GetView(); 
    } 
} 

public class MyObjectDataSourceView : ObjectDataSourceView 
{ 
    public MyObjectDataSourceView(MyObjectDataSource owner, string name, HttpContext context) 
     : base(owner, name, context) 
    { 
    } 

    protected override IEnumerable ExecuteSelect(DataSourceSelectArguments arguments) 
    { 
     IEnumerable dataSource = base.ExecuteSelect(arguments); 
     // TODO: do your stuff here 
     return dataSource; 
    } 
} 
+0

अच्छा सामान। बहुत धन्यवाद! –

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