C#数据分页实现(非控件)

1 在窗体上放置三个LinkButton。分别命名为“前一页”、“第  页”、“下一页”

2 绑定数据

3 单击LinkButton实现分页


实现代码如下

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlServerCe;
using System.Linq;
using System.Windows.Forms;
using System.Data.SqlClient;




namespace DataPaging
{
public class Paging
{
#region字段
public static string TableName;         //  要操作的表的名称
        public static int totalPages;           //  总计的页数
        public static int currentPages;         //  当前是第几页
        public static int startIndex;           //  起始索引
        public static int perPageCount = 20;    //  每页要显示的页数
#endregion
#region 方法
        /// <summary>
        /// 绑定选定的表的信息
        /// </summary>
        /// <param name="param_TableName">要绑定的表</param>
        public void BindDataToGridView(string param_TableName,int index)
        {
            int count = SQLCE.SearchInforByParam(strParam1, strParam2, strParam3, strParam4, -1, 
                        perPageCount).Tables[TableName].Rows.Count;
            totalPages = Convert.ToInt32(SQLCE.GetPages(count, 20));
            this.lblTotalPages.Text = String.Format("共 {0} 页", totalPages);
            currentPages = 1;
            this.lblCurrentPages.Text = string.Format("第 {0} 页", currentPages);
            gridControl1.DataSource = SQLCE.GetTableInformation(index,20).Tables[param_TableName].DefaultView;
        }
/// <summary>
/// 从数据源中读取指定条数的数据
/// </summary>
/// <param name="strSql">要执行的SQL语句</param>
/// <returns>返回查询结果DataSet</returns>
public static DataSet GetTableInformation(int i, int j)
{
string strSql = string.Format("select * from {0}", sqlceTableName);
SqlCeConnection conn = new SqlCeConnection(ConnectionString);
SqlCeDataAdapter adapter = new SqlCeDataAdapter(strSql, conn);
DataSet ds = new DataSet();
try
{
adapter.Fill(ds, i, j, string.Format("{0}", sqlceTableName));
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
finally
{
conn.Close();
}
            
return ds;
}
       /// <summary>
        /// 获得分页后共有多少页
        /// </summary>
        /// <param name="totslRows">当前操作总计的记录数</param>
        /// <param name="size">每页要显示的记录数</param>
        /// <returns>返回总计要分几页</returns>
        public static string GetPages(int totslRows,int size)
        {
            int pages = totslRows % size;         //共有多少页
            if (pages == 0)
            {
                pages = totslRows / size;
            }
            else
            {
                pages = totslRows / size + 1;
            }


            return pages.ToString();
        }
        /// <summary>
        /// 根据条件查询信息
        /// </summary>
        /// <param name="strParam1">用户输入的MessageBody值</param>
        /// <param name="strParam2">用户输入的开始时间</param>
        /// <param name="strParam3">用户输入的结束时间</param>
        /// <param name="strParam4">用户输入的mark值</param>
        /// <param name="i">从零开始的记录号</param>
        /// <param name="j">要检索的最大记录数</param>
        /// <returns>返回一个DataSet</returns>
        public static DataSet SearchInforByParam(string strParam1, DateTime strParam2, DateTime strParam3, string strParam4, int i, int j)
        {
            string strSql = "";
            SqlCeConnection conn = new SqlCeConnection(ConnectionString);
            DataSet ds = new DataSet();
            SqlCeDataAdapter adapter;
            SqlCeCommand cmd = new SqlCeCommand();
            try
            {
                //中间这部分代码与分页无关紧要,所以省略
                cmd.CommandText = strSql;
                cmd.Connection = conn;
                adapter = new SqlCeDataAdapter(cmd);
                conn.Open();
                if (i != -1)
                {
                    adapter.Fill(ds, i, j, string.Format("{0}", sqlceTableName));
                }
                else
                {
                    adapter.Fill(ds, string.Format("{0}", sqlceTableName));
                }


            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
            }
            finally
            {
                conn.Close();
            }


            return ds;
        }
#endregion
        #region 事件
        /// <summary>
        /// 单击【上一页】按钮触发的事件处理程序
        /// </summary>
        /// <param name="sender">引发事件对象的引用</param>
        /// <param name="e">该事件传递的参数</param>
        private void linklblLast_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            int m = currentPages - 1;
            if (m < 1)
            {
                currentPages = 1;
                lblCurrentPages.Text = string.Format("第 {0} 页", currentPages);
                MessageBox.Show("已经是第一页!", "提示");
            }
            else
            {
                lblCurrentPages.Text = string.Format("第 {0} 页", m);
                currentPages = m;
            }
            startIndex = currentPages * 20 - 20;
            gridControl1.DataSource = SQLCE.SearchInforByParam(strParam1, strParam2, strParam3, strParam4, startIndex,
                                      perPageCount).Tables[TableName].DefaultView;
        }
        /// <summary>
        /// 单击【下一页】按钮触发的事件处理程序
        /// </summary>
        /// <param name="sender">引发事件对象的引用</param>
        /// <param name="e">该事件传递的参数</param>
        private void linklblNext_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            int m = currentPages + 1;
            startIndex = currentPages * 20;
            if (m > totalPages)
            {
                lblCurrentPages.Text = string.Format("第 {0} 页", totalPages);
                currentPages = totalPages;
                MessageBox.Show("已经是最后一页!", "提示");
            }
            else
            {
                lblCurrentPages.Text = string.Format("第 {0} 页", m);
                currentPages = m;
                gridControl1.DataSource = SQLCE.SearchInforByParam(strParam1, strParam2, strParam3, strParam4, startIndex,
                                          perPageCount).Tables[TableName].DefaultView;
            }
        }
#endregion
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值