0

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

4

1 に答える 1

0

Model Bindingで使用するModelデータソースにCreatingModelDataSource()を入れました。モデル バインディングを使用する場合は、モデル バインディングが GridView と連携するように Select() メソッドを指定する必要があります。

于 2013-10-07T16:08:33.320 に答える