【开源】QuickPager ASP.NET2.0分页控件V2.0.0.1——分页控件的源码 (二)

简介: namespace JYK.Controls.PageManage{    /**////     /// 生成分页控件需要的SQL语句    ///     public class PageSQL    {        /**////         /// 分页控件的实例        /...

namespace  JYK.Controls.PageManage
{
    
/**//// <summary>
    
/// 生成分页控件需要的SQL语句
    
/// </summary>

    public class PageSQL
    
{
        
/**//// <summary>
        
/// 分页控件的实例
        
/// </summary>

        public JYKPage myPage = null;
     
        
生成分页用的SQL语句的模版#region 生成分页用的SQL语句的模版
        
生成首页的SQL语句#region 生成首页的SQL语句
        
/**//// <summary>
        
/// 生成首页的SQL语句
        
/// </summary>

        public virtual void CreateFirstPageSQL()
        
{
            
//第一页的SQL语句,
            
//select top PageSize * from table where  order by 
            System.Text.StringBuilder sql = new StringBuilder(100);
            sql.Append(
"set nocount on; ");
            sql.Append(
"select top ");
            sql.Append(myPage.PageSize );
            sql.Append(
" ");
            sql.Append(myPage.TableShowColumns);
            sql.Append(
" from ");
            sql.Append(myPage.TableName );
            sql.Append(
" ");

            
//查询条件
            if (myPage.TableQuery.Length > 0)
            
{
                sql.Append(
" where ");
                sql.Append(myPage.TableQuery);
            }


            sql.Append(
" order by ");
            sql.Append(myPage.TableOrderColumns );
            sql.Append(
" set nocount off; ");
            
            
//保存
            myPage.SQLGetFirstPage = sql.ToString();
            sql.Length 
= 0;

        }

        
#endregion


        
生成任意页的SQL语句#region 生成任意页的SQL语句
        
/**//// <summary>
        
/// 生成任意页的SQL语句的模版
        
/// </summary>

        public virtual void CreateNextPageSQL()
        
{
            
//指定页号的SQL语句的模版
            
//SQL 2005 数据库,使用 Row_Number()分页
            
//set nocount on;
            
//with t_pager as (
            
//   select *,rn = ROW_NUMBER() OVER (ORDER BY id desc) FROM test_indexorder
            
// )
            
//SELECT id,name,content,co1,co2,co3,co4,co5 from t_rn WHERE rn between 19007 and 19057;

            System.Text.StringBuilder sql 
= new StringBuilder(500);
            sql.Append(
"set nocount on; ");
            sql.Append(
"with t_pager as (select myIndex = ROW_NUMBER() OVER (ORDER BY ");
            sql.Append(myPage.TableOrderColumns);
            sql.Append(
" ),* from ");
            sql.Append(myPage.TableName);

            
//查询条件
            if (myPage.TableQuery.Length > 0)
            
{
                sql.Append(
" where ");
                sql.Append(myPage.TableQuery);
            }


            sql.Append(
" ) select  ");
            sql.Append(myPage.TableShowColumns );
            sql.Append(
"  from t_pager where myIndex between {0} and {1} ");
              
            sql.Append(
" set nocount off; ");
            
            
//保存
            myPage.SQLGetNextPage = sql.ToString();
            sql.Length 
= 0;
        }

        
#endregion


        
生成最后一页的SQL语句#region 生成最后一页的SQL语句
        
/**//// <summary>
        
/// 最后一页的SQL语句。依据算法而定,不是所有的情况都需要实现
        
/// </summary>

        public virtual void CreateLastPageSQL()
        
{
         
        }

        
#endregion


        
#endregion



        
生成SQL语句模版、获取总记录数,计算页数。#region 生成SQL语句模版、获取总记录数,计算页数。
        
public void CreateSQL()
        
{
            
//重新生成SQL语句模版
            CreateFirstPageSQL();
            CreateNextPageSQL();
            CreateLastPageSQL();

            
//获取总记录数,计算页数。

            System.Text.StringBuilder sql 
= new StringBuilder();
            sql.Append(
"select count(1) from ");
            sql.Append(myPage.TableName);
            
if (myPage.TableQuery.Length > 0)
            
{
                sql.Append(
" where ");
                sql.Append(myPage.TableQuery);
            }


            
//总记录数
            string tmpCount = myPage.DAL.RunSqlGetFirstColValue(sql.ToString());
            
if (tmpCount != null)
            
{
                
//计算页数
                Int32 intCount = Int32.Parse(tmpCount);
                myPage.PageRecordCount 
= intCount;
                Int32 tmpPageCount 
= intCount / myPage.PageSize;
                tmpPageCount 
+= intCount % myPage.PageSize == 0 ? 0 : 1;

                myPage.PageCount 
= tmpPageCount;
            }

        }

        
#endregion


        
获取分页用的SQL语句#region 获取分页用的SQL语句
        
/**//// <summary>
        
/// 传入页号,返回指定页号的SQL语句
        
/// </summary>
        
/// <param name="PageIndex">页号</param>

        public string  GetSQL(Int32 PageIndex)
        
{
            
            
if (PageIndex == 1)
            
{
                
//指定页号
                myPage.PageIndex = 1;
                
return myPage.SQLGetFirstPage;
            }

            
else
            
{
                
if (PageIndex < 1)
                    PageIndex 
= 1;

                
if (PageIndex > myPage.PageCount)
                    PageIndex 
= myPage.PageCount;

                
//指定页号
                myPage.PageIndex = PageIndex;

                Int32 p1 
= myPage.PageSize * (PageIndex - 1+ 1;
                Int32 p2 
= p1 + myPage.PageSize - 1;

                
return string.Format(myPage.SQLGetNextPage, p1, p2);

            }

        }

        
#endregion



    }

}

namespace  JYK.Controls.PageManage
{
    
/**//// <summary>
    
/// 负责绘制分页控件的显示内容
    
/// </summary>

    public class PageUI
    
{
        
/**//// <summary>
        
/// 分页控件的实例
        
/// </summary>

        public JYKPage myPage = null;

        
/**//// <summary>
        
/// 客户端ID
        
/// </summary>

        public string BtnClientID = "";

        
/**//// <summary>
        
/// 添加UI
        
/// </summary>

        public virtual void AddPageUI()
        
{
            AddPageDataInfo();
            AddPageNavi();
            AddPageText();
         }


        
添加记录数等的显示#region 添加记录数等的显示
        
/**//// <summary>
        
/// 添加记录数等的显示
        
/// </summary>

        public  virtual void AddPageDataInfo()
        
{
            
string str = myPage.PageUIAllCount.Replace("{0}", myPage.PageRecordCount.ToString());
            LiteralControl lc1 
= new LiteralControl();
            lc1.ID 
= "p_data1";
            lc1.Text 
= str;
            myPage.Controls.Add(lc1);

            str 
= myPage.PageUIAllPage.Replace("{0}", myPage.PageIndex.ToString()).Replace("{1}", myPage.PageCount.ToString());
            lc1 
= new LiteralControl();
            lc1.ID 
= "p_data2";
            lc1.Text 
= str;
            myPage.Controls.Add(lc1);

            str 
= myPage.PageUIAllPageCount.Replace("{0}", myPage.PageSize.ToString());
            lc1 
= new LiteralControl();
            lc1.ID 
= "p_data3";
            lc1.Text 
= str;
            myPage.Controls.Add(lc1);
 
        }

        
#endregion


        
修改当前页号#region 修改当前页号
        
/**//// <summary>
        
/// 修改当前页号
        
/// </summary>

        public virtual void UpdatePageIndex()
        
{
            
string str = myPage.PageUIAllPage.Replace("{0}", myPage.PageIndex.ToString()).Replace("{1}", myPage.PageCount.ToString());
            LiteralControl lc1 
= (LiteralControl)myPage.FindControl("p_data2");
            lc1.Text 
= str;

        }

        
#endregion


        
添加上一页等#region 添加上一页等
        
/**//// <summary>
        
/// 添加上一页等
        
/// </summary>

        public virtual void AddPageText()
        
{
            BtnClientID 
= myPage.ClientID + "_dh";

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

            
首页#region 首页
            str.Append(
"<a id=\"P_First\" href=\"");
            str.Append(GetAHref(1));
            str.Append(
"\" class=\"");
            str.Append(myPage.CssClass);
            str.Append(
"\" >");
            str.Append(myPage.PageUIFirst);
            str.Append(
"</a>&nbsp;&nbsp;");

            LiteralControl lc1 
= new LiteralControl();
            lc1.ID 
= "p_First";
            lc1.Text 
= str.ToString();
            myPage.Controls.Add(lc1);
            str.Length 
= 0;
            
#endregion


            
上一页#region 上一页
            str.Append(
"<a id=\"P_Prev\" href=\"");
            str.Append(GetAHref(-3));
            str.Append(
"\" class=\"");
            str.Append(myPage.CssClass);
            str.Append(
"\" >");
            str.Append(myPage.PageUIPrev);
            str.Append(
"</a>&nbsp;&nbsp;");

            lc1 
= new LiteralControl();
            lc1.ID 
= "P_Prev";
            lc1.Text 
= str.ToString();
            myPage.Controls.Add(lc1);
            str.Length 
= 0;
            
#endregion


            
下一页#region 下一页
            str.Append(
"<a id=\"P_Next\" href=\"");
            str.Append(GetAHref(-2));
            str.Append(
"\" class=\"");
            str.Append(myPage.CssClass);
            str.Append(
"\" >");
            str.Append(myPage.PageUINext);
            str.Append(
"</a>&nbsp;&nbsp;");

            lc1 
= new LiteralControl();
            lc1.ID 
= "P_Next";
            lc1.Text 
= str.ToString();
            myPage.Controls.Add(lc1);
            str.Length 
= 0;
            
#endregion


            
末页#region 末页
            str.Append(
"<a id=\"P_Last\" href=\"");
            str.Append(GetAHref(myPage.PageCount));
            str.Append(
"\" class=\"");
            str.Append(myPage.CssClass);
            str.Append(
"\" >");
            str.Append(myPage.PageUILast);
            str.Append(
"</a>&nbsp;&nbsp;");

            lc1 
= new LiteralControl();
            lc1.ID 
= "P_Last";
            lc1.Text 
= str.ToString();
            myPage.Controls.Add(lc1);
            str.Length 
= 0;
            
#endregion


            
GO#region GO
            str.Append(
"&nbsp;&nbsp;<a id=\"P_GO\" href=\"javascript:_GO()\" class=\"");
            str.Append(myPage.CssClass);
            str.Append(
"\" >");
            str.Append(myPage.PageUIGO);
            str.Append(
"</a>&nbsp;&nbsp;");

            JYKTextBox txt 
= new JYKTextBox();
            txt.ID 
= "Txt_GO";
            txt.MaxLength 
= 3;
            txt.Columns 
= 1;
            myPage.Controls.Add(txt);

            lc1 
= new LiteralControl();
            lc1.ID 
= "P_Go";
            lc1.Text 
= str.ToString();
            myPage.Controls.Add(lc1);
            str.Length 
= 0;
            
#endregion

        }

        
#endregion


        
//导航
        页面导航#region 页面导航
        
/**//// <summary>
        
/// navigation
        
/// </summary>

        public virtual void AddPageNavi()
        
{
            
string str = GetNavi();

            LiteralControl lc1 
= new LiteralControl();
            lc1.ID 
= "p_no";
            lc1.Text 
= str;
            myPage.Controls.Add(lc1);
           

        }

        
#endregion


        
修改#region 修改
        
/**//// <summary>
        
/// 修改
        
/// </summary>

        public virtual void UpdatePageNavi()
        
{
            Int32  pIndex 
= myPage.PageIndex;

            LiteralControl lc1 
= (LiteralControl)myPage.FindControl("p_no");

            Int32 NoCount 
= myPage.NaviCount; //一组页号的数量
            
//Int32 cp = myPage.PageIndex / NoCount * NoCount;

            
if (pIndex % NoCount == 0 || pIndex % NoCount == NoCount - 1)
            
{
                lc1.Text 
= GetNavi();
            }

            
else
            
{
                
string str = lc1.Text.Replace(">-"";>[");
                str 
= str.Replace("-<""]<");
                str 
= str.Replace("[" + pIndex + "]""-" + pIndex + "-");
                lc1.Text 
= str;
            }

        }

        
#endregion


        
重新计算导航页号#region 重新计算导航页号
        
/**//// <summary>
        
/// 重新计算导航页号
        
/// </summary>

        public virtual void ReloadPageNavi()
        
{
            
string pIndex = myPage.PageIndex.ToString();
            LiteralControl lc1 
= (LiteralControl)myPage.FindControl("p_no");
            lc1.Text 
= GetNavi();
        }

        
#endregion


        
生成导航的html#region 生成导航的html
        
/**//// <summary>
        
/// 生成导航的html
        
/// </summary>
        
/// <returns></returns>

        private string GetNavi()
        
{
            System.Text.StringBuilder str 
= new StringBuilder();

            Int32 pIndex 
= myPage.PageIndex;
            
            Int32 NoCount 
= myPage.NaviCount ; //一组页号的数量
            Int32 cp = pIndex / NoCount;  // *NoCount;

            
if (pIndex != NoCount && cp != 0)
            
{
                
//前导页
                str.Append("&nbsp;<a id=\"P_aa\" href=\"");
                str.Append(GetAHref(-99));
                str.Append(
"\" class=\"");
                str.Append(myPage.CssClass);
                str.Append(
"\" >");
                str.Append("");
                str.Append(
"</a>&nbsp;");
                
                str.Append(
"&nbsp;");
            }


            Int32 i 
= 0;
            Int32 pCount 
= myPage.PageCount;

            cp 
*= NoCount;

            
//没有想到更好的解决办法
            if (pIndex % NoCount == 0)
                cp 
-= NoCount;

            
for (i = 1; i <= NoCount; i++)
            
{
                
if (pIndex == cp + i)
                
{
                    str.Append(
"&nbsp;<a id=\"P_b" + i.ToString() + "\" href=\"");
                    str.Append(GetAHref(cp + i));
                    str.Append(
"\" class=\"");
                    str.Append(myPage.CssClass);
                    str.Append(
"\" >-");
                    str.Append(cp + i);
                    str.Append(
"-</a>&nbsp;");
                }

                
else
                
{
                    str.Append(
"&nbsp;<a id=\"P_b"+ i.ToString() +"\" href=\"");
                    str.Append(GetAHref(cp + i));
                    str.Append(
"\" class=\"");
                    str.Append(myPage.CssClass);
                    str.Append(
"\" >[");
                    str.Append(cp + i);
                    str.Append(
"]</a>&nbsp;");
                }


                
if (cp + i >= pCount)
                
{
                    i 
= 9999;
                }

            }


            
if (cp + i < pCount)
            
{
                
//后导页
                str.Append("&nbsp;<a id=\"P_zz\" href=\"");
                str.Append(GetAHref(-88));
                str.Append(
"\" class=\"");
                str.Append(myPage.CssClass);
                str.Append(
"\" >");
                str.Append("");
                str.Append(
"</a>&nbsp;");
                
                str.Append(
"&nbsp;");
            }

            
return str.ToString();
        }


         
        
#endregion




    }

}


namespace  JYK.Controls.PageManage
{
    
/**//// <summary>
    
/// 依据PageSQL提供的SQL语句,通过数据访问函数库到数据库里提取数据
    
/// </summary>

    public class PageGetData
    
{
        
/**//// <summary>
        
/// 分页控件的实例
        
/// </summary>

        public JYKPage myPage = null;
        
        
/**//// <summary>
        
/// 返回DataTable记录集
        
/// </summary>
        
/// <param name="PageIndex">页号。从1开始计数</param>
        
/// <returns></returns>

        public DataTable GetDataTable(Int32 PageIndex)
        
{
            
string sql = myPage.ManagerPageSQL.GetSQL(PageIndex);
            
return myPage.DAL.RunSqlDataTable(sql);
        }


        
//public T GetDataList<T>(Int32 PageIndex)
        
//{
        
//    string sql = myPage.ManagerPageSQL.GetSQL(PageIndex);
        
//    return myPage.DAL.RunSqlDataTable(sql);
        
//}

    }

}

相关文章
|
1月前
|
C# Windows
.NET开源免费的Windows快速文件搜索和应用程序启动器
今天大姚给大家分享一款.NET开源(MIT License)、免费、功能强大的Windows快速文件搜索和应用程序启动器:Flow Launcher。
|
1月前
|
C#
.NET开源、免费、强大的交互式绘图库
.NET开源、免费、强大的交互式绘图库
|
1月前
|
存储 文字识别 C#
.NET开源免费、功能强大的 Windows 截图录屏神器
今天大姚给大家分享一款.NET开源免费(基于GPL3.0开源协议)、功能强大、简洁灵活的 Windows 截图、录屏、Gif动图制作神器:ShareX。
|
1月前
|
数据可视化 开发工具 C#
.NET开源、免费、跨平台的Git可视化管理工具
俗话说得好“工欲善其事,必先利其器”,合理的选择和使用可视化的管理工具可以降低技术入门和使用的门槛。今天大姚给大家分享一款.NET Avalonia开源、免费、跨平台、快速的Git可视化管理工具:SourceGit。
|
1月前
|
小程序 C# 数据库
3个.NET开源、免费、强大的商城系统
今天大姚给大家分享3个.NET开源、免费、强大的商城系统,希望可以帮助到有商城系统开发需求的同学。
|
1月前
|
开发框架 .NET BI
ASP.NET公立医院健康体检信息管理系统源码
健康体检信息管理系统是专门针对医院体检中心的日常业务运作的特点和流程,结合数字化医院建设要求进行设计研发的一套应用系统。该系统覆盖体检中心的所有业务,完成从预约、登记、收费、检查、检验、出报告、分析、报表等所有工作,规范了体检流程,提高了工作效率。体检系统为每个体检者建立一套完整的体检档案,与病人的门诊、住院诊疗信息有机集成, 真正体现数字化医院以病人为中心的建设原则。
27 1
|
1月前
|
开发框架 安全 .NET
ASP.NET三甲医院手术麻醉信息管理系统源码 对接麻醉机、监护仪、血气分析仪
辅助医院建设 •支持三级医院评级需求 •支持智慧医院评级需求 •支持互联互通评级需求 •支持电子病历评级需求
22 0
|
18天前
|
存储 开发框架 前端开发
前端框架EXT.NET Dotnet 3.5开发的实验室信息管理系统(LIMS)成品源码 B/S架构
发展历史:实验室信息管理系统(LIMS),就是指通过计算机网络技术对实验的各种信息进行管理的计算机软、硬件系统。也就是将计算机网络技术与现代的管理思想有机结合,利用数据处理技术、海量数据存储技术、宽带传输网络技术、自动化仪器分析技术,来对实验室的信息管理和质量控制等进行全方位管理的计算机软、硬件系统,以满足实验室管理上的各种目标(计划、控制、执行)。
16 1
|
9天前
|
定位技术 API C#
.NET开源、功能强大、跨平台的图表库
.NET开源、功能强大、跨平台的图表库
|
1月前
|
搜索推荐 API C#
.NET开源快速、强大、免费的电子表格组件
.NET开源快速、强大、免费的电子表格组件