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
}
}