所有 ASP.NET 数据绑定控件在 ASP.NET 4.5 中都有一个附加事件,CreatingModelDataSource。它提供了一种很好的方法来创建我们自己的 ModelDataSource 实现并绑定到像 GridView 这样的控件。
我创建了一个示例 ModelDataSource 并将其与 CreatingModelDataSource 事件中的 GridView 连接起来,如下所示:
protected void gvStudent_CreatingModelDataSource(object sender, CreatingModelDataSourceEventArgs e)
{
e.ModelDataSource = new MyModelDataSource((GridView)sender);
}
以下是我编写的示例 ModeldataSource 实现:
public class MyModelDataSource : ModelDataSource
{
MyDataSourceView view;
public MyModelDataSource(Control control)
: base(control)
{
}
public override ModelDataSourceView View
{
get
{
if (view == null)
{
view = new MyDataSourceView(this);
}
return view;
}
}
}
以下是 MyModelDataSourceView:
public class MyDataSourceView : ModelDataSourceView
{
private MyModelDataSource _owner;
private StudentRepository repository;
public MyDataSourceView(MyModelDataSource owner)
: base(owner)
{
_owner = owner;
repository = new StudentRepository();
}
protected override IEnumerable ExecuteSelect(DataSourceSelectArguments arguments)
{
return repository.GetAll();
}
}
但是 ExecuteSelect 方法不会被自动调用。当我将 SelectMethod 设置为 GridView 时,它会被调用。由于 ExecuteSelect 方法的结果最终绑定到了 GridView,这里指定 SelectMethod 没有任何意义。此外,调用 gridView.DataBind() 时不会触发该事件。有什么方法可以启动并自动调用此事件?