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

为模型绑定中使用的模型数据源添加了 CreatingModelDataSource()。当您使用模型绑定时,您需要为模型绑定指定 Select() 方法以使用 GridVIew

于 2013-10-07T16:08:33.320 回答