如题,,想做一下分页,大家推荐几篇文章,或者例子,,百度我搜过了但期待讲的更好的

解决方案 »

  1.   

    可以尝试着用SELECT语句分段查询。或者读到DATASET 然后分段载入datagirdivew
      

  2.   

    以前写的,有点长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();
            }
        }
    }
      

  3.   

    可以从两种角度考虑问题:
    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;  } 
      

  4.   

    存储过程+rownumber写个分页就OK了