关于我正在做的事情的一些快速背景:
我的问题如下:是否有可能以某种方式“拦截”从ObjectDataSource返回的集合,以便我可以在将集合传递给RadGrid之前对其进行操作?
如果不可能;这不是一个破坏者。我相信我可以修改Select()方法来接受这两个列表;并在那里进行操作。我的另一个途径是为网格实现NeedDataSource()事件,并在那里进行操作。
理想情况下,我想使用第一个选项。有没有人成功这样做过?
答案 0 :(得分: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;
}
}