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

简介: namespace JYK.Controls{    /**////     /// 分页控件    /// PageGetData.cs 负责提取数据    /// PageSQL.cs 负责生成SQl语句    /// PageUI.

namespace  JYK.Controls
{
    
/**//// <summary>
    
/// 分页控件
    
/// PageGetData.cs 负责提取数据
    
/// PageSQL.cs 负责生成SQl语句
    
/// PageUI.cs 负责分页控件的页面内容
    
/// </summary>

    [DefaultProperty("Text")]
    [ToolboxData(
"<{0}:JYKPage runat=server></{0}:JYKPage>")]
    
public class JYKPage : WebControl, INamingContainer, IPostBackEventHandler 

    
{
        
/**//// <summary>
        
/// 访问数据库用的实例
        
/// </summary>

        private  DataAccessHelp dal = null;

        
/**//// <summary>
        
/// 生成SQL语句的部分
        
/// </summary>

        private PageManage.PageSQL MgrPageSQL = null;

        
/**//// <summary>
        
/// 提取数据的部分
        
/// </summary>

        private PageManage.PageGetData MgrGetData = null;

        
/**//// <summary>
        
/// 提取数据的部分
        
/// </summary>

        private PageManage.PageUI MgrPageUI = null;

        
/**//// <summary>
        
/// 设置显示数据的控件
        
/// </summary>

        public System.Web.UI.WebControls.WebControl ControlGrid;
 
        
成员#region 成员
        
        
页面显示#region 页面显示
        
/**//// <summary>
        
/// 上一页 的文字
        
/// </summary>

        private string pPrevText = "上一页";   //上一页

        
/**//// <summary>
        
/// 下一页 的文字
        
/// </summary>

        private string pNextText = "下一页";   //下一页

        
/**//// <summary>
        
/// 首页 的文字
        
/// </summary>

        private string pFirstText = "首页";   //首页

        
/**//// <summary>
        
/// 末页 的文字
        
/// </summary>

        private string pLastText = "末页";   //末页
        
        
/**//// <summary>
        
/// 去指定页号 的文字
        
/// </summary>

        private string pGOText = "GO";   //GO
        
        
#endregion


        
#endregion


        
属性#region 属性

        
存放分页算法模版的属性#region 存放分页算法模版的属性
        
//记录数
        记录相关#region 记录相关
        
一页的记录数#region 一页的记录数
        
/**//// <summary>
        
/// 一页的记录数
        
/// </summary>

        [Bindable(true)]
        [Category(
"记录集")]
        [DefaultValue(
"")]
        [Localizable(
true)]
        
public Int32 PageSize
        
{
            
set { ViewState["PageSize"= value; }
            
get
            
{
                
//没有设置的话,使用默认值:一页20条记录
                if (ViewState["PageSize"== nullreturn 20; }
                
else return (Int32)ViewState["PageSize"]; }
            }

        }

        
#endregion


        
符合条件的记录数#region 符合条件的记录数
        
/**//// <summary>
        
/// 符合条件的记录数
        
/// </summary>

        [Bindable(true)]
        [Category(
"记录集")]
        [DefaultValue(
"")]
        [Localizable(
true)]
        
public Int32 PageRecordCount
        
{
            
set { ViewState["PageRecordCount"= value; }
            
get
            
{
                
//没有设置的话,返回 0 
                if (ViewState["PageRecordCount"== nullreturn 0; }
                
else return (Int32)ViewState["PageRecordCount"]; }
            }

        }

        
#endregion


        
页数#region 页数
        
/**//// <summary>
        
/// 页数
        
/// </summary>

        [Bindable(true)]
        [Category(
"记录集")]
        [DefaultValue(
"")]
        [Localizable(
true)]
        
public Int32 PageCount
        
{
            
set { ViewState["PageCount"= value; }
            
get
            
{
                
//没有设置的话,返回 0 
                if (ViewState["PageCount"== nullreturn 0; }
                
else return (Int32)ViewState["PageCount"]; }
            }

        }

        
#endregion


        
想要查看哪一页的数据#region 想要查看哪一页的数据
        
/**//// <summary>
        
/// 想要查看那一页的数据
        
/// </summary>

        [Bindable(true)]
        [Category(
"记录集")]
        [DefaultValue(
"")]
        [Localizable(
true)]
        
public Int32 PageIndex
        
{
            
set { ViewState["PageIndex"= value; }
            
get
            
{
                
if (ViewState["PageIndex"== nullreturn 1; }
                
else return (Int32)ViewState["PageIndex"]; }
            }

        }

        
#endregion


        
#endregion

        
//SQL语句的基础
        分页算法需要的属性#region 分页算法需要的属性
        
表名、视图名#region 表名、视图名
        
/**//// <summary>
        
/// 表名、视图名
        
/// </summary>

        [Bindable(true)]
        [Category(
"SQL语句")]
        [DefaultValue(
"")]
        [Localizable(
true)]
        
public string TableName
        
{
            
set { ViewState["TableName"= value; }
            
get
            
{
                
if (ViewState["TableName"== null)
                
{
                    
if ((base.Site != null&& base.Site.DesignMode)
                    
{
                        
return "TableName";
                    }

                    
else
                    
{
                        CommandClass.MsgBox(
"没有设置TableName属性!"true);
                        
return null;
                    }

                }

                
else return ViewState["TableName"].ToString(); }
            }

        }

        
#endregion


        
表的主键#region 表的主键
        
/**//// <summary>
        
/// 表的主键
        
/// </summary>

        [Bindable(true)]
        [Category(
"SQL语句")]
        [DefaultValue(
"")]
        [Localizable(
true)]
        
public string TableIDColumns
        
{
            
set { ViewState["TableIDColumns"= value; }
            
get
            
{
                
if (ViewState["TableIDColumns"== null)
                
{
                    
if ((base.Site != null&& base.Site.DesignMode)
                    
{
                        
return "TableIDColumns";
                    }

                    
else
                    
{
                        CommandClass.MsgBox(
"没有设置TableIDColumns属性!"true);
                        
return null;

                    }

                }

                
else return ViewState["TableIDColumns"].ToString(); }
            }

        }

        
#endregion


        
显示的字段#region 显示的字段
        
/**//// <summary>
        
/// 显示的字段
        
/// </summary>

        [Bindable(true)]
        [Category(
"SQL语句")]
        [DefaultValue(
"")]
        [Localizable(
true)]
        
public string TableShowColumns
        
{
            
set { ViewState["TableShowColumns"= value; }
            
get
            
{
                
if (ViewState["TableShowColumns"== nullreturn "*"; }
                
else return ViewState["TableShowColumns"].ToString(); }
            }

        }

        
#endregion


        
排序字段#region 排序字段
        
/**//// <summary>
        
/// 排序字段
        
/// </summary>

        [Bindable(true)]
        [Category(
"SQL语句")]
        [DefaultValue(
"")]
        [Localizable(
true)]
        
public string TableOrderColumns
        
{
            
set { ViewState["TableOrderColumns"= value; }
            
get
            
{
                
if (ViewState["TableOrderColumns"== null)
                
{
                    
if ((base.Site != null&& base.Site.DesignMode)
                    
{
                        
return "TableOrderColumns";
                    }

                    
else
                    
{
                        CommandClass.MsgBox(
"没有设置TableOrderColumns属性!"true);
                        
return null;
                    }

                }

                
else return ViewState["TableOrderColumns"].ToString(); }
            }

        }

        
        
#endregion


        
查询条件#region 查询条件
        
/**//// <summary>
        
/// 查询条件
        
/// </summary>

        [Bindable(true)]
        [Category(
"SQL语句")]
        [DefaultValue(
"")]
        [Localizable(
true)]
        
public string TableQuery
        
{
            
set { ViewState["TableQuery"= value; }
            
get
            
{
                
if (ViewState["TableQuery"== null)
                    
return "";
                
else
                    
return ViewState["TableQuery"].ToString();
            }

        }

        
        
#endregion

        
#endregion


        
//SQL模版
        分页算法模版#region 分页算法模版
        
/**//// <summary>
        
/// 第一页的分页算法模版
        
/// </summary>

        [Bindable(true)]
        [Category(
"SQL语句模版")]
        [DefaultValue(
"")]
        [Localizable(
true)]
        
public string SQLGetFirstPage
        
{
            
set {  ViewState["FirstPageSQL"= value;  }
            
get
            
{
                
return ViewState["FirstPageSQL"== null ? null : ViewState["FirstPageSQL"].ToString();
            }

        }

        
#endregion


        
指定页号的分页算法模版#region 指定页号的分页算法模版
        
/**//// <summary>
        
/// 指定页号的分页算法模版
        
/// </summary>

        [Bindable(true)]
        [Category(
"SQL语句模版")]
        [DefaultValue(
"")]
        [Localizable(
true)]
        
public string SQLGetNextPage
        
{
            
set
            
{
                ViewState[
"NextPageSQL"= value;
            }

            
get
            
{
                
return ViewState["NextPageSQL"]==null?null:ViewState["NextPageSQL"].ToString();
            }

        }

        
#endregion


        
指定页号的分页算法模版#region 指定页号的分页算法模版
        
/**//// <summary>
        
/// 最后一页的分页算法模版
        
/// </summary>

        [Bindable(true)]
        [Category(
"SQL语句模版")]
        [DefaultValue(
"")]
        [Localizable(
true)]
        
public string SQLGetLastPage
        
{
            
set
            
{
                ViewState[
"LastPageSQL"= value;
            }

            
get
            
{
                
return ViewState["LastPageSQL"== null ? null : ViewState["LastPageSQL"].ToString();
            }

        }

        
#endregion


        
#endregion


        
//UI
        页面显示 上一页、下一页#region 页面显示 上一页、下一页

        
上一页#region 上一页
        
/**//// <summary>
        
/// 上一页
        
/// </summary>

        [Bindable(true)]
        [Category(
"页面显示")]
        [DefaultValue(
"")]
        [Localizable(
true)]
        
public string PageUIPrev
        
{
            
get return pPrevText; }
            
set { pPrevText = value; }
        }

        
#endregion


        
下一页#region 下一页
        
/**//// <summary>
        
/// 下一页
        
/// </summary>

        [Bindable(true)]
        [Category(
"页面显示")]
        [DefaultValue(
"")]
        [Localizable(
true)]
        
public string PageUINext
        
{
            
get return pNextText; }
            
set { pNextText = value; }
        }

        
#endregion


        
首页#region 首页
        
/**//// <summary>
        
/// 首页
        
/// </summary>

        [Bindable(true)]
        [Category(
"页面显示")]
        [DefaultValue(
"")]
        [Localizable(
true)]
        
public string PageUIFirst
        
{
            
get return pFirstText; }
            
set { pFirstText = value; }
        }

        
#endregion


        
末页#region 末页
        
/**//// <summary>
        
/// 末页
        
/// </summary>

        [Bindable(true)]
        [Category(
"页面显示")]
        [DefaultValue(
"")]
        [Localizable(
true)]
        
public string PageUILast
        
{
            
get return pLastText; }
            
set { pLastText = value; }
        }

        
#endregion


        
GO#region GO
        
/**//// <summary>
        
/// GO
        
/// </summary>

        [Bindable(true)]
        [Category(
"页面显示")]
        [DefaultValue(
"")]
        [Localizable(
true)]
        
public string PageUIGO
        
{
            
get return pGOText; }
            
set { pGOText = value; }
        }

        
#endregion


        
#endregion


        
页面导航的数量#region 页面导航的数量
        
/**//// <summary>
        
/// 
        
/// </summary>

        public Int32 NaviCount
        
{
            
set { ViewState["NaviCount"= value;  }
            
get
            
{
                
if (ViewState["NaviCount"== null)
                    
return 10;
                
else
                    
return (Int32)ViewState["NaviCount"];
            }

        }

        
#endregion


        
页面显示 记录数、页数#region 页面显示 记录数、页数

        
共{0}条记录数#region 共{0}条记录数
        
/**//// <summary>
        
/// 共{0}条记录数
        
/// </summary>

        [Bindable(true)]
        [Category(
"记录信息")]
        [DefaultValue(
"")]
        [Localizable(
true)]
        
public string PageUIAllCount
        
{
            
set { ViewState["PageUIAllCount"= value; }
            
get
            
{
                
if (ViewState["PageUIAllCount"== null)
                    
return "共<font style=\"color:Red;\">{0}</font>条记录数";
                
else
                    
return ViewState["PageUIAllCount"].ToString();
            }

        }

        
#endregion


        
第{0}/{1}页#region 第{0}/{1}页
        
/**//// <summary>
        
/// 第{0}/{1}页
        
/// </summary>

        [Bindable(true)]
        [Category(
"记录信息")]
        [DefaultValue(
"")]
        [Localizable(
true)]
        
public string PageUIAllPage
        
{
            
set { ViewState["PageUIAllPage"= value; }
            
get
            
{
                
if (ViewState["PageUIAllPage"== null)
                    
return "第<font style=\"color:Red;\">{0}</font>/<font style=\"color:Red;\">{1}</font>页";
                
else
                    
return ViewState["PageUIAllPage"].ToString();
            }

        }

        
#endregion


        
每页{0}条记录#region 每页{0}条记录
        
/**//// <summary>
        
/// 共{0}条记录数
        
/// </summary>

        [Bindable(true)]
        [Category(
"记录信息")]
        [DefaultValue(
"")]
        [Localizable(
true)]
        
public string PageUIAllPageCount
        
{
            
set { ViewState["PageUIAllPageCount"= value; }
            
get
            
{
                
if (ViewState["PageUIAllPageCount"== null)
                    
return "每页<font style=\"color:Red;\">{0}</font>条记录";
                
else
                    
return ViewState["PageUIAllPageCount"].ToString();
            }

        }

        
#endregion


        
#endregion


        
显示数据的控件的ID#region 显示数据的控件的ID
        
/**//// <summary>
        
/// 共{0}条记录数
        
/// </summary>

        [Bindable(true)]
        [Category(
"显示数据的控件ID")]
        [DefaultValue(
"")]
        [Localizable(
true)]
        
public string ControlGridID
        
{
            
set { ViewState["ControlGridID"= value; }
            
get
            
{
                
if (ViewState["ControlGridID"== null)
                    
return null;
                
else
                    
return ViewState["ControlGridID"].ToString();
            }

        }

        
#endregion



        
数据访问实例的设置#region 数据访问实例的设置
        
/**//// <summary>
        
/// 设置数据访问层的实例
        
/// </summary>

        public DataAccessHelp DAL
        
{
            
set { dal = value; }
            
get
            
{
                
if (dal == null)
                    dal 
= new DataAccessHelp();

                
return dal;
            }

        }

        
#endregion


        
管理部分#region 管理部分
        
/**//// <summary>
        
/// 提取数据的实例
        
/// </summary>

        public PageManage.PageGetData ManagerGetData
        
{
            
set { MgrGetData = value; }
            
get
            
{
                PageManage.PageGetData tmp 
= MgrGetData;
                
if (tmp == null)
                
{
                    tmp 
= new JYK.Controls.PageManage.PageGetData();
                    MgrGetData 
= tmp;
                }


                
if (tmp.myPage == null)
                    tmp.myPage 
= this;

                
return tmp;
            }

        }


        
/**//// <summary>
        
/// 提取数据的实例
        
/// </summary>

        public PageManage.PageSQL ManagerPageSQL
        
{
            
set { MgrPageSQL = value; }
            
get
            
{
                PageManage.PageSQL tmp 
= MgrPageSQL;
                
if (tmp == null)
                
{
                    tmp 
= new JYK.Controls.PageManage.PageSQL();
                    MgrPageSQL 
= tmp;
                }


                
if (tmp.myPage == null)
                    tmp.myPage 
= this;

                
return tmp;
            }

        }


        
/**//// <summary>
        
/// 提取数据的实例
        
/// </summary>

        public PageManage.PageUI ManagerPageUI
        
{
            
set { MgrPageUI = value; }
            
get
            
{
                PageManage.PageUI tmp 
= MgrPageUI;
                
if (tmp == null)
                
{
                    tmp 
= new JYK.Controls.PageManage.PageUI();
                    MgrPageUI 
= tmp;
                }


                
if (tmp.myPage == null)
                    tmp.myPage 
= this;

                
return tmp;
            }

        }

        
#endregion


        
#endregion


        
函数#region 函数
        
/**//// <summary>
        
/// 显示第一页的数据
        
/// </summary>

        public void BindFirstPage()
        
{
            
//生成SQL语句和获取记录总数
            this.ManagerPageSQL.CreateSQL();
            
//绑定第一页的数据
            myDataBind(1);
        }

        
#endregion


        
绘制UI CreateChildControls()#region 绘制UI CreateChildControls()
        
/**//// <summary>
        
/// 绘制UI
        
/// </summary>

        protected override void CreateChildControls()
        
{
            
base.CreateChildControls();

            LinkButton btn 
= new LinkButton();
            btn.ID 
= "Page_Button";
            btn.Text 
= "";//所有的回发事件
            
//btn.Click += new EventHandler(btn_Click);   //添加事件
            this.Controls.Add(btn);

            ManagerPageUI.AddPageUI();  
//添加页面显示

            Page_Click();   
//调用分页事件
        }

        
#endregion


        
响应分页事件#region 响应分页事件
        
/**//// <summary>
        
/// 响应分页事件
        
/// </summary>

        private void Page_Click()
        
{
            
//string a = base.Page.Request.Form["__EVENTTARGET"];
            string PageIndex = base.Page.Request.Form["__EVENTARGUMENT"];

            
if (!Functions.IsInt(PageIndex))
                
return;
            
else
                myDataBind(Int32.Parse(PageIndex));
        }


        
/**//// <summary>
        
/// 绑定控件
        
/// </summary>

        private void myDataBind(Int32 PageIndex)
        
{
            
if (ControlGrid == null)
            
{
                
string CID = this.ControlGridID;
                
if (CID == null)
                    
return;
                
else
                    ControlGrid 
= (WebControl)base.Page.FindControl(CID);
            }


            Int32 NoCount 
= this.NaviCount; //一组页号的数量

            
bool isNavi = false;
            Int32 tmpPageIndex 
= this.PageIndex;

            
switch (PageIndex)
            
{
                
case 1:   //首页
                    isNavi = true;
                    
break;

                
case -3:
                    
//上一页
                    PageIndex = this.PageIndex - 1;
                    
break;

                
case -2:
                    
//下一页
                    PageIndex = this.PageIndex + 1;
                    
if (PageIndex % NoCount == 1)
                        isNavi 
= true;

                    
break;

                
case -99:   //前导
                    if (tmpPageIndex % NoCount == 0)
                        PageIndex 
= tmpPageIndex - NoCount;
                    
else
                        PageIndex 
= tmpPageIndex / NoCount * NoCount;

                    isNavi 
= true;
                    
break;

                
case -88:   //后导
                    if (tmpPageIndex % NoCount == 0)
                        PageIndex 
= tmpPageIndex + NoCount;
                    
else 
                        PageIndex 
= (this.PageIndex / NoCount + 1* NoCount + 1;

                    isNavi 
= true;
                    
break;

                

                
default:
                    isNavi 
= false ;
                    
break;
            }


            
if (PageIndex == this.PageCount)
                isNavi 
= true;  //末页
                    
            
this.PageIndex = PageIndex;

            
//获取记录集
            DataTable dt = this.ManagerGetData.GetDataTable(PageIndex);
            
//通过(好像是反射)来设置 DataSource属性。
            Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateSet(ControlGrid, null"datasource"new object[] { dt }nullnull);
            ControlGrid.DataBind();

            
//重新显示当前页号
            this.ManagerPageUI.UpdatePageIndex();

            
//重新显示页号当航
            if (isNavi)
                
this.ManagerPageUI.ReloadPageNavi();
            
else         
                
this.ManagerPageUI.UpdatePageNavi();
            
//base.Page.Response.Write(a + "+" + PageIndex);
        }

        
#endregion


        
/**//// <summary>
        
/// 接收分页控件的回发事件
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>

        void btn_Click(object sender, EventArgs e)
        
{
            
//throw new NotImplementedException();
            
//base.Page.Response.Write("ss");

        }


        
/**//// <summary>
        
/// 分页的回发事件,没有成功
        
/// </summary>
        
/// <param name="PageIndex"></param>

        public void RaisePostBackEvent(string PageIndex)
        
{
            
//base.Page.Response.Write("www");
            
//Page_Click();
        }



        
设计时支持#region 设计时支持
        
/**//// <summary>
        
/// 设计时支持
        
/// </summary>
        
/// <param name="output"></param>

        protected override void Render(HtmlTextWriter output)
        
{
            
if ((base.Site != null&& base.Site.DesignMode)
            
{
                output.Write(
"<div style='TEXT-ALIGN: center;width:100%'>第1/100页 &nbsp;&nbsp; 首页&nbsp;&nbsp;上一页&nbsp;&nbsp;[1][2][3] &nbsp;&nbsp; 下一页 &nbsp;&nbsp; 末页 &nbsp;&nbsp; 共1000条记录</div>");
            }

            
else
            
{
                
//Page_Click();
                output.Write("<div id='" + this.ClientID + "Page' style='TEXT-ALIGN: center;width:90%'>");
                
base.Render(output);
                output.Write(
"</div>");
            }


        }

        
#endregion


    }

}


相关文章
|
17天前
|
C# Windows
.NET开源免费的Windows快速文件搜索和应用程序启动器
今天大姚给大家分享一款.NET开源(MIT License)、免费、功能强大的Windows快速文件搜索和应用程序启动器:Flow Launcher。
|
17天前
|
C#
.NET开源、免费、强大的交互式绘图库
.NET开源、免费、强大的交互式绘图库
|
17天前
|
存储 文字识别 C#
.NET开源免费、功能强大的 Windows 截图录屏神器
今天大姚给大家分享一款.NET开源免费(基于GPL3.0开源协议)、功能强大、简洁灵活的 Windows 截图、录屏、Gif动图制作神器:ShareX。
|
17天前
|
数据可视化 开发工具 C#
.NET开源、免费、跨平台的Git可视化管理工具
俗话说得好“工欲善其事,必先利其器”,合理的选择和使用可视化的管理工具可以降低技术入门和使用的门槛。今天大姚给大家分享一款.NET Avalonia开源、免费、跨平台、快速的Git可视化管理工具:SourceGit。
|
18天前
|
开发框架 安全 .NET
ASP.NET三甲医院手术麻醉信息管理系统源码 对接麻醉机、监护仪、血气分析仪
辅助医院建设 •支持三级医院评级需求 •支持智慧医院评级需求 •支持互联互通评级需求 •支持电子病历评级需求
19 0
|
2月前
|
开发框架 JavaScript 前端开发
5个.NET开源且强大的快速开发框架(帮助你提高生产效率)
5个.NET开源且强大的快速开发框架(帮助你提高生产效率)
|
17天前
|
搜索推荐 API C#
.NET开源快速、强大、免费的电子表格组件
.NET开源快速、强大、免费的电子表格组件
|
2月前
|
Linux C# Android开发
.NET Avalonia开源、免费的桌面UI库 - SukiUI
.NET Avalonia开源、免费的桌面UI库 - SukiUI
|
10天前
|
开发框架 前端开发 JavaScript
采用C#.Net +JavaScript 开发的云LIS系统源码 二级医院应用案例有演示
技术架构:Asp.NET CORE 3.1 MVC + SQLserver + Redis等 开发语言:C# 6.0、JavaScript 前端框架:JQuery、EasyUI、Bootstrap 后端框架:MVC、SQLSugar等 数 据 库:SQLserver 2012
|
30天前
|
数据采集 存储 监控
.NET智慧手术室管理平台源码
术前访视记录单、手术风险评估表、手术安全核查表、自费药品或耗材、麻醉知情同意书、麻醉记录单、分娩镇痛记录单、麻醉复苏单、术后镇痛记录单、术后访视记录单、压伤风险评估量表、手术清点记录单、护理记录单、输血护理记录单。
31 0