0

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

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

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

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

谢谢

4

1 回答 1

1

基本上,如果您在ListView和 上启用分页ObjectDataSource,数据源会将当前页码以及页面大小传递给您的数据提供者类(您在 中配置的那个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 或不使用。

于 2012-09-09T13:32:24.277 回答