如何使用ROW_NUMBER对gridview和SQL自定义查询进行分页
我有一个页面执行自定义查询,它保存在数据库的某个地方。 我需要能够在gridview上启用分页。
例如,查询保存在数据库中,如下所示:
select * from requestbases
这将返回10,000行。
使用下面的方法,我返回10行。
public DataTable GetGenericResults(string strsql, int pageIndex) { StringBuilder sb = new StringBuilder(); sb.Append("WITH MyPagedData as ( "); int indexFrom = strsql.IndexOf("from"); sb.Append(strsql.Substring(0, indexFrom)); sb.Append(", "); sb.Append("ROW_NUMBER() OVER(ORDER BY RequestBaseId DESC) as RowNum "); sb.Append(strsql.Substring(indexFrom)); sb.Append(") "); sb.Append("SELECT * from MyPagedData where RowNum between @StartIndex and @StartIndex + 10"); using(var connection = (SqlConnection)_context.Database.Connection) { var adapter = new SqlDataAdapter(sb.ToString(), connection); adapter.SelectCommand.Parameters.Add("@StartIndex", SqlDbType.Int).Value = pageIndex; var results = new DataSet(); adapter.Fill(results, "Results"); return results.Tables["Results"]; } }
这是绑定网格的代码
var datatable = RequestBaseBL.GetGenericResults(query.QuerySql, 0); if (datatable.Rows.Count > 0) { LblCount.Text = datatable.Rows.Count + " records"; PanelResults.Visible = true; GrvCustomResults.Visible = true; GrvCustomResults.DataSource = datatable; GrvCustomResults.DataBind(); }
问题是查询本身返回10行,因此gridview永远不会显示寻呼机。
这段代码在aspx页面中
这里将在.cs页面中使用的方法这用于跟踪pagenum和pagesize的记录
protected int PageNum { get { return Convert.ToInt16(ViewState["PageNum"]); } set { ViewState["PageNum"] = value; } } protected int PageSize { get { return Convert.ToInt16(ViewState["PageSize"]); } set { ViewState["PageSize"] = value; } } protected int TotalRecord { get { return Convert.ToInt16(ViewState["TotalRecords"]); } set { ViewState["TotalRecords"] = value; } }
这个方法用于调用将发送pagenum,页面大小的存储过程
public DataSet GetCollegeSerachData(int PageNum,int PageSize,out int TotalRecords) { DS = new DataSet(); ObjDataWrapper = new DataWrapper(ClsCommon.CnnString, CommandType.StoredProcedure); TotalRecords=0; ErrorCount = 0; Searchpattern = ""; try { ObjDataWrapper.AddParameter("@PageNum", PageNum); ObjDataWrapper.AddParameter("@PageSize", PageSize); SqlParameter ObjTotalRecords=(SqlParameter)(ObjDataWrapper.AddParameter("@TotalRowsNum","",SqlDbType.Int,ParameterDirection.Output)); DS=ObjDataWrapper.ExecuteDataSet("ADMJGetCollegeSearch"); if(ObjTotalRecords.Value!= DBNull.Value || ObjTotalRecords!=null) { TotalRecords=Convert.ToInt32(ObjTotalRecords.Value); } } catch (Exception Ex) { string err = Ex.Message; if (Ex.InnerException != null) { err = err + " :: Inner Exception :- " + Ex.InnerException.Message; } string addInfo = "Error While Executing GetCollegeSerachData in ClsColleges:: -> "; ClsExceptionPublisher objPub = new ClsExceptionPublisher(); objPub.Publish(err, addInfo); } return DS; }
这将返回将用于绑定存储过程的数据集
这里是用于分页的商店程序
GO /****** Object: StoredProcedure [dbo].[ADMJGetCollegeSearch] Script Date: 06/06/2012 15:43:29 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[ADMJGetCollegeListByState] @PageNum int, @PageSize int, @TotalRowsNum int output AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. WITH College_CollegeId As ( SELECT 'RowNumber' = ROW_NUMBER() OVER(ORDER BY collegeid asc),College.* FROM College ) -- Query result SELECT * FROM College_CollegeId WHERE RowNumber BETWEEN (@PageNum - 1) * @PageSize + 1 AND @PageNum * @PageSize ORDER BY collegename asc -- Returns total records number SELECT @TotalRowsNum = count(*) FROM College END
最后你将绑定gridview grdCourse.DataSource = DS.Tables [0]; grdCourse.DataBind(); grdCourse.Visible = true;
在网格视图的PageIndexChanging(对象发送者,GridViewPageEventArgs e)中,您将通过
protected void grdCourse_PageIndexChanging(object sender, GridViewPageEventArgs e) { Pagenum = e.NewPageIndex; --call this method public DataSet GetCollegeSerachData(int PageNum,int PageSize,out int TotalRecords) }
- 填写文本框,在mvc中选择下拉列表
- web.config反斜杠出现两次Visual Studio 2010
- 如何使用c#应用程序上传和下载文件到onedrive for business?
- 我可以在Web应用程序中使用Awesomeium吗?
- 在c#中输出一个受控的QueryString
- System.Net.Mail.SmtpException:操作已超时。 asp.net中的错误使用godaddy托管发送邮件代码
- 无法使用Headers =“application / x-www-form-urlencoded”编码我的JSON对象insdie我的WebClient UploadString
- 将行添加到网格视图
- 将文件从MVC 5下载到Angular 2