【发布时间】:2013-10-08 00:08:33
【问题描述】:
所有 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() 时不会触发该事件。有什么方法可以启动并自动调用此事件?
【问题讨论】:
标签: asp.net webforms model-binding