Asp.Net WebForm 分页

一、 前言

Asp.Net WebForm 内置的DataPager让人十分蛋疼

本文使用的分页控件是第三方分页控件 AspNetPager,下载地址:

链接: http://pan.baidu.com/s/1eQJ2HR8 密码: aost

相关属性及其效果图:

二、使用第三方分页控件 AspNetPager

第一步:显示未分页时的数据

  

  前端代码:

    注意:将ListView控件的EnableViewState="False"。说明即使是EnableViewState="False",不影响分页的实现。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ListView分页AspNetPager第三方控件.aspx.cs" Inherits="Focus.Asp.WebForm.Czbk.Focus.ListView.ListView分页AspNetPager第三方控件" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ListView ID="ListView1" runat="server" EnableViewState="False">
<%--asp.net 3.5的LayoutTemplate是必须的,asp.net 4.0的LayoutTemplate不是必须的--%>
<LayoutTemplate>
<div style="border:solid seagreen;">
<table>
<thead>
<tr>
<th>Id</th>
<th>种类</th>
</tr>
</thead>
<tbody>
<%--显示写LayoutTemplate时必须有一个占位符(可以是任意类型),
但是id必须是itemPlaceholder,项占位符控件还必须指定 runat="server"。--%>
<asp:PlaceHolder runat="server" ID="itemPlaceholder"></asp:PlaceHolder>
</tbody>
</table>
</div>
</LayoutTemplate>
<ItemTemplate>
<div>
<tr>
<td><asp:Label runat="server"><%#Eval("Id") %></asp:Label></td>
<td><asp:Label runat="server"><%#Eval("Kind") %></asp:Label></td>
</tr>
</div>
</ItemTemplate>
<AlternatingItemTemplate>
<div >
<tr>
<td><asp:Label runat="server"><%#Eval("Id") %></asp:Label></td>
<td><asp:Label runat="server"><%#Eval("Kind") %></asp:Label></td>
</tr>
</div>
</AlternatingItemTemplate>
<EmptyDataTemplate>
抱歉,没有数据
</EmptyDataTemplate>
</asp:ListView> </div>
</form>
</body>
</html>

  后台代码绑定数据:

        protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindData();
}
} private void BindData()
{
List<Electronics> dataSource = DataSourceTemplete.GetElectronics(); this.ListView1.DataSource = dataSource;
this.ListView1.DataBind(); }

  其中 用静态类DataSourceTemplete来模拟数据源,数据源的结构类是Electronics,它们的代码如下:

  DataSourceTemplete.cs:

using System;
using System.Collections.Generic;
using System.Data.Entity.Migrations.Model;
using System.Linq;
using System.Threading;
using System.Web;
using Focus.Asp.WebForm.Czbk.Focus.ValidateControl; namespace Focus.Asp.WebForm.Czbk.Focus.Helper
{
public static class DataSourceTemplete
{
private static List<Electronics> electronics = new List<Electronics>()
{
//new Electronics{Id = -1, Kind="--请选择--"},
new Electronics{Id = , Kind="电脑"},
new Electronics{Id = , Kind="手机"},
new Electronics{Id = , Kind="平板电脑"},
new Electronics{Id = , Kind="一体机"},
new Electronics{Id = , Kind="路由器"},
new Electronics{Id = , Kind="吹风机"},
new Electronics{Id = , Kind="CPU"},
new Electronics{Id = , Kind="散热器"},
new Electronics{Id = , Kind="主板"},
new Electronics{Id = , Kind="内存条"}, }; public static List<Electronics> GetElectronics()
{
return electronics;
} public static void Add(Electronics electronic)
{
electronics.Add(electronic);
} public static void Delete(int id)
{
var toDel = electronics.First(i => i.Id == id);
electronics.Remove(toDel);
} public static void Edit(Electronics electronic)
{
var toEdit = electronics.First(i => i.Id == electronic.Id);
toEdit.Kind = electronic.Kind;
} public static Electronics Get(int id)
{
return electronics.First(i => i.Id == id);
}
}
}

  Electronics.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace Focus.Asp.WebForm.Czbk.Focus.ValidateControl
{
public class Electronics
{
public int Id { get; set; }
public string Kind { get; set; }
}
}

  第二步:添加分页控件

  先在项目中引入AspNetPager.dll;

  前端代码中添加添加分页控件,

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

....
<form id="form1" runat="server">
<div>
<asp:ListView ID="ListView1" runat="server" EnableViewState="False">
.....
</asp:ListView>
<div>
<aspNetPager:AspNetPager runat="server" ID="AspNetPager1"
AlwaysShow="True"
OnPageChanged="AspNetPager1_OnPageChanged"
UrlPaging="True"
NumbericButtonCount ="5"
NumericButtonTextFormatString="[{0}]"
ShowCustomInfoSection="Right"
ShowPrevNext="True"
ShowPageIndex="True"
ShowFirstLast="True"
FirstPageText="首页"
LastPageText="末页"
PrevPageText="上一页"
NextPageText="下一页"
ShowNavigationToolTip="True"
TextBeforeInputBox="第"
ShowInputBox='Always'
TextAfterInputBox="页"
SubmitButtonText="确认"> </aspNetPager:AspNetPager>
</div>
</div>
</form>

  第三步:为分页控件添加OnPageChanged事件处理:

  其中,第一步中BindData();也相应的添加相关代码,以实现分页相关逻辑。  

  后台代码:

        private int pageIndex;
private int pageSize = Convert.ToInt32(ConfigurationManager.AppSettings["pageSize"]);
private int totalCount; ........ protected void AspNetPager1_OnPageChanged(object sender, EventArgs e)
{
BindData(); /*设置分页控件属性*/
this.AspNetPager1.CustomInfoHTML = "记录总数:<b>" + AspNetPager1.RecordCount.ToString() + "</b>";
this.AspNetPager1.CustomInfoHTML += " 总页数:<b>" + AspNetPager1.PageCount.ToString() + "</b>";
this.AspNetPager1.CustomInfoHTML += " 当前页:<font color=\"red\"><b>" + AspNetPager1.CurrentPageIndex.ToString() + "</b></font>";
} private void BindData()
{
List<Electronics> dataSource = DataSourceTemplete.GetElectronics(); pageIndex = this.AspNetPager1.CurrentPageIndex;
totalCount = DataSourceTemplete.GetElectronics().Count; this.ListView1.DataSource = dataSource.Skip((pageIndex-1) * pageSize)
.Take(pageSize)
.ToList();
this.ListView1.DataBind(); /*设置分页控件属性*/
this.AspNetPager1.RecordCount = totalCount;//所有数据的总数,必须设置该值。
this.AspNetPager1.PageSize = pageSize;
}

其中,在web.config文件中配置PageSize(每页显示多少项数据):

<configuration>
<appSettings>
<add key="pageSize" value=""/>
</appSettings>

  并通过如下代码获取:

private int pageSize = Convert.ToInt32(ConfigurationManager.AppSettings["pageSize"]);

页面完整代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ListView分页AspNetPager第三方控件.aspx.cs" Inherits="Focus.Asp.WebForm.Czbk.Focus.ListView.ListView分页AspNetPager第三方控件" %>
<%@ Register Assembly="AspNetPager" Namespace="Wuqi.Webdiyer" TagPrefix="aspNetPager" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ListView ID="ListView1" runat="server" EnableViewState="False">
<%--asp.net 3.5的LayoutTemplate是必须的,asp.net 4.0的LayoutTemplate不是必须的--%>
<LayoutTemplate>
<div style="border:solid seagreen;">
<table>
<thead>
<tr>
<th>Id</th>
<th>种类</th>
</tr>
</thead>
<tbody>
<%--显示写LayoutTemplate时必须有一个占位符(可以是任意类型),
但是id必须是itemPlaceholder,项占位符控件还必须指定 runat="server"。--%>
<asp:PlaceHolder runat="server" ID="itemPlaceholder"></asp:PlaceHolder>
</tbody>
</table>
</div>
</LayoutTemplate>
<ItemTemplate>
<div>
<tr>
<td><asp:Label runat="server"><%#Eval("Id") %></asp:Label></td>
<td><asp:Label runat="server"><%#Eval("Kind") %></asp:Label></td>
</tr>
</div>
</ItemTemplate>
<AlternatingItemTemplate>
<div >
<tr>
<td><asp:Label runat="server"><%#Eval("Id") %></asp:Label></td>
<td><asp:Label runat="server"><%#Eval("Kind") %></asp:Label></td>
</tr>
</div>
</AlternatingItemTemplate>
<EmptyDataTemplate>
抱歉,没有数据
</EmptyDataTemplate>
</asp:ListView>
<div>
<aspNetPager:AspNetPager runat="server" ID="AspNetPager1"
AlwaysShow="True"
OnPageChanged="AspNetPager1_OnPageChanged"
UrlPaging="True"
NumbericButtonCount ="3"
NumericButtonTextFormatString="[{0}]"
ShowCustomInfoSection="Right"
ShowPrevNext="True"
ShowPageIndex="True"
ShowFirstLast="True"
FirstPageText="首页"
LastPageText="末页"
PrevPageText="上一页"
NextPageText="下一页"
ShowNavigationToolTip="True"
TextBeforeInputBox="第"
ShowInputBox='Always'
TextAfterInputBox="页"
SubmitButtonText="确认"> </aspNetPager:AspNetPager>
</div>
</div>
</form>
</body>
</html>

后台完整代码:

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Focus.Asp.WebForm.Czbk.Focus.Helper;
using Focus.Asp.WebForm.Czbk.Focus.ValidateControl; namespace Focus.Asp.WebForm.Czbk.Focus.ListView
{
public partial class ListView分页AspNetPager第三方控件 : System.Web.UI.Page
{
private int pageIndex;
private int pageSize = Convert.ToInt32(ConfigurationManager.AppSettings["pageSize"]);
private int totalCount; protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindData();
}
} protected void AspNetPager1_OnPageChanged(object sender, EventArgs e)
{
BindData(); /*设置分页控件属性*/
this.AspNetPager1.CustomInfoHTML = "记录总数:<b>" + AspNetPager1.RecordCount.ToString() + "</b>";
this.AspNetPager1.CustomInfoHTML += " 总页数:<b>" + AspNetPager1.PageCount.ToString() + "</b>";
this.AspNetPager1.CustomInfoHTML += " 当前页:<font color=\"red\"><b>" + AspNetPager1.CurrentPageIndex.ToString() + "</b></font>";
} private void BindData()
{
List<Electronics> dataSource = DataSourceTemplete.GetElectronics(); pageIndex = this.AspNetPager1.CurrentPageIndex;
totalCount = DataSourceTemplete.GetElectronics().Count; this.ListView1.DataSource = dataSource.Skip(pageIndex- * pageSize)
.Take(pageSize)
.ToList();
;
this.ListView1.DataBind(); /*设置分页控件属性*/
this.AspNetPager1.RecordCount = totalCount;//所有数据的总数,必须设置该值。
this.AspNetPager1.PageSize = pageSize;
}
}
}

【Asp.Net WebFrom】分页的更多相关文章

  1. ASP.NET MVC分页组件MvcPager 2.0版发布暨网站全新改版

    MvcPager分页控件是在ASP.NET MVC Web应用程序中实现分页功能的一系列扩展方法,该分页控件的最初的实现方法借鉴了网上流行的部分源代码, 尤其是ScottGu的PagedList< ...

  2. ASP.NET MVC分页实现之改进版-增加同一个视图可设置多个分页

    我之前就已经实现了ASP.NET MVC分页(查看该博文),但它有局限性,必须确保在同一个视图中只能有一处分页,若需要在同一个视图中设置多个分页,却无能为力,为此,我重新对原先的代码进行了优化,增加了 ...

  3. 基于Bootstrap的Asp.net Mvc 分页

    基于Bootstrap的Asp.net Mvc 分页的实现 最近写了一个mvc 的 分页,样式是基于 bootstrap 的 ,提供查询条件,不过可以自己写样式根据个人的喜好,以此分享一下.首先新建一 ...

  4. [Asp.net]AspNetPager分页组件

    引言 在基于Asp.net的内网系统中,分页功能是最常用的,用的最多的组件就是AspNetPager. AspNetPager 官网:http://www.webdiyer.com/aspnetpag ...

  5. Asp.Net真分页技术

    最近学校要做课题,闲来没事研究了下Asp.net的分页,我使用Repeater进行数据的绑定,每次从数据库读取到8条数据填充到Repeater中,这样搞可以降低数据库的压力,提高效率. 效果图如下: ...

  6. Asp.net+JS 分页

    function pagestart() {//初始化页面,获取公司新闻 $("#pagediv").hide(); $("); var pagesize = $(&qu ...

  7. cPage分页,asp.net自定义分页,url传值分页,支持datalist、gridview、Repeater等

    asp.net分页是最最常用的功能,实现方式也很多,使用不同的控件有不同的分页方式. 下面分享一个我们团队内部使用了多年的一个分页控件cPage,是自己设计编写,没有冗余,简单.快速. cPage,现 ...

  8. PagedDataSource、Repeater以及AspNetPager在ASP.NET上分页。

    一.前台使用服务器标签 1.1使用Repeater控件 <asp:Repeater ID="Repeater1" runat="server"> & ...

  9. ASP.NET MVC分页实现

    ASP.NET MVC中不能使用分页控件,所以我就自己写了一个分页局部视图,配合PageInfo类,即可实现在任何页面任意位置呈现分页,由于采用的是基于POST分页方式,所以唯一的限制就是必须放在FO ...

随机推荐

  1. [Android] 多重使用Fragment 中的onFragmentInteraction

    新建的一个Fragment,被一个Activity使用,那么这个Activity需要继承一个接口: public class MainActivity extends Activity impleme ...

  2. 你不知道的HttpHandler相关知识

    一.关于IHttpHandler.IsReusable 很多人不明白,这哥们到底干嘛的,估计是微软最初的一个想法--让一个对象可以一直不断地被重复使用 ,但这个想法不成熟,会带来很多隐藏问题,一个对象 ...

  3. 把Git Repository建到U盘上去(转)

    把Git Repository建到U盘上去 转 把Git Repository建到U盘上去 Git很火.原因有三: 它是大神Linus Torvalds的作品,天然地具备神二代的气质和品质: 促进了生 ...

  4. ASP.Net MVC开发基础学习笔记(3):Razor视图引擎、控制器与路由机制学习

    一.天降神器“剃须刀” — Razor视图引擎 1.1 千呼万唤始出来的MVC3.0 在MVC3.0版本的时候,微软终于引入了第二种模板引擎:Razor.在这之前,我们一直在使用WebForm时代沿留 ...

  5. 使用visualVM 1.3.8(visualvm_138-ml.zip) 监控远程Tomcat运行情况

    服务端CentOS6.4 x64安装的是jdk1.7 下载visualVM1.3.8-ml 也就是多语言版本,包含中文,界面用起来方便.官方下载地址比较慢,百度上搜索的都是csdn,51cto等必须登 ...

  6. LAMP网站架构分析

    转自:http://www.williamlong.info/archives/1908.html LAMP(Linux-Apache-MySQL-PHP)网站架构是目前国际流行的Web框架,该框架包 ...

  7. python log 层次结构

    文件结构 - run.py - b -- __init__.py run.py import logging import b log = logging.getLogger("" ...

  8. iOS 多线程学习笔记 —— NSOperation

    本文复制.参考自文章:iOS多线程编程之NSOperation和NSOperationQueue的使用 ,主要为了加强个人对知识的理解和记忆,不做他用.原作者声明: 著作权声明:本文由http://b ...

  9. 【Maven实战】传递性依赖的问题

    在上一篇文章中我们已经介绍了依赖性,这次我们再来介绍下传递依赖的问题,首先我们还是在上篇文章基础之上进行编写. 1.上篇文章中已经建立了一个user-core的模块,现在首先再建立一个user-log ...

  10. java中将list、map对象写入文件

    链接地址:http://blog.sina.com.cn/s/blog_4a4f9fb50101p6jv.html     推荐:凤爪女瓜子男怪象该谁反思伦敦房价为什么持续暴涨 × wvqusrtg个 ...