先看效果图
这个是用lalbe标签和button按钮制作的
具体看代码设置
/// <summary>
/// 获取数据源 (表名,条件)
/// </summary>
/// <param name="sql"></param>
private void GetDataSource(string name, string sql)
{
this.dataGridView1.Columns.Clear(); //清除所有列
if (name.Equals("hou_chuCaidan"))
{
Cai_lie(); //菜品记录的列
}
else
{
System_lie();//系统记录的列
}
sb.Length = 0;
sb.AppendFormat("select * from {1} {0} ", sql, name);
//设置数据源
_dt = dbhelper.GetTable(sb.ToString(), "_jilu");
//设置序号
for (int i = 0; i < _dt.Rows.Count; i++)
{
_dt.Rows[i][0] = i + 1;
}
//初始页数为1
num = 1;
FenYe(-1);
}
//声明变量
int ii = 18; //每页的行数
int rows; //总行数
int num; //开始页数
int sum; //总页数
DataTable _dt; //数据源
/// <summary>
/// 分页数据设置
///
/// 实现思路:在源数据中截取选择的行数进行展示,截取的行数根据页数进行获取
/// 再把获取到行复制到一个新的Table中,再设置数据源
///
/// 如果oo的值不为-1, 开始页数则为oo
/// </summary>
/// <param name="oo"></param>
private void FenYe(int oo)
{
if( oo != -1)
{
num = oo;
}
DataTable dt = _dt.Clone(); //复制原数据的结构
rows = _dt.Rows.Count; //总行数
sum = rows%ii == 0 ? rows/ii : (rows/ii)+1; //总页数=总行数/每页的行数(如果除不尽则+1)
int ks = (num * ii) - ii; //开始行数(当前页数*每页的行数)-每页的行数
int js = num * ii; //结束行数
if (num == sum)
{
js = ks + (rows - ((num-1) * ii)); //当最后一页时,结束的行数 = 开始行数 + (总行数 - ((总页数-1) * 每页的行数))
}
//实现分页
if( rows != 0) //必须要有一条记录
{
for (int i = ks; i < js; i ++ )
{
dt.ImportRow(_dt.Rows[i]); //复制行
}
}
this.lal_Rows.Text = rows.ToString(); //设置总行数
this.lal_num.Text = num.ToString(); //当前页数
this.lal_sum.Text = sum.ToString(); //总页数
//给DateGridView设置数据源
this.dataGridView1.DataSource = dt;
}
private void btn_shou_Click(object sender, EventArgs e) //首页
{
num = 1; //当前页数设为1
FenYe(-1);
}
private void btn_shang_Click(object sender, EventArgs e) //上一页
{
if (num == 1) //如果当前页数为1的话直接跳出
{
return;
}
num--;
FenYe(-1);
}
private void btn_xia_Click(object sender, EventArgs e) //下一页
{
if (num == sum) //最后一页时直接跳出
{
return;
}
num++;
FenYe(-1);
}
private void btn_wei_Click(object sender, EventArgs e) //尾页
{
num = sum; //当前页数设为总页数
FenYe(-1);
}
private void btn_go_Click(object sender, EventArgs e) //GO跳转
{
try { int i = Convert.ToInt32(this.txt_ye.Text); }
catch (Exception) { return; }
if (this.txt_ye.Text.Equals(string.Empty) ||
Convert.ToInt32(this.txt_ye.Text) < 1 || Convert.ToInt32(this.txt_ye.Text) > sum) return;
FenYe(Convert.ToInt32(this.txt_ye.Text));
}
实现思路:获取在数据中获取数据源后,再根据页数进行分页展示数据,比如一页有10行数据,现在是第2页,那么就把数据源中的第10行至19行的数据单独拿出来进行展示
注:要注意最后一页的设置!!!