所有ASP.NET數據綁定控件在ASP.NET 4.5的CreatingModelDataSource中都有一個附加事件。它提供了一種很好的方式來創建我們自己的ModelDataSource實現並綁定到像GridView這樣的控件。在ASP.NET Web Forms應用程序中觸發OnCreatingModelDataSource事件
我創建了一個樣本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()時,事件不會被觸發。有什麼辦法可以啓動這些事件並自動調用這個事件嗎?
理想情況下,這種情況下的select方法應該包含什麼?我嘗試使用返回null的Select方法,它運行良好。我還觀察到,select方法從不執行,因爲控件沒有觸及此方法的斷點 –