Repeater之非常好的数据分页

分页控件源代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections;

#region Assembly Resource Attribute
[assembly: System.Web.UI.WebResource("WebControlLibrary.Js.AjaxHelper.js", "text/javascript")]
[assembly: System.Web.UI.WebResource("WebControlLibrary.img.bg_pager.png", "image/gif")]
#endregion

namespace WebControlLibrary
{
    ///


    /// Repeater分页控件可进行Ajax分页(但Ajax分页不能传参数)
    ///

    [DefaultProperty("Text")]
    [ToolboxData("<{0}:RepeaterPages runat=server>")]
    public class RepeaterPages : WebControlLibrary.Repeater
    {
        //
        /// 构造函数
        ///

        public RepeaterPages()
            : base()
        {

        }

        ///


        /// 下一页分页文本内容
        ///

        private string _NextPage = ">";

        ///


        /// 下一页标记
        ///

        [Bindable(false), Description("下一页标记所显示的文本内容")]
        public string NextPage
        {
            get { return _NextPage; }

            set { _NextPage = value; }
        }

        ///


        /// 下一页标记
        ///

        private string _LastPage = "<";     

        ///


        /// 上一页标记
        ///

        [Bindable(false), Description("上一页标记所显示的文本内容")]
        public string LastPage
        {
            get { return _LastPage; }

            set { _LastPage = value; }
        }

        ///


        /// 总记录数属性
        ///

        private int _RecordCount;

        ///


        /// 页面分页大小属性
        ///

        private int _PageSize;

        ///


        /// 当前页数
        ///

        private int _CurrentPage;

        ///


        /// 返回总页面
        ///

        private int _AllPages;

        ///


        /// 页面地址
        ///

        private string _Url;

        ///


        /// 传入Sql语句
        ///

        private string _SqlString;

        ///


        /// 每页显示页码数
        ///

        private int _PageNumberCount;

        ///


        /// 数据库中显示的字段列表
        ///

        private string _ShowTableCollName;

        ///


        /// 记录数属性
        ///

        [Bindable(true), Category("Appearance"), DefaultValue("0")]
        private int RecordCount
        {
            get
            {
                int IntTempValue = 0;
                if (Int32.TryParse(Sql_Function.SqlDb.RecordCounts(SqlString), out IntTempValue))
                    return IntTempValue;
                else
                    return 0;
            }
            set
            {
                _RecordCount = value;
            }
        }

        ///


        /// 每页分页大小属性
        ///

        [Bindable(true), Category("Appearance"), DefaultValue("50"), Description("每页分页大小属性")]
        public int PageSize
        {
            get
            {
                if (_PageSize == 0 || _PageSize.ToString() == "" || _PageSize > 200)
                {
                    return 50;
                }
                else if (Sql_Function.PublicFunction.isNumber(_PageSize.ToString()))
                {
                    return 50;
                }
                else if (_PageSize <= 0)
                {
                    return 50;
                }
                else if (_PageSize > 200)
                {
                    return 50;
                }
                else
                {
                    return _PageSize;
                }
            }

            set { _PageSize = value; }
        }

        ///


        /// 每页显示的页码个数
        ///

        [Bindable(true), Category("Appearance"), DefaultValue("5"), Description("每页显示的页码个数")]
        public int PageNumberCount
        {
            get
            {
                if (_PageNumberCount == 0 || _PageNumberCount.ToString() == "" || _PageNumberCount > 30)
                {
                    return 5;
                }
                else if (Sql_Function.PublicFunction.isNumber(_PageNumberCount.ToString()))
                {
                    return 5;
                }
                else if (_PageNumberCount <= 0)
                {
                    return 5;
                }
                else if (_PageNumberCount > 30)
                {
                    return 5;
                }
                else
                {
                    return _PageNumberCount;
                }
            }

            set { _PageNumberCount = value; }
        }
    
        ///


        /// 返回总页数
        ///

        private int AllPages
        {
            get
            {
                int totalpage;

                if (RecordCount / PageSize == 0)
                {
                    totalpage = RecordCount / PageSize;
                }
                else
                {
                    totalpage = RecordCount / PageSize + 1;
                }

                return totalpage;
            }

            set { _AllPages = value; }
        }

        ///


        /// 当前页数
        ///

        private int CurrentPage
        {
            get
            {
                string RequestCurrentPage = System.Web.HttpContext.Current.Request["page"];

                #region 计算当前页数

                int result_currentpage = 1;

                if (RequestCurrentPage == null)///指地址栏中没有PAGE字符
                {
                    result_currentpage = 1;
                }

                if (RequestCurrentPage != null)
                {

                    if (RequestCurrentPage.Length > 10 || RequestCurrentPage.Length < 1)///防止Convert.ToInt32抛出异常或者防止地址栏所得到的page=这样的值
                    {
                        result_currentpage = 1;
                    }
                    else///是数值
                    {
                        if (Sql_Function.PublicFunction.isNumber(RequestCurrentPage))// 判断是否为数值
                        {
                            result_currentpage = 1;
                        }
                        else
                        {
                            if (Convert.ToInt32(RequestCurrentPage) > AllPages)///是否大于总页数
                            {
                                result_currentpage = 1;
                            }
                            else
                            {
                                if (Convert.ToInt32(RequestCurrentPage) <= 1)///是否小于页数1
                                {
                                    result_currentpage = 1;
                                }
                                else
                                {
                                    result_currentpage = Convert.ToInt32(RequestCurrentPage);
                                }
                            }
                        }
                    }
                }
                else
                {
                    result_currentpage = 1;
                }

                return result_currentpage;

                #endregion

            }

            set { _CurrentPage = value; }
        }

        ///


        /// 用于分页所显示URL参数链接(完整的URL参数)
        ///

        [Bindable(false), Description("用于分页所显示URL参数链接(完整的URL参数)")]
        public string Url
        {
            get
            {
                if (_Url == null || _Url.ToString() == "")
                {
                    return "?";
                }
                else
                {
                    if (_Url.IndexOf("?") == -1)
                    {
                        string a = "?";

                        a = a + _Url;

                        return a;
                    }
                    else if (Convert.ToInt32(StringFindCount(_Url, "?")) > 1)//如果含有多个?号
                    {
                        return "?";
                    }
                    else
                    {
                        return _Url;
                    }

                }
            }

            set { _Url = value; }
        }

        ///


        /// 传入Sql语句
        ///

        [Bindable(false), Description("传入统计记录总数的Sql语句 例如:select count(id) from tablename")]
        public string SqlString
        {
            get
            {
                if (_SqlString == null || _SqlString.ToString() == "" || _SqlString.Length < 15)
                {
                    return "";
                }
                else
                {
                    return _SqlString;
                }
            }

            set { _SqlString = value; }
        }

        ///


        /// 数据库中显示的字段列表
        ///

        [Bindable(false), Description("数据库中显示的字段列表 多个字段中间用逗号隔开")]
        public string ShowTableCollName
        {
            get
            {
                if (_ShowTableCollName == null || _ShowTableCollName == "")
                {
                    return "*";
                }
                else
                {
                    return _ShowTableCollName;
                }
            }

            set { _ShowTableCollName = value; }
        }

        ///


        /// 分页信息前和尾所包含的HTML代码
        ///

        private string _PageBeforeHtml;

        ///


        /// 分页信息前和尾所包含的HTML代码
        ///

        private string _PageLastHtml;

        ///


        /// 分页信息前和尾所包含的HTML代码
        ///

        [Bindable(false), Description("分页信息前和尾所包含的HTML代码 ")]
        public string PageBeforeHtml
        {
            get { return _PageBeforeHtml; }

            set { _PageBeforeHtml = value; }
        }

        ///


        /// 分页信息前和尾所包含的HTML代码
        ///

        [Bindable(false), Description("分页信息前和尾所包含的HTML代码 ")]
        public string PageLastHtml
        {
            get { return _PageLastHtml; }

            set { _PageLastHtml = value; }
        }

        ///


        /// 调用的样式
        ///

        private string _Css = "";

        ///


        /// 调用的样式
        ///

        [Bindable(false), Category("Behavior"), DefaultValue("默认样式"), TypeConverter(typeof(WebPageCssSelect)), Description("分页样式")]
        public string Css
        {
            get { return _Css; }

            set { _Css = value; }
        }

        ///


        /// 是否为分页加上快捷输入框输入数值回车导航分页
        ///

        private bool _SelectPage = true;

        ///


        /// 是否为分页加上快捷输入框输入数值回车导航分页
        ///

        [Bindable(false), Description("是否为分页加上快捷输入框输入数值回车导航分页")]
        public bool SelectPage
        {
            get { return _SelectPage; }

            set { _SelectPage = value; }
        }

        ///


        /// 分页显示对齐方式
        ///

        private string _AlignSorts = "right";

        ///


        /// 分页显示对齐方式
        ///

        [Bindable(false), DefaultValue("right"), TypeConverter(typeof(WebPageAlign)), Description("分页显示对齐方式")]
        public string AlignSorts
        {
            get { return _AlignSorts; }

            set { _AlignSorts = value; }
        }

        ///


        /// 分页Js分页函数调用名称
        ///

        private string _JsFunctionName = "_doPostBack";

        ///


        /// 分页Js分页函数调用名称
        ///

        [Bindable(false), Description("分页Js分页函数调用名称")]
        public string JsFunctionName
        {
            get
            {
                if (_JsFunctionName == null || _JsFunctionName.Replace("'", "").Replace("/"", "") == "")
                {
                    return "_doPostBack";
                }
                else
                {
                    return _JsFunctionName;
                }
            }             

            set { _JsFunctionName = value; }
        }

        ///


        /// 是否启用简洁分页样式
        ///

        private bool _AutoPageConcise = false;

        ///


        /// 是否启用简洁分页样式
        ///

        [Bindable(false), Description("是否启用简洁分页样式")]
        public bool AutoPageConcise
        {
            set { _AutoPageConcise = value; }

            get { return _AutoPageConcise; }
        }

        ///


        /// 是否允许无刷新调用分页
        ///

        private bool _BoolIsAutoAjaxPage = false;

        ///


        /// 是否允许无刷新调用分页
        ///

        [Bindable(false), Description("是否允许无刷新调用分页")]
        public bool BoolIsAutoAjaxPage
        {
            get { return _BoolIsAutoAjaxPage; }

            set { _BoolIsAutoAjaxPage = value; }
        }

        ///


        /// 无刷新调用的页面或自定义控件页面ascx分页信息页 完整路径
        ///

        private string _AutoAjaxPageUrl = "";

        ///


        /// 无刷新调用的页面或自定义控件页面ascx分页信息页 完整路径
        ///

        [Bindable(false), Description("无刷新调用的页面或自定义控件页面ascx分页信息页 完整路径")]
        public string AutoAjaxPageUrl
        {
            get { return _AutoAjaxPageUrl; }

            set { _AutoAjaxPageUrl = value; }
        }

        ///


        /// 用于无刷新中间级异步调用分页信息页面的中间层页面地址
        ///

        private string _AutoAjaxReturnPageUrl = "";

        ///


        /// 用于无刷新中间级异步调用分页信息页面的中间层页面地址
        ///

        [Bindable(false), Description("用于无刷新中间级异步调用分页信息页面的中间层页面地址")]
        public string AutoAjaxReturnPageUrl
        {
            get { return _AutoAjaxReturnPageUrl; }

            set { _AutoAjaxReturnPageUrl = value; }
        }

        ///


        /// 无刷新调用的页面所返回的控件ID
        ///

        private string _AutoAjaxPageWebControl = "";

        ///


        /// 无刷新调用的页面所返回的控件ID
        ///

        [Bindable(false), Description("无刷新调用的页面所返回的控件ID")]
        public string AutoAjaxPageWebControl
        {
            get { return _AutoAjaxPageWebControl; }

            set { _AutoAjaxPageWebControl = value; }
        }

        ///


        /// 输出html,在浏览器中显示控件
        ///

        /// 要写出到的 HTML 编写器
        protected override void Render(HtmlTextWriter output)
        {
            base.Render(output);

            if (!this.Page.ClientScript.IsClientScriptBlockRegistered(this.Page.GetType(), "AjaxPageJs"))
            {
                output.Write("/n");

                output.Write("/n");

                this.Page.ClientScript.RegisterClientScriptBlock(this.Page.GetType(), "AjaxPageJs", "");
            }

            #region  输出分页链接样式

            string CssInfo = WebPageCss.CssStyle(Css, AlignSorts, this.Page.ClientScript.GetWebResourceUrl(this.GetType(), "WebControlLibrary.img.bg_pager.png"));

            output.WriteLine(CssInfo);
          
            #endregion

            #region 输出分页Js

            output.WriteLine("/n");

            #endregion          

            if (!DesignMode)
            {
                string Result = Pagination();

                if (RecordCount > PageSize)
                {
                    output.WriteLine(Result);
                }
            }
        }

        ///


        /// 调用存储过程返回数据集
        ///

        /// 是否启用存储过程调用数据 true:启用
        /// 存储过程名
        /// 表名
        /// 表中该列来进行分页(必须是唯一性的字符,比如标识种子
        /// 完整的排序字段值 不需要order by
        /// 存储过程分页中的条件 不需要Where
        ///
        public System.Data.DataTable getObjectRecordCount(bool IsProc, string PorcedureName, string TableName, string TableCollName, string OrderBy, string Where)
        {
            System.Data.DataTable DataTables = new System.Data.DataTable();

            if (IsProc)
            {
                DataTables = Sql_Function.SqlDb.ReturnDataTable("" + PorcedureName + " '" + TableName + "','" + TableCollName + "'," + CurrentPage + "," + PageSize + ",'" + ShowTableCollName.Replace("'", "") + "','" + OrderBy + "','" + Where + "'");
            }
            else//普通分页
            {
                string StrSql = string.Format("select {0} from {1} where {2} is not null", ShowTableCollName, TableName, TableCollName);

                if (Where != null && Where.Trim().Replace("'", "") != "")
                {
                    StrSql += " and " + Where.Trim().Replace("'", "");
                }

                if (OrderBy != null && OrderBy.Trim().Replace("'", "") != "")
                {
                    StrSql += " order by " + OrderBy.Trim().Replace("'", "");
                }

                try
                {
                    DataTables = Sql_Function.SqlDb.ReturnDataTablePage(StrSql, CurrentPage, PageSize, "ReturnDataTable");
                }
                catch
                {
                    DataTables = null;
                }
            }

            return DataTables;
        }

        ///


        /// 分页函数
        ///

        /// 总记录数
        /// Url地址
        /// 当前页数
        public string Pagination()
        {
            int allpage = 0;//总页数

            int next = 0;//下页标记

            int pre = 0;//上一页标记

            int startcount = 0;//开始页码数

            int endcount = 0;//结束页码数

            string pagestr = "";//返回分页结果集

            if (CurrentPage < 1) { CurrentPage = 1; }

            //计算总页数
            if (PageSize != 0)
            {
                allpage = (RecordCount / PageSize);

                allpage = ((RecordCount % PageSize) != 0 ? allpage + 1 : allpage);

                allpage = (allpage == 0 ? 1 : allpage);
            }

            next = CurrentPage + 1;

            pre = CurrentPage - 1;

            if (PageNumberCount % 2 == 0)
            {
                startcount = (CurrentPage + PageNumberCount / 2) > allpage ? allpage - (PageNumberCount - 1) : CurrentPage - (PageNumberCount / 2 - 1);

                endcount = CurrentPage < PageNumberCount / 2 ? PageNumberCount : CurrentPage + PageNumberCount / 2;

            }
            else
            {
                startcount = (CurrentPage + PageNumberCount / 2) > allpage ? allpage - (PageNumberCount - 1) : CurrentPage - (PageNumberCount / 2 - 1);

                endcount = CurrentPage < PageNumberCount / 2 ? PageNumberCount : CurrentPage + PageNumberCount / 2 + 1;

            }

            if (startcount < 1) { startcount = 1; } //为了避免输出的时候产生负数,设置如果小于1就从序号1开始

            if (allpage < endcount) { endcount = allpage; }//页码+5的可能性就会产生最终输出序号大于总页码,那么就要将其控制在页码数之内

            pagestr = "/n" + PageBeforeHtml + "/n";

            pagestr += "

/n";         

            if (!AutoPageConcise)
            {
                pagestr += "  页次:" + CurrentPage + "/" + allpage + " /n";

                pagestr += "每页" + PageSize.ToString() + "/n";

                pagestr += "  记录数" + RecordCount + "   /n  ";
            }

            #region 上一页标记

            //pagestr += CurrentPage > 1 ? "1.. " + LastPage + "" : "" + LastPage + "";
            pagestr += CurrentPage > 1 ? "1.. " + LastPage + "" : "" + LastPage + "";

            #endregion

            #region 中间页处理,这个增加时间复杂度,减小空间复杂度

            中间页处理,这个增加时间复杂度,减小空间复杂度
            for (int i = startcount; i <= endcount; i++)
            {
                //pagestr += CurrentPage == i ? " " + i + "" : " " + i + "";
                pagestr += CurrentPage == i ? " /n" + i + "" : " /n" + i + "";
            }

            #endregion

            #region 下一页标记

            //pagestr += CurrentPage != allpage ? " " + NextPage + " .." + allpage + "" : "" + NextPage + "";

            pagestr += CurrentPage != allpage ? " " + NextPage + " .." + allpage + "" : "" + NextPage + "";

            #endregion

            if (SelectPage)
            {
                pagestr += " /n";

                pagestr += "/n/n";
            }

            pagestr += "/n

/n" + PageLastHtml + "/n";

            return pagestr;
        }

        ///


        /// 跳转
        ///

        /// 总页数
        /// 当前页数
        /// 传入链接地址
        ///
        private string SelectPages(int PageCount, int CurrentPage, string Url)
        {
            string ResultPage = "";

            for (int k = 1; k <= PageCount; k++)
            {
                if (k == CurrentPage)
                {
                    ResultPage += "";
                }
                else
                {
                    ResultPage += "";
                }
            }

            return ResultPage;
        }

        ///


        /// 判断某一字符出现的次数
        ///

        /// 目标字符串
        /// 要查找的字符   只能为字符,不能为字符串,如果为字符串,则自动洁取第一个字符为默认的字符
        ///
        private string StringFindCount(string str, string split)
        {
            int c1 = 0;

            string a = split;

            if (split == null || split.ToString() == "" || split.ToString().Trim().Length < 1)
            {
                a = " ";
            }
            else if (split.ToString().Trim().Length > 1)
            {
                a = a.Substring(0, 1);
            }
            else
            {

            }
            if (str == null || str.ToString().Trim().Replace("'", "") == "" || str.ToString().Trim().Replace("'", "").Length < 1)
            {
                c1 = 0;
            }
            else
            {
                for (int i = 0; i < str.Length; i++)
                {
                    if (str[i] == char.Parse(a))
                    {
                        c1++;
                    }
                }
            }
            return c1.ToString();
        }
    }

    ///


    /// 分页样式选择器
    ///

    public class WebPageCssSelect : StringConverter
    {
        ///
        /// 构造函数
        ///

        public WebPageCssSelect() { }

        ///


        /// 分页样式选择器编辑属性
        ///

        ///
        ///
        public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
        {
            return true;
        }

        ///


        /// 获取标准值列表
        ///

        ///
        ///
        public override System.ComponentModel.TypeConverter.StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
        {
            ArrayList CssArray = new ArrayList();
            CssArray.Add("Digg Style");
            CssArray.Add("Yahoo Style");
            CssArray.Add("New Yahoo! Style");
            CssArray.Add("Meneame Style");
            CssArray.Add("Flickr Style");
            CssArray.Add("Sabros.us Style");
            CssArray.Add("Green Style");
            CssArray.Add("Gray Style");
            CssArray.Add("Black Style");
            CssArray.Add("Mis Algoritmos Style");
            CssArray.Add("Black-Red Style");
            CssArray.Add("Gray Style 2");
            CssArray.Add("Yellow Style");
            CssArray.Add("jogger Style");
            CssArray.Add("512megas Style");
            CssArray.Add("Technorati Style");
            CssArray.Add("YouTube Style");
            CssArray.Add("MSDN Search Style");
            CssArray.Add("Msn Gray Style");
            CssArray.Add("Badoo");
            CssArray.Add("Blue Style");
            CssArray.Add("Green-Black Style");
            CssArray.Add("viciao Style");
            CssArray.Add("默认样式");
            return new StandardValuesCollection(CssArray);

        }

        ///


        /// return ture的话只能选,return flase可选可填
        ///

        ///
        ///
        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
        {
            return false;
        }
    }

    ///


    /// 样式对齐方式
    ///

    public class WebPageAlign : StringConverter
    {
         ///
        /// 构造函数
        ///

        public WebPageAlign() { }

        ///


        /// 分页样式选择器编辑属性
        ///

        ///
        ///
        public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
        {
            return true;
        }

        ///


        /// 获取标准值列表
        ///

        ///
        ///
        public override System.ComponentModel.TypeConverter.StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
        {
            ArrayList CssArray = new ArrayList();
            CssArray.Add("right");
            CssArray.Add("left");
            CssArray.Add("center");
            return new StandardValuesCollection(CssArray);

        }

        ///


        /// return ture的话只能选,return flase可选可填
        ///

        ///
        ///
        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
        {
            return false;
        }
    }

    ///


    /// 返回样式内容
    ///

    public class WebPageCss
    {
        ///
        /// 返回样式中内容
        ///

        /// 样式种类
        /// 样式对齐方式
        /// 背景图片
        ///
        public static string CssStyle(string Css, string AlignSorts,string BackGroundImageUrl)
        {
            string Result = "";

            #region  输出分页链接样式

            Result+="/n";

            #endregion

            return Result;
        }
    }
}
基类Repeater.cs代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebControlLibrary
{
    ///


    /// Repeater 控件。
    ///

    [DefaultProperty("Text"), ToolboxData("<{0}:Repeater runat=server>")]
    public class Repeater : System.Web.UI.WebControls.Repeater
    {
        ///
        /// 构造函数
        ///

        public Repeater()
            : base()
        {
        }
    }
}


所使用的存储过程如下:
------------------------------------
--用途:大容量数据存储过程分页
--时间:2009-07-18 22:12
--作者:轻舞飞扬
--qq号:42383239
------------------------------------
CREATE PROC PageView
 @tbname     sysname,            --要分页显示的表名
 @FieldKey   nvarchar(1000),   --用于定位记录的主键(惟一键)字段,可以是逗号分隔的多个字段
 @PageCurrent int=1,            --要显示的页码
 @PageSize   int=10,             --每页的大小(记录数)
 @FieldShow nvarchar(1000)='',   --以逗号分隔的要显示的字段列表,如果不指定,则显示所有字段
 @FieldOrder nvarchar(1000)='',   --以逗号分隔的排序字段列表,可以指定在字段后面指定DESC/ASC用于指定排序顺序
 @Where    nvarchar(1000)='' --查询条件
 --@PageCount int=null OUTPUT        --总页数
AS
      
 SET NOCOUNT ON
declare @PageCount int
 --检查对象是否有效
 IF OBJECT_ID(@tbname) IS NULL
  BEGIN
   RAISERROR(N'对象"%s"不存在',1,16,@tbname)
   RETURN
  END

 IF OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTable')=0
   AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsView')=0
   AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTableFunction')=0
  BEGIN
   RAISERROR(N'"%s"不是表、视图或者表值函数',1,16,@tbname)
   RETURN
  END
  
 --分页字段检查
 IF ISNULL(@FieldKey,N'')=''
  BEGIN
   RAISERROR(N'分页处理需要主键(或者惟一键)',1,16)
   RETURN
  END
 
 --其他参数检查及规范
 IF ISNULL(@PageCurrent,0)<1 SET @PageCurrent=1
        IF len(@PageCurrent)>5 SET @PageCurrent=1
 IF ISNULL(@PageSize,0)<1 SET @PageSize=10
 IF ISNULL(@FieldShow,N'')=N'' SET @FieldShow=N'*'

 IF ISNULL(@FieldOrder,N'')=N''
  SET @FieldOrder=N''
 ELSE
  SET @FieldOrder=N'ORDER BY '+LTRIM(@FieldOrder)

 IF ISNULL(@Where,N'')=N''
  SET @Where=N''
 ELSE
  SET @Where=N'WHERE ('+@Where+N')'

          
 
 --如果@PageCount为NULL值,则计算总页数(这样设计可以只在第一次计算总页数,以后调用时,把总页数传回给存储过程,避免再次计算总页数,对于不想计算总页数的处理而言,可以给@PageCount赋值)
 IF @PageCount IS NULL
  BEGIN
   DECLARE @sql nvarchar(4000)
   SET @sql=N'SELECT @PageCount=COUNT(*)'
    +N' FROM '+@tbname
    +N' '+@Where
   --EXEC sp_executesql @sql,N'@PageCount int OUTPUT',@PageCount OUTPUT
   SET @PageCount=(@PageCount+@PageSize-1)/@PageSize
  END
 
 --计算分页显示的TOPN值
 DECLARE @TopN varchar(20),@TopN1 varchar(20)
 SELECT @TopN=@PageSize,
  @TopN1=(@PageCurrent-1)*@PageSize
 
 --第一页直接显示
 IF @PageCurrent=1
  EXEC(N'SELECT TOP '+@TopN
   +N' '+@FieldShow
   +N' FROM '+@tbname
   +N' '+@Where
   +N' '+@FieldOrder)
 ELSE
  BEGIN
   --处理别名
   IF @FieldShow=N'*'
    SET @FieldShow=N'a.*'
  
   --生成主键(惟一键)处理条件
   DECLARE @Where1 nvarchar(4000),@Where2 nvarchar(4000),
    @s nvarchar(1000),@Field sysname
   SELECT @Where1=N'',@Where2=N'',@s=@FieldKey
   WHILE CHARINDEX(N',',@s)>0
    
       if len(@s)>2-----解决当主键字段长度小于2时出现的情况  
                                               begin 
      SELECT @Field=LEFT(@s,CHARINDEX(N',',@s)-1),
                                                        @s=STUFF(@s,1,CHARINDEX(N',',@s),N''),
     @Where1=@Where1+N' AND a.'+@Field+N'=b.'+@Field,
     @Where2=@Where2+N' AND b.'+@Field+N' IS NULL',
     @Where=REPLACE(@Where,@Field,N'a.'+@Field),
     @FieldOrder=REPLACE(@FieldOrder,@Field,N'a.'+@Field),
     @FieldShow=REPLACE(@FieldShow,@Field,N'a.'+@Field)
                                              end
   else
       begin
       SELECT @Field=@s,
       @s=STUFF(@s,1,CHARINDEX(N',',@s),N''),
     @Where1=@Where1+N' AND a.'+@Field+N'=b.'+@Field,
     @Where2=@Where2+N' AND b.'+@Field+N' IS NULL',
     @Where=REPLACE(@Where,@Field,N'a.'+@Field),
     @FieldOrder=REPLACE(@FieldOrder,@Field,N'a.'+@Field),
     @FieldShow=REPLACE(@FieldShow,@Field,N'a.'+@Field)
    end
    
     
   SELECT @Where=REPLACE(@Where,@s,N'a.'+@s),
    @FieldOrder=REPLACE(@FieldOrder,@s,N'a.'+@s),
    @FieldShow=REPLACE(@FieldShow,@s,N'a.'+@s),
    @Where1=STUFF(@Where1+N' AND a.'+@s+N'=b.'+@s,1,5,N''), 
    @Where2=CASE
     WHEN @Where='' THEN N'WHERE ('
     ELSE @Where+N' AND ('
     END+N'b.'+@s+N' IS NULL'+@Where2+N')'
  
   --执行查询
   EXEC(N'SELECT TOP '+@TopN
    +N' '+@FieldShow
    +N' FROM '+@tbname
    +N' a LEFT JOIN(SELECT TOP '+@TopN1
    +N' '+@FieldKey
    +N' FROM '+@tbname
    +N' a '+@Where
    +N' '+@FieldOrder
    +N')b ON '+@Where1
    +N' '+@Where2
    +N' '+@FieldOrder)
  END

GO


调用的数据库底层代码:
using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Collections;
using System.Collections.Generic;
using System.Xml;
using System.Text;
using System.Data.Common;
using System.Text.RegularExpressions;
using System.Reflection;
using System.IO;

namespace Sql_Function
{
    ///


    /// 数据处理底层  数据基本操作
    ///

    public class SqlDb
    {
        #region  数据库公用连接字符串

        public static readonly string ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString();

        #endregion

        #region  数据库操作方法 连接和关闭对象

        ///


        /// 打开数据库连接
        ///

        ///
        public static SqlConnection OpenDataBase()
        {
            SqlConnection conn = new SqlConnection(ConnectionString);

            try
            {
                conn.Open();

                return conn;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

        ///


        /// 关闭数据库连接
        ///

        ///
        public static void CloseDataBase(SqlConnection conn)
        {
            try
            {
                if (conn != null)
                {
                    conn.Close();

                    conn.Dispose();
                }
            }
            catch (Exception ex)
            {
                conn.Close();

                conn.Dispose();

                throw new Exception(ex.Message);
                //throw new ArgumentNullException("connection");
            }
            finally
            {
                conn.Close();
            }
        }

        #endregion              

        #region  数据库返回DataTable

        ///


        /// 返回指定Sql语句的返回DataTable
        ///

        /// 传入的Sql语句
        /// DataTable
        public static DataTable ReturnDataTable(string strSQL)
        {
            SqlConnection conn = OpenDataBase();

            DataTable table = new DataTable();

            SqlDataAdapter da = null;

            try
            {
                da = new SqlDataAdapter(strSQL, conn);

                da.Fill(table);

                da.Dispose();

                CloseDataBase(conn);

                return table;
            }
            catch (Exception e)
            {
                da.Dispose();

                table.Dispose();

                CloseDataBase(conn);

                throw new Exception(e.Message);
            }
            finally
            {
                da.Dispose();

                CloseDataBase(conn);
            }
        }

        ///


        /// 返回DataTable记录集,并且实现分页功能
        ///

        /// 传入SQL语句
        /// 当前页
        /// 每页分页大小
        /// 填充数据库表名称
        ///
        public static DataTable ReturnDataTablePage(string sqls, int currentpage, int pagesize, string table)
        {
            SqlConnection conn = OpenDataBase();

            DataSet ds = new DataSet();

            SqlDataAdapter da = new SqlDataAdapter(sqls, conn);

            try
            {
                int startcount;

                if (currentpage < 1)
                {
                    startcount = currentpage * pagesize;
                }
                else
                {
                    startcount = (currentpage - 1) * pagesize;
                }

                da.Fill(ds, startcount, pagesize, table);

                da.Dispose();

                CloseDataBase(conn);

                return ds.Tables[0];
            }
            catch (Exception ex)
            {
                da.Dispose();

                CloseDataBase(conn);

                ds.Dispose();

                throw new Exception(ex.Message);
            }
            finally
            {
                da.Dispose();

                CloseDataBase(conn);
            }
        }

        #endregion

        #region  数据库公用方法集

        ///


        /// 返回记录总数 传入带有count(主键)统计的Sql语句
        ///

        /// 传入带有count(主键)统计的Sql语句
        ///
        public static string RecordCounts(string StrSql)
        {
            string ProcInfo = "0";

            SqlConnection conn = OpenDataBase();

            SqlCommand comm = new SqlCommand(StrSql, conn);

            comm.CommandTimeout = 120;

            SqlDataReader DataReaders = comm.ExecuteReader(); //返回值

            if (DataReaders.Read())
            {
                ProcInfo = DataReaders[0].ToString();
            }

            DataReaders.Close();

            comm.Dispose();

            CloseDataBase(conn);

            return ProcInfo;
        }

        #endregion       
    }
}

using System;
using System.Collections.Generic;
using System.Text;

namespace Sql_Function
{
    public class PublicFunction
    {
        ///


        /// 判断是否为数字   TRUE代表不是数字,False代表是数字
        ///

        /// 字符串
        ///
        public static bool isNumber(string s)
        {
            int Flag = 0;
            char[] str = s.ToCharArray();
            for (int i = 0; i < str.Length; i++)
            {
                if (Char.IsNumber(str[i]))
                {
                    Flag++;
                }
                else
                {
                    Flag = -1;
                    break;
                }
            }
            if (Flag > 0)
            {
                return false;
            }
            else
            {
                return true;
            }
        }

    }
}


前台页面样例:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="FrameWork.Web.Index" %>



    Repeater数据分页
   
   


    

    

    

    
    
     


       
     

     
    


后台代码:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

namespace FrameWork.Web
{
    public partial class Index : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                Bind();
            }
        }

        protected void Bind()
        {
            string Sql = "select count(Sys_NewsList_ID) from Sys_NewsList";//查询Sql语句

            #region 列表选项

            #region 分页控件基本属性

            RepeaterPages1.SqlString = Sql;//用于统计总记录数和进行数据分页的Sql语句

            RepeaterPages1.LastPage = "< Prev";

            RepeaterPages1.NextPage = "Next > ";

            RepeaterPages1.PageBeforeHtml = "";

            RepeaterPages1.PageLastHtml = "";

            #region 构造Url参数

            System.Text.StringBuilder StrBulider = new System.Text.StringBuilder();

            StrBulider.Append("&a=");

            #endregion

            RepeaterPages1.Url = StrBulider.ToString();

            #endregion

            #region 数据绑定

            RepeaterPages1.DataSource = RepeaterPages1.getObjectRecordCount(true, "PageView", "Sys_NewsList", "Sys_NewsList_ID", " Sys_NewsList_ID desc", " Sys_NewsList_ID is not null");

            RepeaterPages1.DataBind();

            #endregion

            #endregion
        }
    }
}

你可能感兴趣的:(c#之分页技术,c#web开发,web控件技术,string,datatables,url,exception,css,javascript)