以实现下面该效果为实例:
private string constr = ConfigurationManager.ConnectionStrings["conStr"].ConnectionString;
int pageSize = 2;//每页显示条数
int currentPage = 1;//当前页码
int totalCount = 0;//总记录数
int totalPage = 1;//总页码
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
BindPageSize();
tbPage.Text =currentPage.ToString();
BindDataGridView();
}
//存放显示每页条数信息
private void BindPageSize()
{
List<PageSize> list = new List<PageSize>()
{
new PageSize(){Code=2,Text="2" },
new PageSize(){Code=3,Text="3" },
new PageSize(){Code=4,Text="4" },
new PageSize(){Code=5,Text="5" },
new PageSize(){Code=10,Text="10" },
new PageSize(){Code=20,Text="20" }
};
cbPageSize.DataSource = list;
//显示选中的文本信息
cbPageSize.DisplayMember = "Text";
}
//处理分页查询
private void BindDataGridView()
{
//查询的起始点
int start = (currentPage - 1) * pageSize;
string where = "where (1=1)";
if (!string.IsNullOrWhiteSpace(tbUserName.Text))
{
where += "and UserName like @UserName";
}
SqlParameter[] parameters = new SqlParameter[]
{
new SqlParameter("@UserName",$"%{tbUserName.Text}%")//模糊匹配
};
//分页
string sql = "select * from [User] " + where + " order by UserId offset " + start + " rows fetch next " + pageSize + " rows only; select count(*) from [User] " + where;
DataSet ds = SqlHelper.ExecuteDataset(constr, CommandType.Text, sql, parameters);
totalCount = (int)ds.Tables[1].Rows[0][0];
totalPage = totalCount % pageSize == 0 ? totalCount / pageSize : totalCount / pageSize + 1;
dataGridView1.DataSource = ds.Tables[0];
// 显示当前页码和总页数
label2.Text = $"{currentPage}/{totalPage}";
// 显示当前页码
tbPage.Text = currentPage.ToString();
// 按钮的禁用启用
if (currentPage == 1)
{
btnFrist.Enabled = false;
btnPrev.Enabled = false;
btnNext.Enabled = true;
btnLast.Enabled = true;
}
if (currentPage == totalPage)
{
btnFrist.Enabled = true;
btnPrev.Enabled = true;
btnNext.Enabled = false;
btnLast.Enabled = false;
}
if (currentPage > 1 && currentPage < totalPage)
{
btnFrist.Enabled = true;
btnPrev.Enabled = true;
btnNext.Enabled = true;
btnLast.Enabled = true;
}
}
//查询
private void btnSelect_Click(object sender, EventArgs e)
{
currentPage = 1;
BindDataGridView();
}
//首页
private void btnFrist_Click(object sender, EventArgs e)
{
currentPage = 1;
BindDataGridView();
}
//尾页
private void btnLast_Click(object sender, EventArgs e)
{
currentPage = totalPage;
BindDataGridView();
}
//上一页
private void btnPrev_Click(object sender, EventArgs e)
{
if (currentPage > 1)
{
currentPage = currentPage - 1;
}
else
{
currentPage = 1;
}
BindDataGridView();
}
//下一页
private void btnNext_Click(object sender, EventArgs e)
{
if (currentPage < totalPage)
currentPage = currentPage + 1;
else
currentPage = totalPage;
BindDataGridView();
}
//每页显示条数的改变
private void cbPageSize_SelectedIndexChanged(object sender, EventArgs e)
{
PageSize ps = (PageSize)cbPageSize.SelectedItem;
pageSize = ps.Code;
currentPage = 1;
BindDataGridView();
}
//页码输入
private void tbPage_KeyPress(object sender, KeyPressEventArgs e)
{
// 输入框只能输入数字,退格键,回车键,删除键
if (e.KeyChar >=48 && e.KeyChar<=57 || e.KeyChar==8 || e.KeyChar==13 ||e.KeyChar==127)
{
e.Handled = false;
if (e.KeyChar==13)
{
if (!string.IsNullOrWhiteSpace(tbPage.Text))
btnBreak.PerformClick();
else
{
tbPage.Text = "1";
btnBreak.PerformClick();
}
}
}
else
e.Handled = true;
}
//跳转
private void btnBreak_Click(object sender, EventArgs e)
{
currentPage=Convert.ToInt32(tbPage.Text);
BindDataGridView();
}
}