#大鹏盛华创意挑战赛#
1
使用ROW_NUMBER() 函数创建用于高效数据分页的存储过程
–在映射表(区域)中创建数据分页的存储过程ALTER PROC usp_Area_datapage@pageIndex INT=1, –页码(默认第一页) @pageSize INT=5, –页面容量(默认页容量5)@ pageCount INT OUTPUT, –总页数(输出到表单显示) @recordCount INT OUTPUT –总项目数(输出到表单显示) ASBEGINSELECT @recordCount=COUNT(*) FROM dbo.Area –总数获取data 条目数SET @pageCount=@recordCount/@pageSize –获取小于等于当前页容量的总页数(从页号开始) –如果有小数点则为总页数+ 1IF @recordCount/@pageSize0 SET @pageCount=@pageCount+1 –通过row_number函数获取分页数据。 SELECT * FROM(SELECT ROW_NUMBER()OVER(ORDER BY ID ASC)AS AId,* FROM dbo.Area)AS aWHERE a.AId BETWEEN (@ pageIndex-1)*@pageSize +1 AND(@pageIndex*@pageSize)END注释:BETWEEN (@pageIndex-1)*@pageSize+1 AND (@pageIndex*@pageSize) (假设页面容量为10(@pageIndex-1)) *@pageSize+1 先页面起始点为: ( 1 -1)*10+1,结果为1 (@pageIndex*@pageSize) 第一页的结束点为: (1*10),结果为10WHERE a.AId BETWEEN (@pageIndex-1)*@ pageSize+ 1 AND(@pageIndex*@pageSize) 第一页数据将为:这里a.AId BETWEEN 1 和10 相当于a.AId=1 和a。AId=10 — 测试存储过程DECLARE @totalpage INT 用于接收输出参数的值。 Value DECLARE @totalrecord INT 用于接收输出参数的值。 EXEC usp_Area_datapage 1,10,@totalpage OUTPUT,@totalrecord OUTPUT — 输出时需要类型转换PRINT N\’总页数\’+CONVERT(VARCHAR(10),@totalpage )PRINT N\’总记录数\’+CAST (@totalrecord AS VARCHAR(10)) 执行数据分页存储过程
1
添加对类库的引用,写入配置文件信息,并将ExecuteDataTable()方法更改为存储过程类型。
public static DataTable SP_ExecuteDataTable(string sp_name, params SqlParameter[] pms){ using (SqlDataAdapter adapter=new SqlDataAdapter(sp_name, constr)) { //将适配器执行类型设置为存储过程adapter.SelectCommand.CommandType=CommandType. StoredProcedure; if (pms !=null) { //运行存储过程并添加参数。 adapter.SelectCommand.Parameters.AddRange(pms); //将查询到的数据放入dt中。 (dt);返回}}2。
绑定表单加载事件显示的数据(如:默认在第一页显示前20条数据)
//声明将用于接收四个变量值的类的成员变量。后面会用到Int RCount=0。 //总项数int PCount=0; //当前页数int PSize=20; //接收分页数据private void Form1_Load(object sender, EventArgs e){ //数据过多Masu.截取20条数据并显示//给存储过程参数赋值SqlParameter[] ps={ //输入参数(默认第一页,页容量20) new SqlParameter(\’@pageIndex\’ ,PIndex), new SqlParameter (\’@pageSize\’,PSize), //输出参数不能直接赋值。只需设置为你数据库中的数据类型即可new SqlParameter(\’@pageCount\’,SqlDbType.Int), new SqlParameter(\’@recordCount \’,SqlDbType.Int) }; //将两个输出参数的类型设置为输出参数ps[2].Direction=ParameterDirection.Output; //执行的方法过程dt=Helper.SQLHelper.SP_ExecuteDataTable(\’usp_Area_datapage\’, ps); //执行完ExecuteDataTable()方法后//用两个输出参数获取传递的value //给显示标签赋值对应的值label //获取存储过程返回的总页数PCount=Convert.ToInt32(ps[2].Value) //Label 显示总页数lbPCount.Text=PCount.ToString(); //获取存储过程返回的项目总数RCount=Convert.ToInt32(ps[3].Value); //标签将显示项目总数lbRCount.Text=RCount . ToString(); //设置页面容量文本框txtPSize.Text=PSize.ToString(); //绑定数据dgv1.DataSource=dt; //绑定页码显示文本(int i=1; i=(int )ps[2].Value; i++ ) { cmbPageIndex.Items.Add(i); ////第一个选项添加到下拉列表框中//cmbPageIndex.Items.Insert(0, \’请选择\’) ; //默认选中第一页cmbPageIndex.SelectedIndex=0; //下拉列表框显示的高度cmbPageIndex.DropDownHeight=350;}
:1) 将参数设置为输出参数的类型。 2) 将页码和所选选项添加到下拉列表框中。
3
在页面容量文本框控件中添加文本框更改事件,以便在页面容量数字发生变化时重新加载数据。
private void txtPSize_TextChanged(object sender, EventArgs e){ //检测输入字符串是否为大于0的正整数(自己写) //如果没有检测到则抛出异常Reported PSize=Convert.ToInt32( txtPSize.Text); //获取当前页码PIndex=cmbPageIndex.SelectedIndex + 1; //给参数赋值SqlParameter[] ps={ new SqlParameter(\’ @pageIndex\’,PIndex), new SqlParameter(\’@ pageSize\’,PSize), //输出参数。不能直接赋值。只需将其设置为数据库的数据类型即可。 new SqlParameter(\’@pageCount\’,SqlDbType.Int), new SqlParameter(\’@recordCount\’,SqlDbType.Int) }; //设置两个输出参数的类型为输出参数ps[2].Direction=ParameterDirection .Output ; //执行存储过程的方法dt=Helper. SQLHelper.SP_ExecuteDataTable(\’usp_Area_datapage\’, ps); //执行ExecuteDataTable()方法后//获取两个输出参数中传递的值//替换显示标签对应的值//设置总数检索存储过程返回的页数PCount=Convert.ToInt32(ps[2].Value); //标签显示总页数lbPCount.Text=PCount.ToString(); //存储返回的项目总数procedure RCount=Convert.ToInt32(ps[3].Value); //标签显示项目总数Text=RCount.ToString() //重新绑定数据To do。 /清除之前添加的页码选项cmbPageIndex.Items.Clear(); //显示页码绑定的文本(int i=1 ; i=PCount; i++) { cmbPageIndex.Items.Add( i) } //默认选择第一页cmbPageIndex.SelectedIndex=0;} 更改数字显示分页数据
四
为下拉列表框添加索引更改事件(cmbPageIndex_SelectedIndexChanged)
private void cmbPageIndex_SelectedIndexChanged(object sender, EventArgs e){ //检测输入字符串是否为大于0的正整数(自己写) //如果没有检测到则抛出异常Reported PSize=Convert.ToInt32( txtPSize.Text); //获取当前页码PIndex=cmbPageIndex.SelectedIndex + 1; //PIndex=Convert.ToInt32(cmbPageIndex.Text); //设置参数中的值赋值SqlParameter[] ps={ new SqlParameter ( \’@pageIndex\’,PIndex), new SqlParameter( \’@pageSize\’,PSize), //输出参数不能直接赋值。只需要设置为你数据库的数据类型new SqlParameter(\’@pageCount\’,SqlDbType.Int), new SqlParameter(\’@recordCount\’,SqlDbType.Int ) }; //设置两个输出参数的类型将输出参数设置为ps[2].Direction=ParameterDirection.Output ps[3].Direction=ParameterDirection;Output; //执行存储过程的方法dt=Helper.SQLHelper./执行/ExecuteDataTable()方法后, //检索两个输出参数传递的值。为标签分配相应的值并显示//获取存储过程返回的总页数PCount=Convert.ToInt32(ps[2].Value) //标签将显示总页数lbPCount; Text=PCount.ToString(); //获取存储过程返回的项目总数RCount=Convert.ToInt32(ps[3] .Value) //显示的标签总数lbRCount .Text=RCount.ToString () ; //重新绑定数据dgv1.DataSource=dt; //设置下拉列表框中显示的文本cmbPageIndex.Text=(cmbPageIndex.SelectedIndex + 1);
本文和图片来自网络,不代表火豚游戏立场,如若侵权请联系我们删除:https://www.huotun.com/game/657390.html