绑定到ObjectDataSource的GridView的自定义分页,而不使用存储过程



如何在不使用存储过程的情况下为绑定到ObjectDataSource的GridView实现自定义分页?

我有一个搜索屏幕,允许用户应用一些过滤器来创建自定义搜索。(对于每个选择了除"All"以外的值的DropDownList控件,我需要在SQL语句的"where"子句中添加一个筛选器)。

我想动态地构建SQL查询。通常我使用存储过程并使用ROW_NUMBER()(参见此处)但是如何在c#代码级别实现分页呢?

有没有办法做到这一点?或者我唯一的选择是在存储过程中实现动态SQL(请参阅此处)?

感谢

基本上,如果在ListViewObjectDataSource上启用分页,数据源会将当前页码和页面大小传递给数据提供程序类(在ObjectDataSource中配置的类)。

下面是一个工作示例:

http://netpl.blogspot.com/2009/04/how-to-controll-aspnet-listview-page.html

具体来说,看看数据提供程序类PersonDataSource

public class PersonDataSource
{
    public IEnumerable<Person> Retrieve( int StartRow, int RowCount )
    {
        return DataModel.Instance.Persons.Skip( StartRow ).Take( RowCount );
    }
    public int CountItems()
    {
        return DataModel.Instance.Persons.Count;
    }
 }

您可以自由实现提供程序,这意味着您可以从内存、数据库中检索对象,也可以使用ORM或创建SqlCommand。没有限制。

我不会在应用程序级别实现分页,而是创建一个分页查询。应用程序级别的分页意味着从数据库中检索数据,并在应用程序级别进行筛选,这在性能方面通常比在数据库级别进行筛选差。

如果您想创建自己的分页查询,那么至少有几种方法可以做到这一点,无论是否使用ROW_NUMBER。

最新更新