网页设计:AspNetPager控件+repeater+存储过程实现高效分页

1、  在数据库中建立分页存储过程

-- =============================================
-- Description: 分页,用到了ROW_NUMBER()
-- =============================================
create PROCEDURE [dbo].[proc_SplitPage]
@tblName varchar(255), -- 表名
@strFields varchar(1000) = '*', -- 需要返回的列,默认*
@strOrder varchar(255)='', -- 排序的字段名,必填
@strOrderType varchar(10)='ASC', -- 排序的方式,默认ASC
@PageSize int = 10, -- 页尺寸,默认10
@PageIndex int = 1, -- 页码,默认1
@strWhere varchar(1500) = '' -- 查询条件 (注意: 不要加 where)
AS

declare @strSQL varchar(5000)

if @strWhere !=''
set @strWhere=' where '+@strWhere

set @strSQL=
'SELECT * FROM ('+
'SELECT ROW_NUMBER() OVER (ORDER BY '+@strOrder+' '+@strOrderType+') AS pos,'+@strFields+' '+
'FROM '+@tblName+' '+@strWhere+
') AS sp WHERE pos BETWEEN '+str((@PageIndex-1)*@PageSize+1)+' AND '+str(@PageIndex*@PageSize)

exec (@strSQL)


2、  在DAO代码中加上获取分页数据的方法和计算记录数的方法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;

namespace repeaterDAO
{
public class MessageDAO
{
private SQLHelper sqlHelper = null;
private SqlCommand cmd = null;

public MessageDAO()
{
sqlHelper = new SQLHelper();     /* SQLHelper 助手类*/
}

     /* 
     *  获取分页数据
     * tblName:表名 strOrder:以哪个字段排序 strOrderType:数据显示顺序类型如desc 
     * PageSize:一页显示的数据数目 PageIndex当前页码索引 strWhere:查询条件  
      */
        public DataTable GetList(string tblName, string strOrder, string strOrderType, int PageSize, int PageIndex, string strWhere)
{
DataTable dt = new DataTable();
string cmdText = "proc_SplitPage";
SqlParameter[] paras = new SqlParameter[] {
new SqlParameter("@tblName", tblName),
new SqlParameter("@strOrder", strOrder),
new SqlParameter("@strOrderType", strOrderType),
new SqlParameter("@PageSize", PageSize),
new SqlParameter("@PageIndex", PageIndex),
new SqlParameter("@strWhere", strWhere)
};
dt = sqlHelper.ExecuteQuery(cmdText, paras, CommandType.StoredProcedure);
return dt;
}

     /* 获取信息总数 */
public int CalRecordCount()
{
int res;
string cmdText = "select count(1) from tb_message";
using (cmd = new SqlCommand(cmdText, sqlHelper.GetConn()))
{
res = int.Parse(cmd.ExecuteScalar().ToString());
}
return res;
}
}
}


3、  在页面中加入anp控件并设置显示的样式

    1th.增加anp控件方法: vs20008/vs2010 左侧->工具箱->常规->选项->浏览->选择AspNetPage.dll

    2nd.把控件拉入前台页面如:default.aspx 想要显示AspNetPage处。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication2._Default" %>

<%@ Register Assembly="AspNetPager" Namespace="Wuqi.Webdiyer" TagPrefix="webdiyer" %>

<!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">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Repeater ID="rep" runat="server">
<HeaderTemplate>
<table>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<%# Eval("m_Content") %> <!-- 数据列绑定 -->
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
<webdiyer:AspNetPager ID="anp" runat="server" onpagechanged="anp_PageChanged">  <!-- AspNetPage控件 -->
        </webdiyer:AspNetPager>
</div>
</form>
</body>
</html>

 

4、  在后台的page_load事件中先设置anp控件的总记录数,再绑定rep控件,最后设定分页事件。

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using repeaterDAO;
namespace WebApplication2
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
RepBind();
anp.RecordCount = new MessageDAO().CalRecordCount();
}
}

     /* repeater控件绑定方法 */
private void RepBind()
{
rep.DataSource = new MessageDAO().GetList("tb_message", "m_ID", "desc", anp.PageSize, anp.CurrentPageIndex, GetCond());
rep.DataBind();
}
     
     /* 设置查询条件 */
private string GetCond()
{
string cond = "";
return cond;
}
      
     /* 页码改变时重新绑定repeater控件 */
protected void anp_PageChanged(object sender, EventArgs e)
{
RepBind();
}
}
}



示例及以上所需组件下载地址(地址过期可联系QQ:99329272):

http://115.com/file/c2brudrm#repeater+_aspnetpage+存储过程分页.rar

posted @ 2011-12-17 11:19  ITMelody  阅读(595)  评论(0编辑  收藏  举报