GridControl分页问题

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后,再做处理

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;

  } 

  

原文地址:https://www.cnblogs.com/yuxiuting/p/2811252.html