具体说了这么多,只贴出相关源码~
using System;
使用 System.Collections.Generic;
使用系统文本;
使用系统数据;
使用 System.Data.OleDb;
使用系统.Web;
/**//// <摘要>
/// 名称:access下的分页方案(仿sql存储过程)
/// 作者:cncxz(虫虫)
/// 博客: http://cncxz.cnblogs.com
/// </摘要>
公共类 AdoPager
{
受保护的字符串 m_ConnString;
受保护的 OleDbConnection m_Conn;
公共 AdoPager()
{
CreateConn(string.Empty);
}
公共 AdoPager(字符串 dbPath)
{
创建Conn(dbPath);
}
私人无效CreateConn(字符串dbPath)
{
if (字符串.IsNullOrEmpty(dbPath))
{
string str = System.Configuration.ConfigurationManager.AppSettings["dbPath"] 作为字符串;
if (字符串.IsNullOrEmpty(str))
str = "~/App_Data/db.mdb";
m_ConnString = string.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;数据源={0}", HttpContext.Current.Server.MapPath(str));
}
别的
m_ConnString = string.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;数据源={0}", dbPath);
m_Conn = new OleDbConnection(m_ConnString);
}
/**//// <摘要>
///打开连接
/// </摘要>
公共无效ConnOpen()
{
if (m_Conn.State != ConnectionState.Open)
m_Conn.Open();
}
/**//// <摘要>
/// 关闭连接
/// </摘要>
公共无效ConnClose()
{
if (m_Conn.State != ConnectionState.Closed)
m_Conn.Close();
}
private string recordID(string query, int passCount)
{
OleDbCommand cmd = new OleDbCommand(query, m_Conn);
字符串结果 = string.Empty;
使用 (IDataReader dr = cmd.ExecuteReader())
{
while (dr.Read())
{
if (passCount < 1)
{
结果 += "," + dr.GetInt32(0);
}
通过次数--;
}
}
返回结果.Substring(1);
}
/**//// <摘要>
/// 获取当前页应该显示的记录,注意:查询中必须包含名为ID的自动编号列,如果不符合你的要求,就修改一下源码吧:)
/// </摘要>
/// <param name="pageIndex">当前页码</param>
/// <param name="pageSize">分页容量</param>
/// <param name="showString">显示的字段</param>
/// <param name="queryString">查询字符串,支持联合查询</param>
/// <param name="whereString">查询条件,若有条件限制则必须以where 开头</param>
/// <param name="orderString">排序规则</param>
/// <param name="pageCount">传出参数:总页数统计</param>
/// <param name="recordCount">传出参数:总记录统计</param>
/// <returns>装载记录的DataTable</returns>
公共DataTable ExecutePager(int pageIndex,int pageSize,字符串showString,字符串queryString,字符串whereString,字符串orderString,out int pageCount,out int recordCount)
{
if (pageIndex < 1) pageIndex = 1;
如果(页面大小 < 1)页面大小 = 10;
if (string.IsNullOrEmpty(showString)) showString = "*";
if (string.IsNullOrEmpty(orderString)) orderString = "ID 描述";
ConnOpen();
string myVw = string.Format(" ( {0} ) tempVw ", queryString);
OleDbCommand cmdCount = new OleDbCommand(string.Format("从 {0} {1} 选择 count(0) 作为 recordCount", myVw, whereString), m_Conn);
recordCount = Convert.ToInt32(cmdCount.ExecuteScalar());
if ((recordCount % pageSize) > 0)
页数=记录数/页大小+1;
别的
页数=记录数/页大小;
OleDbCommand cmdRecord;
if (pageIndex == 1)//第一页
{
cmdRecord = new OleDbCommand(string.Format("按{4}顺序从{2} {3}中选择顶部{0} {1} ", pageSize, showString, myVw, whereString, orderString), m_Conn);
}
else if (pageIndex > pageCount)//超出总页数
{
cmdRecord = new OleDbCommand(string.Format("按 {4} 从 {2} {3} 中选择顶部 {0} {1}", pageSize, showString, myVw, "其中 1=2", orderString), m_Conn) ;
}
别的
{
int pageLowerBound = pageSize * pageIndex;
int pageUpperBound = pageLowerBound - pageSize;
string recordIDs = recordID(string.Format("按 {4} 从 {2} {3} 中选择顶部 {0} {1}", pageLowerBound, "ID", myVw, whereString, orderString), pageUpperBound);
cmdRecord = new OleDbCommand(string.Format("从 {1} 中选择 {0},其中 id 在 ({2}) 中按 {3} 排序", showString, myVw, recordIDs, orderString), m_Conn);
}
OleDbDataAdapter dataAdapter = new OleDbDataAdapter(cmdRecord);
数据表 dt=new 数据表();
dataAdapter.Fill(dt);
ConnClose();
返回dt;
}
}
还有调用示例:
html代码
<%@ 页面语言="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" “ http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ”>
<html xmlns=“ http://www.w3.org/1999/xhtml ”>
<头runat =“服务器”>
<title>分页演示</title>
</头>
<正文>
<form id="form1" runat="服务器">
<div>
<br/>
转到第<asp:TextBox ID="txtPageSize" runat="server" Width="29px">1</asp:TextBox>页<asp:Button ID="btnJump" runat="server" Text="Go" OnClick="btnJump_Click" /><br />
<asp:GridView ID="GridView1" runat="服务器" CellPadding="4" ForeColor="#333333" GridLines="无" 宽度="90%">
<FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<RowStyle BackColor="#EFF3FB" />
<EditRowStyle BackColor="#2461BF" />
<SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
<PagerStyle BackColor="#2461BF" ForeColor="白色" HorizontalAlign="居中" />
<HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<AlternatingRowStyle BackColor="白色"/>
</asp:GridView>
</div>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</形式>
</正文>
</html>
示例代码隐藏代码
使用系统;
使用系统数据;
使用系统配置;
使用系统.Web;
使用 System.Web.Security;
使用 System.Web.UI;
使用 System.Web.UI.WebControls;
使用 System.Web.UI.WebControls.WebParts;
使用 System.Web.UI.HtmlControls;
使用 System.Collections.Generic;
公共部分类 _Default :System.Web.UI.Page
{
私有AdoPager mm_Pager;
受保护的 AdoPager m_Pager
{
得到{
如果(mm_Pager == null)
mm_Pager = new AdoPager();
返回mm_Pager;
}
}
protected void Page_Load(对象发送者,EventArgs e)
{
if(!IsPostBack)
加载数据();
}
私有 int pageIndex = 1;
私有 int pageSize = 20;
私有 int pageCount = -1;
私有 int recordCount = -1;
私有无效加载数据()
{
string strQuery = "从 tableTest 中选择 a.*,b.KindText a 左连接 tableKind b on a.KindCode=b.KindCode ";
string strShow = "ID,主题,种类代码,种类文本";
DataTable dt = m_Pager.ExecutePager(pageIndex, pageSize, strShow, strQuery, "", "ID desc", out pageCount, out recordCount);
GridView1.DataSource = dt;
GridView1.DataBind();
Label1.Text = string.Format("共{0}条记录,每页{1}条,页次{2}/{3}",recordCount,pageSize,pageIndex,pageCount);
}
protected void btnJump_Click(对象发送者,EventArgs e)
{
int.TryParse(txtPageSize.Text, out pageIndex);
加载数据();
}
}
最后附上工程文件下载地址:http: //cncxz.cnblogs.com/archive/2006/06/28/438050.html