此文是根据网上资料,加以自己的理解实现集合数据的分页,适合初学者学习,高手请指点!
代码如下:
//测试 分页数据
DataTable dtyhdd;
public void Chushyhdd()
{
dtyhdd = new DataTable();
dtyhdd.Columns.Add("ddno", typeof(string));
dtyhdd.Columns.Add("dd", typeof(string));
}
//隐患地点共分多少页
int yhddnumi = 0;
//隐患当前页
int yhdddqi = 0;
//每页显示多少数据
int PageSize = 10;
查询:
private void button1_Click(object sender, EventArgs e)
{
//【初始化数据】
Chushyhdd();
comyhdd.Items.Clear();
for (int i = 1; i <= 31; i++)
{
//保存到内存表中
DataRow tr = this.dtyhdd.NewRow();
tr["ddno"] = i.ToString();
tr["dd"] = i.ToString()+"内容";
dtyhdd.Rows.Add(tr);
}
//【执行分页显示】
//每次显示10条数据 需要多少次
yhddnumi = dtyhdd.Rows.Count / 10;
//是否有余数
int numys = dtyhdd.Rows.Count % 10;
if (numys > 0)
{
yhddnumi++;
}
if (dtyhdd.Rows.Count >= PageSize)
{
//第一次获取数据1到10 第一页
for (int i = 0; i < PageSize; i++)
{
string sr1 = dtyhdd.Rows[i]["ddno"].ToString();
string sr2 = dtyhdd.Rows[i]["dd"].ToString();
comyhdd.Items.Add(sr2);
}
}
else
{
//就一页显示全部数据
foreach (DataRow tr in dtyhdd.Rows)
{
string sr1 = tr["ddno"].ToString();
string sr2 = tr["dd"].ToString();
comyhdd.Items.Add(sr2);
}
}
//上一页不可用
button2.Enabled = false;
//当前页
yhdddqi = 1;
//提示
labfy.Text = yhdddqi.ToString() + "/" + yhddnumi;
}
上一页:
//上一页
private void button2_Click(object sender, EventArgs e)
{
//下一页不起作用
button3.Enabled = true;
//当前页数是最后一页
if (yhdddqi == 1)
{
//上一页不起作用
button2.Enabled = false;
return;
}
//清空显示数据
comyhdd.Items.Clear();
yhdddqi--;
DataTable dddds = GetPagedTable(dtyhdd, yhdddqi, PageSize);
//测试
int dsds = dddds.Rows.Count;
//遍历数据
foreach (DataRow tr in dddds.Rows)
{
string sr2 = tr["dd"].ToString();
comyhdd.Items.Add(sr2);
}
//提示
labfy.Text = yhdddqi.ToString() + "/" + yhddnumi;
}
//下一页
private void button3_Click(object sender, EventArgs e)
{
button2.Enabled = true;
//当前页数是最后一页
if (yhddnumi > yhdddqi)
{
//清空显示数据
comyhdd.Items.Clear();
yhdddqi++;
DataTable dddds = GetPagedTable(dtyhdd, yhdddqi, PageSize);
//测试
int dsds = dddds.Rows.Count;
//遍历数据
foreach (DataRow tr in dddds.Rows)
{
string sr2 = tr["dd"].ToString();
comyhdd.Items.Add(sr2);
}
//提示
labfy.Text = yhdddqi.ToString() + "/" + yhddnumi;
}
else
{
//下一页不起作用
button3.Enabled = false;
}
}
下面这个方法是计算数据分页用的:
///
/// DataTable分页
///
/// DataTable
/// 页索引,注意:从1开始
/// 每页大小
///
public static DataTable GetPagedTable(DataTable dt, int PageIndex, int PageSize)
{
//判断当前索引
if (PageIndex == 0)
return dt;
//从数据集合拷贝数据
DataTable newdt = dt.Copy();
//数据清空
newdt.Clear();
//开始数据索引 = 当前页-1 x 每页大小
int rowbegin = (PageIndex - 1) * PageSize;
//结束数据索引 = 当前页 x 每页大小
int rowend = PageIndex * PageSize;
//开始数据索引 大于等于 当前数据集合大小
if (rowbegin >= dt.Rows.Count)
return newdt;
//结束数据索引 大于 当前数据集合大小
if (rowend > dt.Rows.Count)
rowend = dt.Rows.Count;
//遍历数据
for (int i = rowbegin; i <= rowend - 1; i++)
{
DataRow newdr = newdt.NewRow();
DataRow dr = dt.Rows[i];
foreach (DataColumn column in dt.Columns)
{
newdr[column.ColumnName] = dr[column.ColumnName];
}
newdt.Rows.Add(newdr);
}
return newdt;
}
效果图(很丑的界面 只是测试用)