CSwinform程序分页

/// <summary>
    /// 通用数据分页类
    /// </summary>
    public class SqlDataPager
    {
        #region 一般属性

        /// <summary>
        /// 每页显示的条数
        /// </summary>
        public int PageSize { get; set; }
        /// <summary>
        /// 需要显示的字段(以逗号分隔 )
        /// </summary>
        public string FiledName { get; set; }
        /// <summary>
        /// 表的名称
        /// </summary>
        public string TableName { get; set; }
        /// <summary>
        /// 查询条件
        /// </summary>
        public string Condition { get; set; }
        /// <summary>
        /// 表的主键或唯一键
        /// </summary>
        public string PrimaryKey { get; set; }
        /// <summary>
        /// 当前页码
        /// </summary>
        public int CurrentPage { get; set; }
        /// <summary>
        /// 排序条件
        /// </summary>
        public string Sort { get; set; }

        #endregion

        #region 只读属性

        /// <summary>
        /// 记录的总数【不能直接赋值】
        /// </summary>
        //  public int RecordCount { get; set; }//此中手设计不安全
        private int recordCount;
        public int RecordCount//设置只读属性,外面不能直接赋值
        {
            get { return recordCount; }
        }
        /// <summary>
        /// 总页数
        /// </summary>
        public int TotalPages
        {
            get
            {
                if (recordCount != 0)//如果查询记录总数不为0
                {
                    if (recordCount % PageSize != 0)
                    {
                        return recordCount / PageSize + 1;
                    }
                    else
                    {
                        return recordCount / PageSize;
                    }
                }
                else
                {
                    this.CurrentPage = 1;//如果查询没有数据,则当前页码需要复位
                    return 0;
                }
            }
        }
        #endregion

        //分页查询方法所用的SQL语句
        private string GetPagedSQL()
        {
            //计算需要过滤的总数
            string filterCount = (PageSize * (CurrentPage - 1)).ToString();
            //组合SQL语句
            string sql = "select  Top {0} {1} from {2}  where {3}  and {4} not in  ";
            sql += "(select Top {5}  {6} from {7} where {8} order by {9} ) order by {10};";
            sql += "select count(*) from {11} where {12}";
            sql = string.Format(sql, PageSize, FiledName, TableName, Condition,
                PrimaryKey, filterCount, PrimaryKey, TableName, Condition, Sort, Sort, TableName, Condition);
            return sql;
        }
        /// <summary>
        /// 执行分页查询,返回DataTable
        /// </summary>
        /// <returns></returns>
        public DataTable GetPagedData()
        {
            //【1】执行查询,返回分页后的结果集
            DataSet ds = SQLHelper.GetDataSet(GetPagedSQL());
            //【2】获取满足记录的总数
            this.recordCount = Convert.ToInt32(ds.Tables[1].Rows[0][0]);
            return ds.Tables[0];
        }
    }

  

 public partial class FrmDataPager : Form
    {
        private SqlDataPager objPager = null;
        public FrmDataPager()
        {
            InitializeComponent();
            this.dtpBirthday.Text = "1988-1-1";

            //初始化数据分页对象
            objPager = new SqlDataPager()
            {
                PrimaryKey = "StudentId",//表的主键
                TableName = "Students",
                FiledName = "StudentId,StudentName,Gender,Birthday,PhoneNumber",
                CurrentPage = 1,
                Sort = "StudentId ASC"//排序条件
            };

            //设置默认的显示条数
            this.cboRecordList.SelectedIndex = 1;
            this.dgvStudentList.AutoGenerateColumns = false;

            //禁用相关按钮
            this.btnFirst.Enabled = false;
            this.btnNext.Enabled = false;
            this.btnPre.Enabled = false;
            this.btnLast.Enabled = false;
            this.btnToPage.Enabled = false;
        }
        //执行查询的公共方法
        private void Query()
        {
            //开启所有按钮
            this.btnFirst.Enabled = true;
            this.btnNext.Enabled = true;
            this.btnPre.Enabled = true;
            this.btnLast.Enabled = true;
            this.btnToPage.Enabled = true;

            //【1】设置分页查询的条件
            objPager.Condition = string.Format("Birthday>'{0}'", this.dtpBirthday.Text);
            //【2】设置每页显示的条数
            objPager.PageSize = Convert.ToInt32(this.cboRecordList.Text.Trim());
            //【3】执行查询
            this.dgvStudentList.DataSource = objPager.GetPagedData();
            //【4】显示记录总数、显示总页数、显示当前页码
            this.lblRecordsCount.Text =objPager.RecordCount.ToString ();
            this.lblPageCount.Text = objPager.TotalPages.ToString();
            if (this.lblPageCount.Text == "0")
            {
                this.lblCurrentPage.Text = "0";
            }
            else
            {
                this.lblCurrentPage.Text = objPager.CurrentPage.ToString();
            }

            //禁用按钮的情况
            if (this.lblPageCount.Text == "0" || this.lblPageCount.Text == "1")
            {
                this.btnFirst.Enabled = false;
                this.btnNext.Enabled = false;
                this.btnPre.Enabled = false;
                this.btnLast.Enabled = false;
                this.btnToPage.Enabled = false;
            }
            else
            {
                this.btnToPage.Enabled = true;
            }
        }


        //提交查询
        private void btnQuery_Click(object sender, EventArgs e)
        {
            objPager.CurrentPage = 1;//每次执行查询都要设置为第1页
            Query();
            this.btnPre.Enabled = false;
            this.btnFirst.Enabled = false;
        }
        //第1页
        private void btnFirst_Click(object sender, EventArgs e)
        {
            objPager.CurrentPage = 1;
            Query();
            this.btnPre.Enabled = false;
            this.btnFirst.Enabled = false;
           // btnQuery_Click(null, null);//可以直接调用上面的事件
        }
        //下一页
        private void btnNext_Click(object sender, EventArgs e)
        {
            objPager.CurrentPage += 1;
            Query();
            //当执行到最后一页的时候应该禁用最后一页和下一页的按钮
            if (objPager.CurrentPage == objPager.TotalPages)
            {
                this.btnNext.Enabled = false;
                this.btnLast.Enabled = false;
            }
        }
        //上一页
        private void btnPre_Click(object sender, EventArgs e)
        {
            objPager.CurrentPage -= 1;
            Query();
            if (objPager.CurrentPage == 1)
            {
                this.btnPre.Enabled = false;
                this.btnFirst.Enabled = false;
            }
        }
        //最后一页
        private void btnLast_Click(object sender, EventArgs e)
        {
            objPager.CurrentPage = objPager.TotalPages;
            Query();
            this.btnNext.Enabled = false;
            this.btnLast.Enabled = false;
        }
        //跳转到
        private void btnToPage_Click(object sender, EventArgs e)
        {
            if (this.txtToPage.Text.Trim().Length == 0)
            {
                MessageBox.Show("请输入要跳转的页码!","信息提示");
                this.txtToPage.Focus();
                return;
            }
            //使用正则表达式验证必须为大于0的正整数...
            int toPage = Convert.ToInt32(this.txtToPage.Text.Trim());
            if (toPage > objPager.TotalPages)
            {
                MessageBox.Show("跳转的页数不能大于数据总页数!","信息提示");
                this.txtToPage.Focus();
                this.txtToPage.SelectAll();
                return;
            }
            //开始跳转页数
            objPager.CurrentPage = toPage;
            Query();
            if (objPager.CurrentPage == 1)
            {
                this.btnPre.Enabled = false;
                this.btnFirst.Enabled = false;
            }
            else if (objPager.CurrentPage == objPager.TotalPages)
            {
                this.btnNext.Enabled = false;
                this.btnLast.Enabled = false;
            }
        }
        //关闭窗口
        private void btnClose_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}

  带参数的分装:

 public class SqlDataPager
    {
        public SqlDataPager() { }
        /// <summary>
        /// 每页显示的条数
        /// </summary>
        public int PageSize { get; set; }
        /// <summary>
        /// 总页数
        /// </summary>      
        public int TotalPages
        {
            get
            {
                if (RecordsCount != 0)
                {
                    if (RecordsCount % PageSize != 0)
                        return RecordsCount / PageSize + 1;
                    else
                        return RecordsCount / PageSize;
                }
                else
                {
                    this.CurrentPageIndex = 1;//设置默认页
                    return 0;
                }
            }
        }
        /// <summary>
        /// 记录总数
        /// </summary>
        public int RecordsCount { get; set; }
        /// <summary>
        /// 当前页的页码
        /// </summary>
        public int CurrentPageIndex { get; set; }
        /// <summary>
        /// 获取分页的SQL语句
        /// </summary>
        private string GetPagedSQL()
        {           
            //组合SQL语句
            string sql =
                     "Select Top  (@PageSize) StudentId,StudentName,Gender,Birthday,PhoneNumber from Students " +
                      "where  Birthday>@Birthday and StudentId not in" +
                     " (Select Top  (@filterCount) StudentId from Students where  Birthday>@Birthday order by StudentId ASC)" +
                     "order by StudentId ASC;" +
                     "select count(*) from Students where  Birthday>@Birthday";          
            return sql;
        }
        /// <summary>
        /// 执行分页查询,返回DataTable
        /// </summary>
        /// <returns></returns>
        public DataTable GetPagedData(string birthday)
        {    
            //封装查询需要的参数
            SqlParameter[] param = new SqlParameter[]
            {
                  new SqlParameter("@PageSize",this.PageSize),
                  new SqlParameter("@filterCount",(PageSize * (CurrentPageIndex - 1))),
                  new SqlParameter("@Birthday",birthday)
            };
            //执行查询
            DataSet ds = SQLHelper.GetDataSet(this.GetPagedSQL(), param);
            //获取满足条件的记录总数
            this.RecordsCount = Convert.ToInt32(ds.Tables[1].Rows[0][0]);
            //返回数据列表
            return ds.Tables[0];
        }
    }

  

 private static string connString = "Server=.;DataBase=DataPagerDB;Uid=sa;Pwd=password01!";

        /// <summary>
        /// 执行Insert、Update、Delete操作
        /// </summary>
        /// <param name="sql"></param>
        /// <returns></returns>
        public static int Update(string sql)
        {
            SqlConnection conn = new SqlConnection(connString);
            SqlCommand cmd = new SqlCommand(sql, conn);
            try
            {
                conn.Open();
                return cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conn.Close();
            }
        }
        /// <summary>
        /// 执行返回单一结果的查询
        /// </summary>
        /// <param name="sql"></param>
        /// <returns></returns>
        public static object GetSingleResult(string sql)
        {
            SqlConnection conn = new SqlConnection(connString);
            SqlCommand cmd = new SqlCommand(sql, conn);
            try
            {
                conn.Open();
                return cmd.ExecuteScalar();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conn.Close();
            }
        }
        /// <summary>
        /// 返回只读数据集的查询
        /// </summary>
        /// <param name="sql"></param>
        /// <returns></returns>
        public static SqlDataReader GetReader(string sql)
        {
            SqlConnection conn = new SqlConnection(connString);
            SqlCommand cmd = new SqlCommand(sql, conn);
            try
            {
                conn.Open();
                return cmd.ExecuteReader(CommandBehavior.CloseConnection);
            }
            catch (Exception ex)
            {
                conn.Close();
                throw ex;
            }
        }
        /// <summary>
        /// 返回DataSet数据集
        /// </summary>
        /// <param name="sql"></param>
        /// <returns></returns>
        public static DataSet GetDataSet(string sql)
        {
            SqlConnection conn = new SqlConnection(connString);
            SqlCommand cmd = new SqlCommand(sql, conn);
            //创建数据适配器(数据传输的载体)
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            //创建一个数据集对象(内存数据库)
            DataSet ds = new DataSet();
            try
            {
                conn.Open();
                da.Fill(ds);//调用适配器的Fill方法,将数据从数据库端,传送到客户端的数据集对象中
                return ds;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conn.Close();
            }
        }
        public static DataSet GetDataSet(string sql,SqlParameter[] param)
        {
            SqlConnection conn = new SqlConnection(connString);
            SqlCommand cmd = new SqlCommand(sql, conn);
            cmd.Parameters.AddRange(param);           
            SqlDataAdapter da = new SqlDataAdapter(cmd);            
            DataSet ds = new DataSet();
            try
            {
                conn.Open();
                da.Fill(ds);
                return ds;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conn.Close();
            }
        }

  存储过程的分页:

use DataPagerDB
go
if exists(select * from sysobjects where name='usp_DataPager')
drop procedure usp_DataPager
go
create procedure usp_DataPager  
 @PageSize int,--每页显示多少条
 @FilterCount int, --过滤的条数 
 @Birthday varchar(20) --查询条件参数
as 
	Select Top  (@PageSize) StudentId,StudentName,Gender,Birthday,PhoneNumber from Students 
	where  Birthday>@Birthday and StudentId not in
	 (Select Top  (@FilterCount) StudentId from Students where  Birthday>@Birthday order by StudentId ASC)
	order by StudentId ASC
	--查询满足记录条数 
	select  count(*) from Students where  Birthday>@Birthday 
go

  

 /// <summary>
    /// 通用数据分页类
    /// </summary>
    public class SqlDataPager
    {
        public SqlDataPager() { }
        /// <summary>
        /// 每页显示的条数
        /// </summary>
        public int PageSize { get; set; }
        /// <summary>
        /// 总页数
        /// </summary>      
        public int TotalPages
        {
            get
            {
                if (RecordsCount != 0)
                {
                    if (RecordsCount % PageSize != 0)
                        return RecordsCount / PageSize + 1;
                    else
                        return RecordsCount / PageSize;
                }
                else
                {
                    this.CurrentPageIndex = 1;//设置默认页
                    return 0;
                }
            }
        }
        /// <summary>
        /// 记录总数
        /// </summary>
        public int RecordsCount { get; set; }
        /// <summary>
        /// 当前页的页码
        /// </summary>
        public int CurrentPageIndex { get; set; }
      
        /// <summary>
        /// 执行分页查询,返回DataTable
        /// </summary>
        /// <returns></returns>
        public DataTable GetPagedData(string birthday)
        {    
            //封装查询需要的参数
            SqlParameter[] param = new SqlParameter[]
            {
                  new SqlParameter("@PageSize",this.PageSize),
                  new SqlParameter("@filterCount",(PageSize * (CurrentPageIndex - 1))),
                  new SqlParameter("@Birthday",birthday)
            };
            //执行查询
            DataSet ds = SQLHelper.GetDataSet("usp_DataPager", param);
            //获取满足条件的记录总数
            this.RecordsCount = Convert.ToInt32(ds.Tables[1].Rows[0][0]);
            //返回数据列表
            return ds.Tables[0];
        }
    }

  

     private static string connString = "Server=.;DataBase=DataPagerDB;Uid=sa;Pwd=password01!";

        /// <summary>
        /// 执行Insert、Update、Delete操作
        /// </summary>
        /// <param name="sql"></param>
        /// <returns></returns>
        public static int Update(string sql)
        {
            SqlConnection conn = new SqlConnection(connString);
            SqlCommand cmd = new SqlCommand(sql, conn);
            try
            {
                conn.Open();
                return cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conn.Close();
            }
        }
        /// <summary>
        /// 执行返回单一结果的查询
        /// </summary>
        /// <param name="sql"></param>
        /// <returns></returns>
        public static object GetSingleResult(string sql)
        {
            SqlConnection conn = new SqlConnection(connString);
            SqlCommand cmd = new SqlCommand(sql, conn);
            try
            {
                conn.Open();
                return cmd.ExecuteScalar();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conn.Close();
            }
        }
        /// <summary>
        /// 返回只读数据集的查询
        /// </summary>
        /// <param name="sql"></param>
        /// <returns></returns>
        public static SqlDataReader GetReader(string sql)
        {
            SqlConnection conn = new SqlConnection(connString);
            SqlCommand cmd = new SqlCommand(sql, conn);
            try
            {
                conn.Open();
                return cmd.ExecuteReader(CommandBehavior.CloseConnection);
            }
            catch (Exception ex)
            {
                conn.Close();
                throw ex;
            }
        }
        /// <summary>
        /// 返回DataSet数据集
        /// </summary>
        /// <param name="sql"></param>
        /// <returns></returns>
        public static DataSet GetDataSet(string sql)
        {
            SqlConnection conn = new SqlConnection(connString);
            SqlCommand cmd = new SqlCommand(sql, conn);
            //创建数据适配器(数据传输的载体)
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            //创建一个数据集对象(内存数据库)
            DataSet ds = new DataSet();
            try
            {
                conn.Open();
                da.Fill(ds);//调用适配器的Fill方法,将数据从数据库端,传送到客户端的数据集对象中
                return ds;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conn.Close();
            }
        }
        public static DataSet GetDataSet(string procName,SqlParameter[] param)
        {
            SqlConnection conn = new SqlConnection(connString);
            SqlCommand cmd = new SqlCommand(procName, conn);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddRange(param);           
            SqlDataAdapter da = new SqlDataAdapter(cmd);            
            DataSet ds = new DataSet();
            try
            {
                conn.Open();
                da.Fill(ds);
                return ds;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conn.Close();
            }
        }
    }

  

原文地址:https://www.cnblogs.com/sunliyuan/p/12274271.html