看了很多分页,都是基于处理数据库sql语句的操作,在这里,我写了一个基于datatable的分页,有兴趣的朋友可以封装,用于listview 和gridview的分页。
//分页
int totalcount = 0;//记录总共的记录数
static int page = 0; //记录现在翻到第几页了
static int allpage = 0;//总共分页数
static int mpage = 20;//每页多少数据
private DataTable SJ;
private DataTable paSJ;
//分页结束
//自写分页操作
private DataTable FenYe(DataTable rdt)
{
nextPage.Enabled = true; //有调用数据处理
prevPage.Enabled = true;//有调用数据处理
int ycount = 0; //页数
int count = rdt.Rows.Count;//查询表中有几条数据
if (count > 0) //有数据才检查分页
{
ycount = count / mpage;
if (ycount < 1) //小于1页,不进行分页
{
ycount = 0;
page = 1;
allpage = 1;//总页面1
tbnowpage.Text = page.ToString();
tballpage.Text = allpage.ToString();
paSJ = rdt;
nextPage.Enabled = false;
prevPage.Enabled = false;
return paSJ; //直接返回原数据出去
}
else
{
if (count % mpage == 0) //余数为0时,就是被整除
{
allpage = ycount;//总页数
}
else
{
allpage = ycount + 1;//总页数
}
page = 1;
tbnowpage.Text = page.ToString();
tballpage.Text = allpage.ToString();
paSJ = rdt.AsEnumerable().Take(mpage).CopyToDataTable<DataRow>(); //刚开始,返回数据
}
}
else
{
paSJ = rdt;
}
return paSJ;
}
private void nextPage_Click(object sender, EventArgs e)
{
prevPage.Enabled = true; //
int j = page * mpage; //初始 例如1*2=2
paSJ.Rows.Clear();//清空之前数据
page = page + 1;
tbnowpage.Text = page.ToString();
tballpage.Text = allpage.ToString();
int k;
if (page == allpage)
{
nextPage.Enabled = false;
k = SJ.Rows.Count;
}
else
{
k = page * mpage;
}
for (int i = j; i < k; i++)
{
paSJ.Rows.Add(SJ.Rows[i].ItemArray);
}
//绑定LISTVIEW
gridviewdb(paSJ); //每次获取的数据
}
private void prevPage_Click(object sender, EventArgs e)
{
nextPage.Enabled = true;
paSJ.Rows.Clear();//清空之前数据
page = page - 1;
int j = (page - 1) * mpage;
tbnowpage.Text = page.ToString();
tballpage.Text = allpage.ToString();
for (int i = j; i < page * mpage; i++)
{
paSJ.Rows.Add(SJ.Rows[i].ItemArray);
}
if (page == 1)
{
prevPage.Enabled = false; //
}
//绑定LISTVIEW
gridviewdb(paSJ); //每次获取的数据
}