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

时间:2012-09-09 13:23:07

标签: c# asp.net sql paging objectdatasource

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

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

我想动态构建SQL查询。 通常我使用商店程序并使用ROW_NUMBER()(See here )  但是如何在c#代码级别实现分页?

有没有办法这样做'或者是我在存储过程(See here)中实现动态SQL的唯一选择?

谢谢

1 个答案:

答案 0 :(得分:1)

基本上,如果您在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或不使用ROW_NUMBER。

相关问题