说明:为了方便后续的使用我们做成一个通用的版本
1. 首先添加用户控件,布局如图所示
2. 修改变量名称,我的命名如下
共计100的lable :lblTotalCount
每页文本框 :txtPageSize
当前页1 lable :lblCurrentPage
100 lable:lblPageCount
按钮命名分别为 :linkFirst ,linkPrevious,linkNext,linkLast
转到前面的文本框:txtPageNum
转到按钮:btnGo
3. 开始用户控件代码编写
public partial class winpageing : UserControl
{
public winpageing()
{
InitializeComponent();
}
#region 分页字段和属性
private int pageIndex = 1;
/// <summary>
/// 当前页数
/// </summary>
public virtual int PageIndex
{
get { return pageIndex; }
set { pageIndex = value; }
}
private int pageSize = 100;
/// <summary>
/// 每页记录数
/// </summary>
public virtual int PageSize
{
get { return pageSize; }
set { pageSize = value; }
}
private int recordCount = 0;
/// <summary>
/// 总记录数
/// </summary>
public virtual int RecordCount
{
get { return recordCount; }
set { recordCount = value; }
}
private int pageCount = 0;
/// <summary>
/// 总页数
/// </summary>
public int PageCount
{
get
{
if (pageSize != 0)
{
pageCount = GetPageCount();
}
return pageCount;
}
}
#endregion
#region 页码变化时触发事件
public event EventHandler OnPageChanged;
#endregion
#region 分页及相关事件功能实现
/// <summary>
/// 设窗体控件全部可用
/// </summary>
private void SetFormCtrEnabled()
{
linkFirst.Enabled = true;
linkPrevious.Enabled = true;
linkNext.Enabled = true;
linkLast.Enabled = true;
btnGo.Enabled = true;
}
/// <summary>
/// 计算总页数
/// </summary>
/// <returns></returns>
private int GetPageCount()
{
if (PageSize == 0)
{
return 0;
}
int pageCount = RecordCount / PageSize;
if (RecordCount % PageSize == 0)
{
pageCount = RecordCount / PageSize;
}
else
{
pageCount = RecordCount / PageSize + 1;
}
return pageCount;
}
/// <summary>
/// 用于客户端调用
/// </summary>
public void DrawControl(int count)
{
recordCount = count;
DrawControl(false);
}
/// <summary>
/// 根据不同的条件,改变页面控件的呈现状态
/// </summary>
private void DrawControl(bool callEvent)
{
lblCurrentPage.Text = PageIndex.ToString();
lblPageCount.Text = PageCount.ToString();
lblTotalCount.Text = RecordCount.ToString();
txtPageSize.Text = PageSize.ToString();
if (callEvent && OnPageChanged != null)
{
OnPageChanged(this, null);//当前分页数字改变时,触发委托事件
}
SetFormCtrEnabled();
if (PageCount == 1)//有且仅有一页时
{
linkFirst.Enabled = false;
linkPrevious.Enabled = false;
linkNext.Enabled = false;
linkLast.Enabled = false;
btnGo.Enabled = false;
}
else if (PageIndex == 1)//当前页为第一页时
{
linkFirst.Enabled = false;
linkPrevious.Enabled = false;
}
else if (PageIndex == PageCount)//当前页为最后一页时
{
linkNext.Enabled = false;
linkLast.Enabled = false;
}
}
#endregion
bool isTextChanged = false;
/// <summary>
/// 每页显示的记录数改变后点击回车变化
/// </summary>
private void txtPageSize_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
int num = 0;
//输入不符合规范时,默认设置为100
if (!int.TryParse(txtPageSize.Text.Trim(), out num) || num <= 0)
{
num = 100;
txtPageSize.Text = "100";
}
else
{
isTextChanged = true;
}
pageSize = num;
linkFirst_Click(null, null);
}
}
//首页
private void linkFirst_Click(object sender, EventArgs e)
{
PageIndex = 1;
DrawControl(true);
}
//上一页
private void linkPrevious_Click(object sender, EventArgs e)
{
PageIndex = Math.Max(1, PageIndex - 1);
DrawControl(true);
}
//下一页
private void linkNext_Click(object sender, EventArgs e)
{
PageIndex = Math.Min(PageCount, PageIndex + 1);
DrawControl(true);
}
//尾页
private void linkLast_Click(object sender, EventArgs e)
{
PageIndex = PageCount;
DrawControl(true);
}
private void btnGo_Click(object sender, EventArgs e)
{
int num = 0;
if (int.TryParse(txtPageNum.Text.Trim(), out num) && num > 0)
{
PageIndex = num;
DrawControl(true);
}
}
private void winpageing_Load(object sender, EventArgs e)
{
lblCurrentPage.Text = "";
lblPageCount.Text = "";
lblTotalCount.Text = "";
txtPageSize.Text = "";
txtPageNum.Text = "";
//this.BackColor = Color.FromArgb(179, 212, 255);
}
public partial class frmPagerDemo : Form
{
public frmPagerDemo()
{
InitializeComponent();
}
DataTable dtinfo=new System.Data.DataTable();
int icount;
private void StartForm_Load(object sender, EventArgs e)
{
BandData();
LoadCurrentData();
//激活OnPageChanged事件
pagerControl1.OnPageChanged += new EventHandler(pagerControl1_OnPageChanged);
}
/// <summary>
/// 页数变化时调用绑定数据方法
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void pagerControl1_OnPageChanged(object sender, EventArgs e)
{
LoadCurrentData();
pagerControl1.DrawControl(icount);
}
/// <summary>
/// 得到当前数据源
/// </summary>
/// <param name="pagesize">每页条数</param>
/// <param name="currentpage">当前页数</param>
/// <param name="currentpageTotal">总共页数</param>
private void BandData()
{
string strconstring = System.Configuration.ConfigurationManager.ConnectionStrings["condb"].ConnectionString.ToString();
string strSql = "";
strSql = "SELECT RCPT_NO,BIZ_DAY,RCPT_TIME,STTL_AMT,TTL_AMT, GUEST_NUM,TTL_QTY FROM TRN_HDR";
dtinfo = AccessHelper.ExecuteDataTable(strconstring,strSql);
icount = dtinfo.Rows.Count;
pagerControl1.DrawControl(icount);
}
private void LoadCurrentData()
{
//DataTable dtCurrrntdata = null;
try
{
DataTable dtTemp = new System.Data.DataTable();
int nStartPos = 0; //当前页面开始记录行
int nEndPos = 0; //当前页面结束记录行
dtTemp = dtinfo.Clone(); //克隆DataTable结构框架
int pageCurrent = pagerControl1.PageIndex;
int pageCount = pagerControl1.PageCount;
int pageSize = pagerControl1.PageSize;
if (pageCurrent==1)
{
nStartPos = 0;
nEndPos = pageSize * pageCurrent;
{
nEndPos = icount;
}
}
else if (pageCurrent == pageCount)
{
nStartPos = pageSize * (pageCurrent - 1);
nEndPos = icount;
}
else
{
nStartPos = pageSize * (pageCurrent - 1);
nEndPos = pageSize * pageCurrent;
}
//从原数据源复制记录行
for (int i = nStartPos; i < nEndPos; i++)
{
dtTemp.ImportRow(dtinfo.Rows[i]);
}
dataGridView1.DataSource = dtTemp;
}
catch (Exception ex)
{
throw;
}
}
//自动序号
private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
Rectangle rectangle = new Rectangle(e.RowBounds.Location.X, e.RowBounds.Location.Y, dataGridView1.RowHeadersWidth, e.RowBounds.Height);
TextRenderer.DrawText(e.Graphics, (e.RowIndex + 1).ToString(),
dataGridView1.RowHeadersDefaultCellStyle.Font, rectangle, dataGridView1.RowHeadersDefaultCellStyle.ForeColor,
TextFormatFlags.VerticalCenter | TextFormatFlags.Right);
}
}
http://download.csdn.net/detail/bdb1018/9808666