ASP.Net自定义分页(带C#)

时间:2010-12-23 13:42:46

标签: c# asp.net

Cenario:
我有一个绑定到DataSource的GridView,每列都是可排序的 我的主要查询类似于:

select a, b, c, d, e, f from table order by somedate desc

我添加了一个过滤器表单,我可以在其中为每个字段定义值并获取where表单的结果。因此,我必须进行自定义排序,以便当我按字段排序时,我正在排序过滤后的查询而不是主要查询。 现在我必须做自定义分页,出于同样的原因,但我不理解它的哲学:我想保证我能:

  1. 过滤结果
  2. 按列排序
  3. 当我点击第2页时,我得到了过滤和排序结果的第二页
  4. 我不知道自己要做什么,所以我可以将GV与此绑定。我的排序方法,工作得很好看起来像:

    string condition = GetConditions(); //gets  a string like " where a>1 and b>2" depending on the filter the user defines
    string query = "select a, b, c, d, e, f from table ";
    string direction = (e.SortDirection == SortDirection.Ascending)? "asc": "desc";
    string order = " order by " + e.SortExpression + " " + direction;
    UtilizadoresDataSource.SelectCommand = query + condition + order;
    

    我从未做过自定义分页,我正在尝试:
       GetConditions()//这里没问题
       我怎样才能找出GridView的排序方式(通过什么字段和排序顺序)?

    非常感谢

1 个答案:

答案 0 :(得分:1)

您可以使用ROW_NUMBER获取查询返回的行数,然后仅过滤那些对给定页面可见的元素。例如,您应该在select子句中添加ROW_NUMBER函数,并在where cause中添加过滤。

string condition = GetConditions(); //gets  a string like " where a>1 and b>2" depending on the filter the user defines
string query = "select ROW_NUMBER() OVER(ORDER BY " + order + ") a, b, c, d, e, f from table ";
string direction = (e.SortDirection == SortDirection.Ascending)? "asc": "desc";
string order = " order by " + e.SortExpression + " " + direction;
condition = condition + " RowNo  BETWEEN ((@Page - 1) * @PageSize + 1) AND (@Page * @PageSize) "
UtilizadoresDataSource.SelectCommand = query + condition + order;

您可以找到更详细的示例here。它还包含一个绑定网格的示例项目。

P.S。我建议你创建一个存储过程并从后面的代码中传递参数。这可以提高速度,也更容易维护。