怎么在DataGridView中使用BindingNavigator实现一个分页功能

本篇文章给大家分享的是有关怎么在DataGridView中使用BindingNavigator实现一个分页功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

实现方法如下:

 1、新建一个WinForm程序,命名为BindingNavigatorMain,并拖入一个DataGridView控件及一个BindingNavigator控件。在BindingNavigator右下角弹窗中添加

一个Button(转到),BindingNavigator的样式如下:

怎么在DataGridView中使用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实现一个分页功能

以上就是怎么在DataGridView中使用BindingNavigator实现一个分页功能,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注恰卡编程网行业资讯频道。

发布于 2021-03-24 01:21:51
收藏
分享
海报
0 条评论
168
上一篇:怎么在python中利用多线程下载m3u8格式视频 下一篇:recycleview包怎么在android studio3.5中使用
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码