最近学到分页了,网上视频看得一脸懵逼,自己花了半天时间理解了一下:
主要需要理解这个方法:
public int Fill( DataSet dataSet, 需要加载的数据 int startRecord, 这个就是从那条数据开始显示,如果每页显示3条数据,那么第一页是0,第二页就是3,第三页就是6这样的规律 计算的公式 startRecord= (当前页) - 1) * 每页显示数据+ 1; 公式网上看的 int maxRecords, 每页显示多少条数据 string srcTable 名字 );
参数
dataSet
要用记录和架构(如果必要)填充的 DataSet。
startRecord
从其开始的从零开始的记录号。
maxRecords
要检索的最大记录数。
srcTable
用于表映射的源表的名称。
实际使用:
adapter.Fill(ds, minPage, pageSize, "user");
以下是代码:
SqlDataAdapter adapter = null;
DataSet ds = new DataSet();
int currenPage = 1; //当前页
int pageSize = 3; //每页3行
int pageCount; //总页数
int recordCount; //总记录数
int minPage = 0; //
private void Form1_Load(object sender, EventArgs e)
{
string connStr = "server=ip;database=数据库;uid=sa;pwd=sa";
SqlConnection conn = new SqlConnection(connStr);
try
{
conn.Open();
string selectSql = "select * from [user]";
adapter = new SqlDataAdapter(selectSql,conn);
//这个是网上找的公式
if (currenPage !=1) {
minPage = (currenPage - 1) * pageSize + 1;
}
adapter.Fill(ds,"user");
//总记录数
recordCount = ds.Tables[0].Rows.Count; //计算总记录数
//总页数计算
pageCount = recordCount % pageSize == 0 ? recordCount / pageSize : recordCount / pageSize + 1;
//给总页数赋值
toolStripLabel1.Text = "/" + pageCount;
fenyeLoad(); //分页方法
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally {
conn.Close();
}
}
//分页方法
private void fenyeLoad() {
currenPage = minPage / pageSize+1;
toolStripLabel2.Text = currenPage.ToString();
ds.Clear();
adapter.Fill(ds, minPage, pageSize, "user");
bindingSource1.DataSource=ds.Tables[0];
bindingNavigator1.BindingSource=bindingSource1;
dataGridView1.DataSource = bindingSource1;
}
private void toolStripButton2_Click(object sender, EventArgs e)
{
if (currenPage<pageCount && 0<currenPage)
{
minPage = minPage + pageSize;
}
else {
MessageBox.Show("已经是最后一页");
}
fenyeLoad();
}
private void toolStripButton1_Click(object sender, EventArgs e)
{
if (minPage >= 1)
{
minPage = minPage - pageSize;
}
else {
MessageBox.Show("已经是第一页了");
}
fenyeLoad();
}