2013-10-05 48 views
0

所有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()時,事件不會被觸發。有什麼辦法可以啓動這些事件並自動調用這個事件嗎?

回答

0

CreatingModelDataSource()被放入Model Binding中使用的Model數據源。當你使用模型綁定時,你需要指定Select()方法來模擬綁定以使用GridVIew

+0

理想情況下,這種情況下的select方法應該包含什麼?我嘗試使用返回null的Select方法,它運行良好。我還觀察到,select方法從不執行,因爲控件沒有觸及此方法的斷點 –

相關問題