asp分页控件实例超详细简单
由于项目开发中需要用到分页的功能,所以自己就研究并写了一个https://www.360docs.net/doc/9417397020.html,分页控件,其中的实现全部是个人理解并进行编写的代码,而且我也写了一个事例供大家参考(没有做任何美工的处理)!希望能对大家有所帮助!在文章最后我会附上全部代码的链接供大家下载,并可以继续优化!
运行后的效果如下:
其中控件的核心就是定义一个委托,并开放一个事件出来!
在本控件中定义如下:
public delegate void GoPageHandler(int PageOrder);
public event GoPageHandler GoPage;
说好了核心,就要看一下我写的https://www.360docs.net/doc/9417397020.html,分页控件的前台代码了,我就直接截图了:
<%@Control Language="C#"AutoEventWireup="true"CodeFile="DispartPage.ascx.cs" Inherits="component_DispartPage" %>
总共有: 当前第 | OnClick="imgBtnLastPage_Click"/> |
这前台代码没什么好说的了,就是几个label加几个ImageButton 控件(每个ImageButton 控件都有一个OnClick事件,对应了后台的一个方法)喽!
下面主要来说说后台代码:
首先来说说控件的初始化页面代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
imgBtnPrevPage.Enabled = false; //首次加载上一页按钮不可用
if (this.PageCount == 1) //如果页数为1,那么下一页按钮也不可用
{
imgBtnNextPage.Enabled = false;
}
}
}
下面就改定义一下这个https://www.360docs.net/doc/9417397020.html,分页控件的属性了,通过属性你可以定义控件的大小等等,当然了你还可以自己开放更多的属性,比如“上一页”“下一页”这些ImageButton 控件的图片。
#region属性
#region当前页
///
///当前页
///
public int CurrentPage
{
set
{
ViewState["CurrentPage"] = value;
this.lblCurrentPage.Text = value.ToString();
}
get
{
if (ViewState["CurrentPage"] == null) return 1;
return (int)ViewState["CurrentPage"];
}
}
#endregion
#region当前页序号
///
///当前页的序号
///
public int CurrentPageNo
{
get
{
if(this.txtToPage.Text.Trim() != "") return Convert.ToInt16(this.txtToPage.Text.Trim());
else return 1;
}
set
{
this.txtToPage.Text = value.ToString();
}
}
#endregion
#region页面的总数
///
///页面的总数,来自数据库查询设置
///
public int PageCount
{
get
{
try
{
return Convert.ToInt32(ViewState["PageCount"]);
}
catch
{
return 0;
}
}
set
{
ViewState["PageCount"] = value;
}
}
#endregion
#region每页记录数
///
///每页记录数
///
public int PageSize
{
get
{
if (ViewState["PageSize"] == null) return 15;
return (int)ViewState["PageSize"];
}
set
{
ViewState["PageSize"] = value;
}
}
#endregion
#region总共条数
public int TotalCount
{
get
{
try
{
return (int)ViewState["RecordCount"];
}
catch
{
return 0;
}
}
set
{
if (value == 0)
{
ViewState["PageCount"] = 0;
}
else if (value < PageSize)
{
ViewState["PageCount"] = 1;
}
else
{
if (value % PageSize == 0)
{
ViewState["PageCount"] = value / PageSize;
}
else
{
ViewState["PageCount"] = (value - value % PageSize) / PageSize + 1; }
}
ViewState["RecordCount"] = value;
this.lblTotalCount.Text = value.ToString();
this.lblNumPerPage.Text = PageSize.ToString();
this.lblTotalPage.Text = PageCount.ToString();
}
}
#endregion
#endregion
接下来就要写这个https://www.360docs.net/doc/9417397020.html,分页控件ImageButton 控件的对应的OnClick事件的代码了!我都已经做了注释,就直接粘贴代码了(总共有五个ImageButton控件)!
#region首页按钮事件
///
///首页
///
///
///
protected void imgBtnFirstPage_Click(object sender, ImageClickEventArgs e)
{
int PageOrder = 1;
if (JudgePageOrder(PageOrder) && (GoPage != null))
{
OnGoToPage(PageOrder);
}
imgBtnPrevPage.Enabled = false;//已经处于首页则上一页按钮不可用
if (this.PageCount != 1)//如果总页数不为1则使下一页按钮可用
{
imgBtnNextPage.Enabled = true;
}
}
#endregion
#region上一页按钮事件
///
///上一页
///
///
///
protected void imgBtnPrevPage_Click(object sender, ImageClickEventArgs e)
{
if (this.CurrentPage > 1)
{
int PageOrder = this.CurrentPage - 1;
if (JudgePageOrder(PageOrder))
{
OnGoToPage(PageOrder);
}
if (this.CurrentPage == 1)//如果当前页已经是第一页了,则是上一页按钮不可用 {
imgBtnPrevPage.Enabled = false;
}
if (this.CurrentPage != this.PageCount)//如果当前页不等于总页数,则使得下一页按钮可用
{
imgBtnNextPage.Enabled = true;
}
}
else
{
ScriptManager.RegisterStartupScript(this, this.GetType(), "info", "alert('这已经是第一页了!');", true);
return;
}
}
#endregion
#region上一页按钮事件
///
///下一页
///
///
///
protected void imgBtnNextPage_Click(object sender, ImageClickEventArgs e)
{
if (this.CurrentPage < this.PageCount)
{
int PageOrder = this.CurrentPage + 1;
if (JudgePageOrder(PageOrder))
{
OnGoToPage(PageOrder);
}
if (this.CurrentPage == this.PageCount)//如果当前页等于总页数则使得下一页按钮不可用
{
imgBtnNextPage.Enabled = false;
}
if (this.CurrentPage != 1)//如果当前页不等于1则使得前一页按钮可用
{
imgBtnPrevPage.Enabled = true;
}
}
else
{
ScriptManager.RegisterStartupScript(this, this.GetType(), "info", "alert('这已经是最后一页了!');", true);
return;
}
}
#endregion
#region尾页按钮事件
///
///尾页
///
///
///
protected void imgBtnLastPage_Click(object sender, ImageClickEventArgs e)
{
int PageOrder = this.PageCount;
if (JudgePageOrder(PageOrder))
{
OnGoToPage(PageOrder);
}
imgBtnNextPage.Enabled = false;//已经处于尾页,使下一页按钮不可用
if (this.PageCount != 1)//如果总页数不等于1,则使得前一页按钮可用
{
imgBtnPrevPage.Enabled = true;
}
}
#endregion
#region转到指定页按钮事件
///
///转到指定页
///
///
///
protected void imgBtnGoPage_Click(object sender, ImageClickEventArgs e)
{
try
{
if (string.IsNullOrEmpty(txtToPage.Text.Trim()))
{
return;
}
if (!IsInt(txtToPage.Text.Trim()))
{
ScriptManager.RegisterStartupScript(this, this.GetType(), "info", "alert('请输入整数!');", true);
return;
}
if (Convert.ToInt64(txtToPage.Text.Trim()) > PageCount)
{
ScriptManager.RegisterStartupScript(this, this.GetType(), "info", "alert('请输入小于最大页数的整数!');", true);
return;
}
if (Convert.ToInt32(txtToPage.Text.Trim()) < 1)
{
ScriptManager.RegisterStartupScript(this, this.GetType(), "info", "alert('请输入大于0的整数!');", true);
return;
}
int page = Convert.ToInt32(txtToPage.Text);
int PageOrder = page;
if (JudgePageOrder(PageOrder))
{
OnGoToPage(PageOrder);
}
}
catch
{
txtToPage.Text = "";
}
}
#endregion
大家发现没有,实现imgBtnGoPage_Click事件的时候调用了一个IsInt()方法,这个方法的实现如下:
#region验证用户输入转到页面的正确性
private bool IsInt(string toPage)
{
bool flag = false;
if (string.IsNullOrEmpty(toPage))
return flag;
else
{
flag = Regex.IsMatch(toPage, @"^-?\d+$");
}
return flag;
}
#endregion
好了,再仔细观察代码是不是发现,这几个事件里面都有一段相同的代码:
if (JudgePageOrder(PageOrder))
{
OnGoToPage(PageOrder);
}
我来详细的解释一下:
JudgePageOrder(PageOrder)用来判断跳转的页面是否合法(通俗的讲就是有没有超出页面范围): #region判断PageOrder的合法性
///
///判断PageOrder的合法性
///
///需要判断的PageOrder
///
private bool JudgePageOrder(int PageOrder)
{
if (PageOrder < 1)
return false;
if (PageOrder > PageCount)
return false;
return true;
}
#endregion
OnGoToPage(PageOrder)就是我们文章开始讲的核心了,是这个https://www.360docs.net/doc/9417397020.html,分页控件的核心!在后面的实例中我会告诉大家如何来用。先把代码罗列给大家:
protected virtual bool OnGoToPage(int gotoPageIndex)
{
if (GoPage != null)
{
this.CurrentPage = gotoPageIndex;
GoPage(gotoPageIndex);//触发核心事件,来关联数据
}
return true;
}
https://www.360docs.net/doc/9417397020.html,分页控件已经描述完了,由于个人不擅长讲解,所以请大家包涵。下面继续讲解这个https://www.360docs.net/doc/9417397020.html,分页控件的调用的一个实例!
前台代码有两点需要注意:
1.需要注册这个https://www.360docs.net/doc/9417397020.html,分页控件。
<%@Register src="DispartPage.ascx"tagname="DispartPage"tagprefix="uc1" %>
2.调用的代码是:
完整的代码如下:
<%@Page Language="C#"AutoEventWireup="true"CodeFile="CodeMgr.aspx.cs" Inherits="CodeMgr" %>
<%@Register Assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"Namespace="System.Web.UI"TagPrefix="asp" %>
<%@Register src="DispartPage.ascx"tagname="DispartPage"tagprefix="uc1" %>
下面来看后台代码的实现:
首选定义一个DataTable
#region Params
private DataTable dtType
{
set { ViewState["dtType"] = value; }
get { return (DataTable)ViewState["dtType"]; }
}
#endregion
页面初始化的时候我虚拟了一个DataTable并添加了40条数据。同时还注册了这个https://www.360docs.net/doc/9417397020.html,分页控件的开放事件!
#region页面加载初始化
protected void Page_Load(object sender, EventArgs e)
{
DispartPage1.GoPage += new component_DispartPage.GoPageHandler(DispartPage1_GoPage);
if (!IsPostBack)
{
dtType = new DataTable();
DataColumn dc1 = new DataColumn("code_type_no", Type.GetType("System.String"));
DataColumn dc2 = new DataColumn("code_type_name", Type.GetType("System.String"));
DataColumn dc3 = new DataColumn("status", Type.GetType("System.String"));
dtType.Columns.Add(dc1);
dtType.Columns.Add(dc2);
dtType.Columns.Add(dc3);
for (int i = 0; i < 40; i++)
{
DataRow dr = dtType.NewRow();
dr["code_type_no"] = i.ToString();
dr["code_type_name"] = "序号"+i.ToString();
dr["status"] = "1";
dtType.Rows.Add(dr);
}
DataBindGridview(dtType, 1);
}
}
#endregion
这个开放事件的代码如下:
#region分页跳转事件
private void DispartPage1_GoPage(int pageOrder)
{
DataBindGridview(dtType, pageOrder);
}
#endregion
大家有没有看到页面初始化跟这个页面跳转的事件的时候都调用了一个数据绑定的函数DataBindGridview(dtType, 1);
这个函数的实现代码如下:
#region邦定数据到GridView
private void DataBindGridview(DataTable dt, int pageOrder)
{
if (dt != null)
{
//给https://www.360docs.net/doc/9417397020.html,分页控件的属性赋值
DispartPage1.PageSize = grdType.PageSize;
DispartPage1.TotalCount = dt.Rows.Count;
DispartPage1.CurrentPage = pageOrder;
grdType.PageIndex = pageOrder - 1;
}
grdType.DataSource = dt;
grdType.DataBind();
}
#endregion
好了,至此本文就结束了,如果大家有什么疑问可以加我的微信:jkingzhu来与我进行交流!谢谢大家
源码下载地址如下:链接:https://www.360docs.net/doc/9417397020.html,/share/link?shareid=3858817458&uk=25237 2977 密码:q5js
C#(.net)分页控件源码(已测试)
分页控件的用法 align类: using System; namespace MyPaperControls { ///
javascript常用代码大全
Javascript常用代码大全 //打开模式对话框
//返回模式对话框的值 function okbtn_onclick() { var commstr=''; window.returnValue=commstr; window.close() ; } okbtn_onclick() //全屏幕打开IE 窗口 var winWidth=screen.availWidth ; var winHeight=screen.availHeight-20; window.open("main.aspx","surveyWindow","toolbar=no,wid th="+ winWidth +",height="+ winHeight +",top=0,left=0,scrollbars=yes,resizable=yes,center:yes,statu sbars=yes"); //脚本中中使用xml function initialize() { var xmlDoc var xslDoc xmlDoc = new ActiveXObject('Microsoft.XMLDOM') xmlDoc.async = false; xslDoc = new ActiveXObject('Microsoft.XMLDOM') xslDoc.async = false; xmlDoc.load("tree.xml") xslDoc.load("tree.xsl") folderTree.innerHTML = xmlDoc.documentElement.transformNode(xslDoc) } 一、验证类 1、数字验证内 1.1 整数 1.2 大于0的整数(用于传来的ID的验证) 1.3 负整数的验证 1.4 整数不能大于iMax 1.5 整数不能小于iMin 2、时间类 2.1 短时间,形如(13:04:06) 2.2 短日期,形如(2003-12-05) 2.3 长时间,形如(2003-12-05 13:04:06) 2.4 只有年和月。形如(2003-05,或者2003-5) 2.5 只有小时和分钟,形如(12:03) 3、表单类 3.1 所有的表单的值都不能为空 3.2 多行文本框的值不能为空。 3.3 多行文本框的值不能超过sMaxStrleng 3.4 多行文本框的值不能少于sMixStrleng 3.5 判断单选框是否选择。 3.6 判断复选框是否选择. 3.7 复选框的全选,多选,全不选,反选 3.8 文件上传过程中判断文件类型 4、字符类 4.1 判断字符全部由a-Z或者是A-Z的字字母组成 4.2 判断字符由字母和数字组成。 4.3 判断字符由字母和数字,下划线,点号组成.且开头的只能是下划线和字母 4.4 字符串替换函数.Replace(); 5、浏览器类 5.1 判断浏览器的类型 5.2 判断ie的版本 5.3 判断客户端的分辨率 6、结合类 6.1 email的判断。 6.2 手机号码的验证 6.3 身份证的验证 二、功能类 1、时间与相关控件类 1.1 日历 1.2 时间控件 1.3 万年历 1.4 显示动态显示时钟效果(文本,如OA中时间) 1.5 显示动态显示时钟效果(图像,像手表) 2、表单类 2.1 自动生成表单 2.2 动态添加,修改,删除下拉框中的元素 2.3 可以输入内容的下拉框 2.4 多行文本框中只能输入iMax文字。如果多输入了,自动减少到iMax个文字(多用于短信发送) 3、打印类 3.1 打印控件 4、事件类 4.1 屏蔽右键 4.2 屏蔽所有功能键 4.3 --> 和<-- F5 F11,F9,F1 4.4 屏蔽组合键ctrl+N 5、网页设计类 5.1 连续滚动的文字,图片Bootstrap组件功能:路径组件、分页组件、标签组件和徽章组件
https://www.360docs.net/doc/9417397020.html, Bootstrap组件功能:路径组件、分页组件、标签组件和徽章组件 本节课我们主要学习一下Bootstrap的四个组件功能:路径组件、分页组件、标签组件和徽章组件。 一.路径组件 路径组件也叫做面包屑导航。 //面包屑导航
https://www.360docs.net/doc/9417397020.html,
SpringBoot实现分页插件
实现分页插件的具体步骤: 1.导入jar包
JavaScript 经典代码大全
代码一 1. oncontextmenu="window.event.returnvalue=false" 将彻底屏蔽鼠标右键
no |
asp文字显示代码
Bootstrap Paginator分页插件与ajax相结合实现动态无刷新分页效果
这篇文章主要介绍了Bootstrap Paginator分页插件与ajax相结合实现动态无刷新分页效果,非常不错,具有参考借鉴价值,感兴趣的朋友一起看下吧 Bootstrap Paginator分页插件下载地址: DownloadVisit Project in GitHub 1.这是需要分页的页面放的js函数: <span style="font-size:14px;">function paging(page){ $.ajax({ type: "GET", url: "${ctx}/api/v1/user/1/"+(page-1)+"/5", dataType:"json", success: function(msg){ ....//省略(查询出来数据) } }); $.ajax({ type: "GET", url:"${ctx}/api/v1/user/count/1", dataType:"json", success:function(msg){ var pages = Math.ceil(msg.data/5);//这里data里面有数据总量 var element = $('#pageUl');//对应下面ul的ID var options = { bootstrapMajorVersion:3, currentPage: page,//当前页面 numberOfPages: 5,//一页显示几个按钮(在ul里面生成5个li) totalPages:pages //总页数 } element.bootstrapPaginator(options); } }); }</span> 页面: <span style="font-size:14px;"><ul class="pagination" id="pageUl"> </ul></span> *li里面自动生成的 2.最重要也是最核心的是要自己改下bootstrap-paginator.js源文件,如下: <span style="font-size:14px;">onPageClicked: function (event, originalEvent, type, page) { //show the corresponding page and retrieve the newly built item related to the page clicked before for the event return var currentTarget = $(event.currentTarget); switch (type) {