怎么在DataGridView中使用BindingNavigator实现一个分页功能
作者
本篇文章给大家分享的是有关怎么在DataGridView中使用BindingNavigator实现一个分页功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
实现方法如下:
1、新建一个WinForm程序,命名为BindingNavigatorMain,并拖入一个DataGridView控件及一个BindingNavigator控件。在BindingNavigator右下角弹窗中添加
一个Button(转到),BindingNavigator的样式如下:
2、BindingNavigatorMain的代码如下:
privateintpageSize;//每页显示记录数 privateintpageIndex;//页序号 privateinttotalCount;//总记录数 privateintpageCount;//总页数 publicBindingNavigatorMain() { InitializeComponent(); } privatevoidBindingNavigatorMain_Load(objectsender,EventArgse) { pageSize=20; pageIndex=0; SetPage(); } //设置页 privatevoidSetPage() { //总记录数 totalCount=0; BindPage(pageSize,pageIndex+1,outtotalCount); //总页数 if(totalCount%pageSize==0) pageCount=totalCount/pageSize; else pageCount=totalCount/pageSize+1; //当前页及总页数 txtCurrentPage.Text=(pageIndex+1).ToString(); lblTotalPage.Text="共"+pageCount.ToString()+"页"; //BindingNavigator数据源不进行BindingSource赋值,但恢复控件可用性。 bindingNavigatorMoveFirstItem.Enabled=true; bindingNavigatorMovePreviousItem.Enabled=true; txtCurrentPage.Enabled=true; lblTotalPage.Enabled=true; bindingNavigatorMoveNextItem.Enabled=true; bindingNavigatorMoveLastItem.Enabled=true; } ///<summary> ///绑定页 ///</summary> ///<paramname="pageSize">每页显示记录数</param> ///<paramname="pageIndex">页序号</param> ///<paramname="totalCount">总记录数</param> privatevoidBindPage(intpageSize,intpageIndex,outinttotalCount) { SqlConnectionconn=null; SqlCommandcmd=null; totalCount=0; #region连接数据库测试 try { //数据库连接 conn=newSqlConnection("server=.;database=DB_TEST;Uid=sa;pwd=********;"); conn.Open(); //SqlCommand cmd=newSqlCommand(); cmd.Connection=conn; cmd.CommandText="PageTest"; cmd.CommandType=CommandType.StoredProcedure; SqlParameter[]param= { newSqlParameter("@PageSize",SqlDbType.Int), newSqlParameter("@PageIndex",SqlDbType.Int), newSqlParameter("@TotalCount",SqlDbType.Int) }; param[0].Value=pageSize; param[1].Value=pageIndex; param[2].Direction=ParameterDirection.Output; cmd.Parameters.AddRange(param); //DataTable DataTabledt=newDataTable("MF_MO"); dt.Columns.Add(newDataColumn("MO_NO",typeof(String))); dt.Columns.Add(newDataColumn("MRP_NO",typeof(String))); dt.Columns.Add(newDataColumn("QTY",typeof(Decimal))); dt.Columns.Add(newDataColumn("BIL_NO",typeof(String))); #region方法一:SqlDataReader SqlDataReaderdr=cmd.ExecuteReader(); dt.Load(dr,LoadOption.PreserveChanges); dr.Close(); totalCount=(int)param[2].Value; dataGridView1.DataSource=dt; #endregion #region#方法二:SqlDataAdapter //SqlDataAdapterda=newSqlDataAdapter(); //da.SelectCommand=cmd; //dt.BeginLoadData(); //da.Fill(dt); //dt.EndLoadData(); //totalCount=(int)param[2].Value; //dataGridView1.DataSource=dt; #endregion } catch(Exceptionex) { MessageBox.Show(ex.Message,"提示",MessageBoxButtons.OK,MessageBoxIcon.Information); } finally { conn.Close(); cmd.Dispose(); } #endregion } ///<summary> ///首页 ///</summary> ///<paramname="sender"></param> ///<paramname="e"></param> privatevoidbindingNavigatorMoveFirstItem_Click(objectsender,EventArgse) { pageIndex=0; SetPage(); } ///<summary> ///上一页 ///</summary> ///<paramname="sender"></param> ///<paramname="e"></param> privatevoidbindingNavigatorMovePreviousItem_Click(objectsender,EventArgse) { pageIndex--; if(pageIndex<0) { pageIndex=0; } SetPage(); } ///<summary> ///下一页 ///</summary> ///<paramname="sender"></param> ///<paramname="e"></param> privatevoidbindingNavigatorMoveNextItem_Click(objectsender,EventArgse) { pageIndex++; if(pageIndex>pageCount-1) { pageIndex=pageCount-1; } SetPage(); } ///<summary> ///末页 ///</summary> ///<paramname="sender"></param> ///<paramname="e"></param> privatevoidbindingNavigatorMoveLastItem_Click(objectsender,EventArgse) { pageIndex=pageCount-1; SetPage(); } ///<summary> ///只能按0-9、Delete、Enter、Backspace键 ///</summary> ///<paramname="sender"></param> ///<paramname="e"></param> privatevoidtxtCurrentPage_KeyPress(objectsender,KeyPressEventArgse) { if((e.KeyChar>=48&&e.KeyChar<=57)||e.KeyChar==8||e.KeyChar==13||e.KeyChar==127) { e.Handled=false; if(e.KeyChar==13) { Go(); } } else { e.Handled=true; } } ///<summary> ///指定页 ///</summary> ///<paramname="sender"></param> ///<paramname="e"></param> privatevoidbtnGo_Click(objectsender,EventArgse) { Go(); } privatevoidGo() { if(string.IsNullOrEmpty(txtCurrentPage.Text)) { MessageBox.Show("指定页不能为空。","提示",MessageBoxButtons.OK,MessageBoxIcon.Information); txtCurrentPage.Focus(); return; } if(int.Parse(txtCurrentPage.Text)>pageCount) { MessageBox.Show("指定页已超过总页数。","提示",MessageBoxButtons.OK,MessageBoxIcon.Information); txtCurrentPage.Focus(); return; } pageIndex=int.Parse(txtCurrentPage.Text)-1; SetPage(); }
3、SQL Server创建存储过程PageTest:
CREATEPROCEDURE[dbo].[PageTest] @PageSizeINT, @PageIndexINT, @TotalCountINTOUTPUT AS BEGIN --总记录数 SELECT@TotalCount=COUNT(1)FROMMF_MO --记录返回(使用动态SQL绕开参数嗅探问题,效率大幅度提升。) DECLARE@SQLNVARCHAR(1000) SET@SQL= 'SELECTTOP('+CONVERT(VARCHAR(32),@PageSize)+')MO_NO,MRP_NO,QTY,BIL_NO'+ 'FROMMF_MOA'+ 'WHERENOTEXISTS(SELECT1FROM(SELECTTOP('+CONVERT(VARCHAR(32),(@PageIndex-1)*@PageSize)+')MO_NOFROMMF_MOORDERBYMO_NO)BWHEREA.MO_NO=B.MO_NO)'+ 'ORDERBYMO_NO' EXEC(@SQL) END
4、执行程序:
以上就是怎么在DataGridView中使用BindingNavigator实现一个分页功能,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注恰卡编程网行业资讯频道。
目录
0 条评论
本站已关闭游客评论,请登录或者注册后再评论吧~