2010-12-22 7 views
5

einige schnelle Hintergrund auf, was ich arbeite:Ändern einer Sammlung zurückgegeben von Object

  • Ich habe eine Seite mit einem RadGrid an ein Object gebunden, die
  • auf, dass eine Sammlung von Objekten zurückgibt Seite; Ich habe auch zwei Listen; ein Ids der Objekte enthält, müssen fusionierte mit der Kollektion aus dem Object zurückgegeben, und die andere enthält Ids der Objekte, die für den Umgang mit dieser aus dieser Sammlung
  • Der aktuelle Prozess entfernt werden müssen, ist sehr hack-ish; wenn ein Gegenstand zu einer dieser beiden Listen hinzugefügt wird; Es wird eine separate Methode aufgerufen, die die Ergebnisse von myDataSource.Select() in eine Variable ablegt und die Manipulation durchführt. Anschließend wird die DataSourceId des Rasters gelöscht, und die Auflistung wird der DataSource-Eigenschaft zugewiesen. Anschließend wird DataBind aufgerufen. (Im wesentlichen der Object Aufhebung der Bindung und mit dem manuellen Datenbindung statt)

Meine Frage lautet wie folgt: Ist es möglich, irgendwie „abfangen“ die Sammlung zurückgegeben von der Object so kann ich die Sammlung manipulieren, bevor es an die RadGrid geben wird ?

Wenn das nicht möglich ist; Es ist kein Dealbreaker. Ich glaube, ich kann die Select() -Methode ändern, um die zwei Listen zu akzeptieren; und führe die Manipulation dort durch. Ein anderer Weg, den ich habe, ist, das NeedDataSource() Ereignis für das Gitter zu implementieren und dort auch zu manipulieren.

Idealerweise würde ich gerne die erste Option verwenden. Hat jemand das schon mal erfolgreich gemacht?

Antwort

2

Sie können von Object & Object leiten bzw. GetView & ExecuteSelect, so etwas wie dies außer Kraft setzen:

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

Nizza Sachen. Danke vielmals! –