以前写的,有点长using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using BLL; using Entity; namespace FeiFanSystem { public partial class Form2 : Form { public Form2() { InitializeComponent(); } private void button5_Click(object sender, EventArgs e) { Close(); } int TotalRows;//总条数 int RowsPerPage = 3;//每页行数 int TotalPages;//总页数 int currentPage = 1;//当前页数 UsersManager um = new UsersManager(); private void Form2_Load(object sender, EventArgs e) { GetTotalRows(); //下面判断的是第一显示的条数 if (TotalRows > RowsPerPage) { ChangPage(RowsPerPage, RowsPerPage); } else { ChangPage(TotalRows, TotalRows); } } private void GetTotalRows() { UsersManager um = new UsersManager(); int total = um.GetUsersNum(); if (total > 0) { TotalRows = total; if (total % RowsPerPage == 0) { TotalPages = total / RowsPerPage; } else { TotalPages = total / RowsPerPage + 1; } ShowPage(); } } private void ShowPage() { lblCurrentPage.Text = currentPage.ToString(); lblTotalPages.Text = TotalPages.ToString(); } private void GetAllUsers() { DataTable dt = um.GetAllUsers(); dataGridView1.DataSource = dt; } private void button8_Click(object sender, EventArgs e) { UserDetail ud = new UserDetail(); ud.ShowDialog(); GetAllUsers(); } private void button7_Click(object sender, EventArgs e) { if (dataGridView1.SelectedRows.Count == 1) { string id = dataGridView1.SelectedRows[0].Cells["id"].Value.ToString(); Users u = new Users(); u.Uid = id; UserDetail ud = new UserDetail(u); ud.ShowDialog(); GetAllUsers(); } else { MessageBox.Show("选一个吧"); } } private void button6_Click(object sender, EventArgs e) { GetAllUsers(); } /// <summary> /// 分页方法 /// </summary> /// <param name="rowsperpage">每页多少条</param> /// <param name="currentrowscount">该显示到多少条</param> public void ChangPage(int rowsperpage, int currentrowscount) { DataTable dt = um.GetCurrentRows(rowsperpage, currentrowscount); dataGridView1.DataSource = dt; } private void btnNext_Click(object sender, EventArgs e) { currentPage++; if (currentPage <= TotalPages) { if (currentPage < TotalPages) { ChangPage(RowsPerPage, RowsPerPage * currentPage); } else if (currentPage == TotalPages) { if (TotalRows % RowsPerPage == 0) { ChangPage(RowsPerPage, TotalRows); } else { ChangPage(TotalRows % RowsPerPage, TotalRows); } } ShowPage(); } else { currentPage--; MessageBox.Show("已经最后一页了"); } } private void btnLast_Click(object sender, EventArgs e) { ShowPage(); } private void btnFirst_Click(object sender, EventArgs e) { ShowPage(); } private void btnEnd_Click(object sender, EventArgs e) { currentPage = TotalPages; if (TotalRows % RowsPerPage == 0) { ChangPage(RowsPerPage, TotalRows); } else { ChangPage(TotalRows % RowsPerPage, TotalRows); } ShowPage(); } } }
可以从两种角度考虑问题: 1、直接用存储过程分页:create proc PageNum @PageSize int, --每页显示条数 @PageIndex int, --当前是第几页 @totalRows int output, --总行数 @totalPages int output --总页数 as declare @startId int declare @endId int set @startId = @PageSize*(@PageIndex-1)+1 set @endId = @startId+@PageSize-1 select @totalRows=COUNT(*) from Books set @totalPages=@totalRows/@PageSize if(@totalRows%@PageSize != 0) --如果总行数除每页显示数据量的值不等于0,则总页数得加1 begin set @totalPages=@totalPages+1 end declare @IndexTable table(Id int identity(1,1) ,nId int) insert into @IndexTable select Id from Books select * from @IndexTable as t ,Books as b where t.Id>=@startId and t.Id<=@endId and t.nId=b.Id go
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BLL;
using Entity;
namespace FeiFanSystem
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
} private void button5_Click(object sender, EventArgs e)
{
Close();
} int TotalRows;//总条数 int RowsPerPage = 3;//每页行数 int TotalPages;//总页数
int currentPage = 1;//当前页数 UsersManager um = new UsersManager();
private void Form2_Load(object sender, EventArgs e)
{
GetTotalRows(); //下面判断的是第一显示的条数
if (TotalRows > RowsPerPage)
{
ChangPage(RowsPerPage, RowsPerPage);
}
else
{
ChangPage(TotalRows, TotalRows);
} } private void GetTotalRows()
{
UsersManager um = new UsersManager();
int total = um.GetUsersNum();
if (total > 0)
{
TotalRows = total;
if (total % RowsPerPage == 0)
{
TotalPages = total / RowsPerPage;
}
else
{
TotalPages = total / RowsPerPage + 1;
}
ShowPage();
}
} private void ShowPage()
{
lblCurrentPage.Text = currentPage.ToString();
lblTotalPages.Text = TotalPages.ToString();
} private void GetAllUsers()
{
DataTable dt = um.GetAllUsers();
dataGridView1.DataSource = dt;
} private void button8_Click(object sender, EventArgs e)
{
UserDetail ud = new UserDetail();
ud.ShowDialog();
GetAllUsers();
} private void button7_Click(object sender, EventArgs e)
{
if (dataGridView1.SelectedRows.Count == 1)
{
string id = dataGridView1.SelectedRows[0].Cells["id"].Value.ToString();
Users u = new Users();
u.Uid = id;
UserDetail ud = new UserDetail(u);
ud.ShowDialog();
GetAllUsers();
}
else
{
MessageBox.Show("选一个吧");
}
} private void button6_Click(object sender, EventArgs e)
{
GetAllUsers();
} /// <summary>
/// 分页方法
/// </summary>
/// <param name="rowsperpage">每页多少条</param>
/// <param name="currentrowscount">该显示到多少条</param>
public void ChangPage(int rowsperpage, int currentrowscount)
{
DataTable dt = um.GetCurrentRows(rowsperpage, currentrowscount);
dataGridView1.DataSource = dt;
} private void btnNext_Click(object sender, EventArgs e)
{
currentPage++;
if (currentPage <= TotalPages)
{ if (currentPage < TotalPages)
{
ChangPage(RowsPerPage, RowsPerPage * currentPage);
}
else if (currentPage == TotalPages)
{
if (TotalRows % RowsPerPage == 0)
{
ChangPage(RowsPerPage, TotalRows);
}
else
{
ChangPage(TotalRows % RowsPerPage, TotalRows);
}
}
ShowPage();
}
else
{
currentPage--;
MessageBox.Show("已经最后一页了");
} } private void btnLast_Click(object sender, EventArgs e)
{
ShowPage();
} private void btnFirst_Click(object sender, EventArgs e)
{
ShowPage();
} private void btnEnd_Click(object sender, EventArgs e)
{
currentPage = TotalPages; if (TotalRows % RowsPerPage == 0)
{
ChangPage(RowsPerPage, TotalRows);
}
else
{
ChangPage(TotalRows % RowsPerPage, TotalRows);
} ShowPage();
}
}
}
1、直接用存储过程分页:create proc PageNum
@PageSize int, --每页显示条数
@PageIndex int, --当前是第几页
@totalRows int output, --总行数
@totalPages int output --总页数
as
declare @startId int
declare @endId int
set @startId = @PageSize*(@PageIndex-1)+1
set @endId = @startId+@PageSize-1
select @totalRows=COUNT(*) from Books
set @totalPages=@totalRows/@PageSize
if(@totalRows%@PageSize != 0) --如果总行数除每页显示数据量的值不等于0,则总页数得加1
begin
set @totalPages=@totalPages+1
end
declare @IndexTable table(Id int identity(1,1) ,nId int)
insert into @IndexTable select Id from Books
select * from @IndexTable as t ,Books as b where t.Id>=@startId and t.Id<=@endId and t.nId=b.Id
go
declare @tr int --总行数
declare @tp int --总页数
exec PageNum 4,2,@tr output ,@tp output
print '这是总页数'+convert(varchar,@tp) --数据转换
print @tr
2、用DataTable分页:不一定要用存储过程,可以一次性读到DataTable后,再做处理 private int pageSize = 0; //每页显示行数
private int pageCurrent = 0; //当前页号
private int pageCount = 0; //页数=总记录数/每页显示行数
private int nCurrent = 0; //当前记录行号
private int nMax = 0; //总记录数
private DataTable srcTable = null; //元数据 private void First_Click(object sender, EventArgs e)
{
try
{
pageCurrent = 1; //当前页数从1开始
nCurrent = 0; //当前记录数从0开始 if (srcTable == null || srcTable.Rows.Count == 0)
return; DataTable table = LoadPageData();
ChangeDataSoure(table); First.Enabled =false;
Prev.Enabled = false;
Next.Enabled = true;
End.Enabled = true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
} private void Prev_Click(object sender, EventArgs e)
{
try
{
pageCurrent--;
nCurrent = pageSize * (pageCurrent - 1); if (srcTable == null || srcTable.Rows.Count == 0)
return;
DataTable table = LoadPageData();
ChangeDataSoure(table); bool b = pageCurrent <= 1 ? false : true;
First.Enabled = b;
Prev.Enabled = b;
Next.Enabled = true;
End.Enabled = true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
} private void Next_Click(object sender, EventArgs e)
{
try
{
pageCurrent++;
nCurrent = pageSize * (pageCurrent - 1); if (srcTable == null || srcTable.Rows.Count == 0)
return;
DataTable table = LoadPageData();
ChangeDataSoure(table); bool b = pageCurrent >= pageCount ? false : true;
Next.Enabled = b;
End.Enabled = b; First.Enabled = true;
Prev.Enabled = true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
} private void End_Click(object sender, EventArgs e)
{
try
{
pageCurrent = pageCount;
nCurrent = pageSize * (pageCurrent - 1); if (srcTable == null || srcTable.Rows.Count == 0)
return; DataTable table = LoadPageData();
ChangeDataSoure(table); Next.Enabled =false;
End.Enabled = false;
First.Enabled = true;
Prev.Enabled = true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
} private void InitPageSet()
{
pageSize = 30; //设置页面行数
nMax = srcTable.Rows.Count;
pageCount = (nMax / pageSize); //计算出总页数 if ((nMax % pageSize) > 0)
{
pageCount++;
} pageCurrent = 1; //当前页数从1开始
nCurrent = 0; //当前记录数从0开始 First.Enabled =false;
Prev.Enabled = false; bool b = pageCurrent == pageCount ? false : true;
Next.Enabled = b;
End.Enabled = b;
} private DataTable LoadPageData()
{
int nStartPos = 0; //当前页面开始记录行
int nEndPos = 0; //当前页面结束记录行
DataTable dtTemp = null;
if (srcTable == null || srcTable.Rows.Count == 0)
return srcTable;
try
{
dtTemp = srcTable.Clone(); //克隆DataTable结构框架
if (pageCurrent == pageCount)
{
nEndPos = nMax;
}
else
{
nEndPos = pageSize * pageCurrent;
} nStartPos = nCurrent;
//从元数据源复制记录行
for (int i = nStartPos; i < nEndPos; i++)
{
dtTemp.ImportRow(srcTable.Rows[i]);
nCurrent++;
} textEdit1.Text = pageCurrent.ToString();
Page.Text = string.Format("/{0}页", pageCount);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message + "LoadPageData");
}
return dtTemp;
} private void ChangeDataSoure(DataTable table)
{
if (table == null)
return;
gridView1.Columns.Clear();
gridControl1.DataSource = null;
gridControl1.DataSource = table; }