追寻我心

记录点点滴滴,追随自我风格!
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

C# winform 分页控件

Posted on 2012-02-10 09:15  追寻我心  阅读(826)  评论(1)    收藏  举报

针对目前手上c/s项目编写的分页控件,可能不适合所有人使用.

运行效果图:

该控件并没有使用VS自带的BindingNavigate、BindingSource控件, 使用控件时只需要传入 每页条数,总条数,当前页面索引即可,数据

源无需与分页控件绑关联.

 

代码:

public partial class Pager : UserControl
{

public event System.EventHandler PageIndexChanged;
private const int DefaultPageSize = 10;
//总页数
private int mnPageCount = 0;
//最大记录
private int mnMaxRec = 0;
//一页显示多少条
private int mnPageSize = 10;
//当前页面索引
private int mnCurrentPageIndex = 1;
private int recNo;

public Pager()
{
InitializeComponent();
}

#region 公开的属性
/// <summary>
/// 获取总页数
/// </summary>
public int PageCount
{
get
{
int nPageCount = (RecordCount > 0) ? (int)Math.Ceiling((double)RecordCount / (double)PageSize) : 1;
return nPageCount;
}
}
/// <summary>
/// 获取或设置当前页面索引
/// </summary>
public int CurrentPageIndex
{
get
{
if (mnCurrentPageIndex >= PageCount && PageCount > 0)
{
return PageCount;
}
else if (mnCurrentPageIndex < 1)
{
return 1;
}
return mnCurrentPageIndex;
}
set
{
int nPageIndex = value;
if (nPageIndex < 1)
{
nPageIndex = 1;
}
else if (nPageIndex > this.PageCount)
{
nPageIndex = this.PageCount;
}
mnCurrentPageIndex = nPageIndex;
Refresh();
}

}
/// <summary>
/// 获取或设置一页显示多少条数据
/// </summary>
public int PageSize
{
get
{
return mnPageSize;
}
set
{
int nPageSize = Math.Abs(value);
mnPageSize = nPageSize == 0 ? DefaultPageSize : nPageSize;
Refresh();
}

}
/// <summary>
/// 获取或设置总记录数
/// </summary>
public int RecordCount
{
get
{
return mnMaxRec;
}
set
{
mnMaxRec = value;
Refresh();
}
}

#endregion
/// <summary>
/// 应根据当前的CurrentPageIndex和pageCount设定按钮可用
/// </summary>
private void Refresh()
{
if (PageCount > 1)
{
toolFirstPage.Enabled = toolUpPage.Enabled = (CurrentPageIndex > 1);
toolNextPage.Enabled = toolLastPage.Enabled = (CurrentPageIndex < PageCount);
}
else
{
toolFirstPage.Enabled = false;
toolLastPage.Enabled = false;
toolUpPage.Enabled = false;
toolNextPage.Enabled = false;
}

toolCurrentPageIndex.Text = "" + CurrentPageIndex.ToString() + "";
toollabMaxpage.Text = "" + RecordCount.ToString() + " 条记录 , 每页 " + PageSize + "";
toolPageCount.Text = "" + PageCount.ToString() + "";
}

private void Pager_Load(object sender, EventArgs e)
{
Refresh();
}

private void toolFirstPage_Click(object sender, EventArgs e)
{
this.mnCurrentPageIndex = 1;
Refresh();
if (PageIndexChanged != null)//调用事件
{
PageIndexChanged(sender, e);
}
}

private void toolUpPage_Click(object sender, EventArgs e)
{
this.mnCurrentPageIndex = (CurrentPageIndex > 1) ? CurrentPageIndex - 1 : 1;
Refresh();
if (PageIndexChanged != null)//调用事件
{
PageIndexChanged(sender, e);
}
}

private void toolNextPage_Click(object sender, EventArgs e)
{
this.mnCurrentPageIndex = (PageCount > CurrentPageIndex) ? CurrentPageIndex + 1 : PageCount;
Refresh();
if (PageIndexChanged != null)//调用事件
{
PageIndexChanged(sender, e);
}
}

private void toolLastPage_Click(object sender, EventArgs e)
{
this.mnCurrentPageIndex = PageCount;
Refresh();
if (PageIndexChanged != null)//调用事件
{
PageIndexChanged(sender, e);
}
}

private void tooGo_Click(object sender, EventArgs e)
{
try
{
int JumpIndex = int.Parse(toolTextPageIndex.Text);
if (JumpIndex <= PageCount)
{
mnCurrentPageIndex = JumpIndex;
Refresh();
if (PageIndexChanged != null)//调用事件
{
PageIndexChanged(sender, e);
}
}
}
catch
{
}
}

//鼠标移至控件上方鼠标变手形状
private void toolFirstPage_MouseEnter(object sender, EventArgs e)
{
this.Cursor = Cursors.Hand;
}

private void toolFirstPage_MouseLeave(object sender, EventArgs e)
{
this.Cursor = Cursors.Default;
}

private void toolUpPage_MouseEnter(object sender, EventArgs e)
{
this.Cursor = Cursors.Hand;
}

private void toolUpPage_MouseLeave(object sender, EventArgs e)
{
this.Cursor = Cursors.Default;
}

private void toolNextPage_MouseEnter(object sender, EventArgs e)
{
this.Cursor = Cursors.Hand;
}

private void toolNextPage_MouseLeave(object sender, EventArgs e)
{
this.Cursor = Cursors.Default;
}

private void toolLastPage_MouseEnter(object sender, EventArgs e)
{
this.Cursor = Cursors.Hand;
}

private void toolLastPage_MouseLeave(object sender, EventArgs e)
{
this.Cursor = Cursors.Default;
}

private void tooGo_MouseEnter(object sender, EventArgs e)
{
this.Cursor = Cursors.Hand;
}

private void tooGo_MouseLeave(object sender, EventArgs e)
{
this.Cursor = Cursors.Default;
}


 

调用:

this.pager1.PageSize = 每页显示数量;
this.pager1.CurrentPageIndex = 当前页;
this.pager1.RecordCount = 总条数;

并在PageIndexChanged事件中重新为控件指定页面索引.