DataGridView使用自定义控件实现简单分页功能(推荐)
本例子使用自定义控件方法实现,数据库使用的是SQLServer,实现过程如下:
1、新建一个自定义控件,命名为:PageControl。
2、PageControl代码如下:
publicpartialclassPageControl:UserControl
{
//委托及事件
publicdelegatevoidBindPage(intpageSize,intpageIndex,outinttotalCount);
publiceventBindPageBindPageEvent;
//属性
publicintPageSize{get;set;}=1;//每页显示记录数
publicintPageIndex{get;set;}//页序号
publicintTotalCount{get;set;}//总记录数
publicintPageCount{get;set;}//总页数
publicPageControl()
{
InitializeComponent();
//取消下划线
linkFirst.LinkBehavior=LinkBehavior.NeverUnderline;
linkPrev.LinkBehavior=LinkBehavior.NeverUnderline;
linkNext.LinkBehavior=LinkBehavior.NeverUnderline;
linkLast.LinkBehavior=LinkBehavior.NeverUnderline;
linkGo.LinkBehavior=LinkBehavior.NeverUnderline;
}
///
///设置页
///
publicvoidSetPage()
{
//总记录数
inttotalCount=0;
BindPageEvent(PageSize,PageIndex+1,outtotalCount);
TotalCount=totalCount;
//总页数
if(TotalCount%PageSize==0)
PageCount=TotalCount/PageSize;
else
PageCount=TotalCount/PageSize+1;
//当前页及总页数
txtCurrentPage.Text=(PageIndex+1).ToString();
lblTotalPage.Text="共"+PageCount.ToString()+"页";
}
///
///首页
///
///
///
privatevoidlinkFirst_LinkClicked(objectsender,LinkLabelLinkClickedEventArgse)
{
if(e.Button==MouseButtons.Left)
{
PageIndex=0;
SetPage();
}
}
///
///上一页
///
///
///
privatevoidlinkPrve_LinkClicked(objectsender,LinkLabelLinkClickedEventArgse)
{
if(e.Button==MouseButtons.Left)
{
PageIndex--;
if(PageIndex<0)
{
PageIndex=0;
}
SetPage();
}
}
///
///下一页
///
///
///
privatevoidlinkNext_LinkClicked(objectsender,LinkLabelLinkClickedEventArgse)
{
if(e.Button==MouseButtons.Left)
{
PageIndex++;
if(PageIndex>PageCount-1)
{
PageIndex=PageCount-1;
}
SetPage();
}
}
///
///末页
///
///
///
privatevoidlinkLast_LinkClicked(objectsender,LinkLabelLinkClickedEventArgse)
{
if(e.Button==MouseButtons.Left)
{
PageIndex=PageCount-1;
SetPage();
}
}
///
///只能按0-9、Delete、Enter、Backspace键
///
///
///
privatevoidtxtSetPage_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;
}
}
///
///指定页
///
///
///
privatevoidlinkGo_LinkClicked(objectsender,LinkLabelLinkClickedEventArgse)
{
if(e.Button==MouseButtons.Left)
{
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();
}
///
///linkFirst鼠标移过颜色
///
///
///
privatevoidlinkFirst_MouseMove(objectsender,MouseEventArgse)
{
linkFirst.LinkColor=Color.Red;
}
///
///linkFirst鼠标离开颜色
///
///
///
privatevoidlinkFirst_MouseLeave(objectsender,EventArgse)
{
linkFirst.LinkColor=Color.Black;
}
///
///linkPrev鼠标移过颜色
///
///
///
privatevoidlinkPrev_MouseMove(objectsender,MouseEventArgse)
{
linkPrev.LinkColor=Color.Red;
}
///
///linkPrev鼠标离开颜色
///
///
///
privatevoidlinkPrev_MouseLeave(objectsender,EventArgse)
{
linkPrev.LinkColor=Color.Black;
}
///
///linkNext鼠标移过颜色
///
///
///
privatevoidlinkNext_MouseMove(objectsender,MouseEventArgse)
{
linkNext.LinkColor=Color.Red;
}
///
///linkNext鼠标离开颜色
///
///
///
privatevoidlinkNext_MouseLeave(objectsender,EventArgse)
{
linkNext.LinkColor=Color.Black;
}
///
///linkLast鼠标移过颜色
///
///
///
privatevoidlinkLast_MouseMove(objectsender,MouseEventArgse)
{
linkLast.LinkColor=Color.Red;
}
///
///linkLast鼠标离开颜色
///
///
///
privatevoidlinkLast_MouseLeave(objectsender,EventArgse)
{
linkLast.LinkColor=Color.Black;
}
///
///linkGo鼠标移过颜色
///
///
///
privatevoidlinkGo_MouseMove(objectsender,MouseEventArgse)
{
linkGo.LinkColor=Color.Red;
}
///
///linkGo鼠标离开颜色
///
///
///
privatevoidlinkGo_MouseLeave(objectsender,EventArgse)
{
linkGo.LinkColor=Color.Black;
}
}
3、SQLServer创建存储过程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、新建一个WinForm程序,命名为Main,并拖入一个DataGridView控件及上面新建的PageControl控件,代码如下:
privatevoidMain_Load(objectsender,EventArgse)
{
pageControl1.PageSize=20;
pageControl1.PageIndex=0;
pageControl1.BindPageEvent+=BindPage;
pageControl1.SetPage();
}
///
///绑定页
///
///每页显示记录数
///页序号
///总记录数
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
}
5、执行程序:
总结
以上所述是小编给大家介绍的DataGridView使用自定义控件实现简单分页功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。