すべての 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() が呼び出されたときにイベントは発生しません。物事を開始して、このイベントを自動的に呼び出す方法はありますか?