修改自定义查询以使用gridview进行分页

时间:2012-06-05 14:03:10

标签: c# sql ado.net

我有以下代码对数据库执行自定义查询。 查询定义存储在表中,但用户不会输入分页。

因为它可以返回10,000行或更多行,所以我需要通过修改查询来进行分页。

  

QuerySql =“select * from requestbases where currentstatus =='Approved   1'和ammountwithvat> 100000“

返回10,000行。

我的代码:

 public DataTable GetGenericResults(string strsql)
            {
                using(var connection = (SqlConnection)_context.Database.Connection)
                {
                    var adapter = new SqlDataAdapter(strsql, connection);
                    var results = new DataSet();
                    adapter.Fill(results, "Results");
                    return results.Tables["Results"];
                }
            }




var datatable = RequestBaseBL.GetGenericResults(query.QuerySql);
                    if (datatable.Rows.Count > 0)
                    {
                        LblCount.Text = datatable.Rows.Count + " records";
                        PanelResults.Visible = true;
                        GrvCustomResults.Visible = true;
                        GrvCustomResults.DataSource = datatable;
                        GrvCustomResults.DataBind();

1 个答案:

答案 0 :(得分:2)

我会在CTE中使用查询,比如

WITH MyPagedData as (
SELECT *,
ROW_NUMBER() OVER(ORDER BY IdentityCol DESC) as RowNum,
ROW_NUMBER() OVER(ORDER BY IdentityCol ASC) as InverseRowNum
FROM requestbases where currentstatus == 'Approved 1' and ammountwithvat > 100000
)

SELECT * from MyPagedData where RowNum between @StartIndex and @StartIndex + 20  

因此,假设您可以编写一些代码,这些代码会在select语句的正确位置插入RowNumber位,并且您还在使用MSSQL 2005.如果还没有,可能还需要调整IdentityCol位得到了身份栏。

因此,StartIndex是最后显示的数据项,20是您在页面上需要的项目数。项目总数是RowNum和InverseRowNum -1的总和。