c# 分页
来源:互联网 发布:金山软件官网 编辑:程序博客网 时间:2024/05/29 03:37
1:首先写一个分页控件
如图:
代码:
public partial class ControlPage_QueryData : UserControl
{
public DataTable table = new DataTable();
public ControlPage_QueryData()
{
InitializeComponent();
}
public ControlPage_QueryData(DataTable dt)
{
InitializeComponent();
table = dt;
}
#region 分页字段和属性
private int pageIndex = 1;
/// <summary>
/// 当前页面
/// </summary>
public int PageIndex
{
get { return pageIndex; }
set { pageIndex = value; }
}
private int pageSize = 10;
/// <summary>
/// 每页记录数
/// </summary>
public int PageSize
{
get { return pageSize; }
set { pageSize = value; }
}
private int recordCount = 0;
/// <summary>
/// 总记录数
/// </summary>
public 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;
}
}
/// <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;
}
private string jumpText;
/// <summary>
/// 跳转按钮文本
/// </summary>
public string JumpText
{
get
{
if (string.IsNullOrEmpty(jumpText))
{
jumpText = "Go";
}
return jumpText;
}
set { jumpText = value; }
}
#endregion
#region 页码变化触发事件
public event EventHandler OnPageChanged;
#endregion
#region 分页及相关事件功能实现
private void SetFormCtrEnabled()
{
lnk_First.Enabled = true;
lnk_Prev.Enabled = true;
lnk_Next.Enabled = true;
lnk_Last.Enabled = true;
btn_Go.Enabled = true;
}
/// <summary>
/// 外部调用
/// </summary>
public void DrawControl(int count)
{
recordCount = count;
DrawControl(false);
}
/// <summary>
/// 页面控件呈现
/// </summary>
private void DrawControl(bool callEvent)
{
btn_Go.Text = JumpText;
lblCurrent_Page.Text = PageIndex.ToString();
lblPage_Count.Text = PageCount.ToString();
lblTotal_Count.Text = RecordCount.ToString();
txtPage_Size.Text = PageSize.ToString();
if (callEvent && OnPageChanged != null)
{
OnPageChanged(this, null);//当前分页数字改变时,触发委托事件
}
SetFormCtrEnabled();
if (PageCount == 1)//有且仅有一页
{
lnk_First.Enabled = false;
lnk_Prev.Enabled = false;
lnk_Next.Enabled = false;
lnk_Last.Enabled = false;
btn_Go.Enabled = false;
}
else if (PageIndex == 1)//第一页
{
lnk_First.Enabled = false;
lnk_Prev.Enabled = false;
}
else if (PageIndex == PageCount)//最后一页
{
lnk_Next.Enabled = false;
lnk_Last.Enabled = false;
}
}
#endregion
bool isTextChanged = false;
private void lnk_First_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
lnk_First.Enabled = false;
lnk_Prev.Enabled = false;
lnk_Next.Enabled = true;
lnk_Last.Enabled = true;
PageIndex = 1;
DrawControl(true);
}
private void lnk_Prev_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
lnk_First.Enabled = true;
lnk_Prev.Enabled = true;
lnk_Next.Enabled = true;
lnk_Last.Enabled = true;
PageIndex = Math.Max(1, PageIndex - 1);
DrawControl(true);
}
private void lnk_Next_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
lnk_First.Enabled = true;
lnk_Prev.Enabled = true;
lnk_Next.Enabled = true;
lnk_Last.Enabled = true;
PageIndex = Math.Min(PageCount, PageIndex + 1);
DrawControl(true);
}
private void lnk_Last_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
lnk_First.Enabled = true;
lnk_Prev.Enabled = true;
lnk_Next.Enabled = false;
lnk_Last.Enabled = false;
PageIndex = PageCount;
DrawControl(true);
}
/// <summary>
/// 跳转
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_Go_Click(object sender, EventArgs e)
{
int num = 0;
if (int.TryParse(txtPage_Num.Text.Trim(), out num) && num > 0)
{
if (num <= pageCount)
{
PageIndex = num;
DrawControl(true);
}
}
}
/// <summary>
/// 跳转页数限制
/// </summary>
private void txtPage_Num_TextChanged(object sender, EventArgs e)
{
int num = 0;
if (int.TryParse(txtPageNum.Text.Trim(), out num) && num > 0)
{
if (num > PageCount)
{
txtPageNum.Text = PageCount.ToString();
}
}
}
/// <summary>
/// 光标离开分页属性
/// <summary>
private void txtPage_Size_Leave(object sender, EventArgs e)
{
if (isTextChanged)
{
isTextChanged = false;
lnk_First_LinkClicked(null, null);
}
}
/// <summary>
/// 分页属性改变了。
/// </summary>
private void txtPage_Size_TextChanged(object sender, EventArgs e)
{
int num = 0;
if (!int.TryParse(txtPage_Size.Text.Trim(), out num) || num <= 0)
{
num = 10;
txtPage_Size.Text = "10";
}
else
{
isTextChanged = true;
}
pageSize = num;
}
private void txtPage_Num_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
btn_Go_Click(null, null);
}
}
///// <summary>
///// enter键功能
///// </summary>
//private void txtPage_Num_KeyPress(object sender, KeyPressEventArgs e)
//{
// btn_Go_Click(null, null);
//}
//private void txtPage_Num_KeyDown(object sender, KeyEventArgs e)
//{
// if (e.KeyCode == Keys.Enter)
// {
// btn_Go_Click(null, null);
// }
//}
}
2:分页控件的使用
编译后工具栏就会有这个分页控件,然后把这个控件拖到窗口中就行,如图
在load方法中加上pagerControl1.OnPageChanged += new EventHandler(pagerControl1_OnPageChanged);并实现pagerControl1_OnPageChanged方法
public partial class StartForm : Form
{
public StartForm()
{
InitializeComponent();
}
private void StartForm_Load(object sender, EventArgs e)
{
pagerControl1.OnPageChanged += new EventHandler(pagerControl1_OnPageChanged);
}
private void pagerControl1_OnPageChanged(object sender, EventArgs e)
{
dataGridView1.DataSource = null;
//dataGridView1.Rows.Clear();
List<LayerAttributeFieldsModel> pageShow_List = new List<LayerAttributeFieldsModel>();
int pageindex = controlPage_QueryData1.PageIndex;
int pageSize = controlPage_QueryData1.PageSize;
int fromIndex = pageSize * (pageindex - 1);//开始行
int toIndex = pageSize * pageindex - 1; //结束行
if (toIndex >= list2.Count)//list2 为查询到的记录
{
toIndex = list2.Count - 1;
}
for (int k = fromIndex; k <= toIndex; k++)
{
pageShow_List.Add(list2[k]);//要显示的记录
}
setDataGridView(pageShow_List);//把记录写入datagridview
controlPage_QueryData1.DrawControl(list2.Count);
}
//查询
private void button1_Click(object sender, EventArgs e)
{
dataGridView1.DataSource = null;
//dataGridView1.Rows.Clear();//清除记录
//把查到的数据放到list或者dataset中
if (list2.Count < 11)//查询的记录没超过10条
{
controlPage_QueryData1.PageIndex = 1;
}
List<LayerAttributeFieldsModel> pageShowList = new List<LayerAttributeFieldsModel>();
int pageindex = controlPage_QueryData1.PageIndex;
int pageSize = controlPage_QueryData1.PageSize;
int fromIndex = pageSize * (pageindex - 1);//开始行
int toIndex = pageSize * pageindex - 1; //结束行
if (toIndex >= list2.Count)
{
toIndex = list2.Count - 1;
}
for (int k = fromIndex; k <= toIndex; k++)
{
pageShowList.Add(list2[k]);
}
setDataGridView(pageShowList);
controlPage_QueryData1.DrawControl(list2.Count);
}
}
- C# 分页
- c#分页
- C#分页
- C#分页
- c#分页
- C# 分页
- C#分页
- c# 分页
- C# 分页
- C# 分页类
- C#大talist分页
- C# 数字分页
- c# Linq 的分页
- c#2005 datagridview 分页
- C# 分页类
- c# aspx 分页源代码
- C# Oracle 分页方法
- C#简单分页
- ubuntu 14.04 64 bit 安装 appium
- Android SDK开发包国内下载地址
- java初学者学习教程——02 java学习路线
- Bootrom和Boot image的区别,Boot image和VxWorks image的联系和区别
- 【java】文件读取
- c# 分页
- springMVC介绍
- FileOutputStream,BufferedOutputStream,对象的序列化与反序列化ObjectOutputStream
- POJ 1655 - Balancing Act(树形DP)
- OpenCV2:Mat属性type,depth,step
- 03搭建JAVA环境——java学习——java初学者专题教程
- hdu 5305 Friends dfs
- ZOJ 3810 A Volcanic Island
- Mybatis简介