【Asp.Net WebFrom】分页
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】分页的更多相关文章
- ASP.NET MVC分页组件MvcPager 2.0版发布暨网站全新改版
MvcPager分页控件是在ASP.NET MVC Web应用程序中实现分页功能的一系列扩展方法,该分页控件的最初的实现方法借鉴了网上流行的部分源代码, 尤其是ScottGu的PagedList< ...
- ASP.NET MVC分页实现之改进版-增加同一个视图可设置多个分页
我之前就已经实现了ASP.NET MVC分页(查看该博文),但它有局限性,必须确保在同一个视图中只能有一处分页,若需要在同一个视图中设置多个分页,却无能为力,为此,我重新对原先的代码进行了优化,增加了 ...
- 基于Bootstrap的Asp.net Mvc 分页
基于Bootstrap的Asp.net Mvc 分页的实现 最近写了一个mvc 的 分页,样式是基于 bootstrap 的 ,提供查询条件,不过可以自己写样式根据个人的喜好,以此分享一下.首先新建一 ...
- [Asp.net]AspNetPager分页组件
引言 在基于Asp.net的内网系统中,分页功能是最常用的,用的最多的组件就是AspNetPager. AspNetPager 官网:http://www.webdiyer.com/aspnetpag ...
- Asp.Net真分页技术
最近学校要做课题,闲来没事研究了下Asp.net的分页,我使用Repeater进行数据的绑定,每次从数据库读取到8条数据填充到Repeater中,这样搞可以降低数据库的压力,提高效率. 效果图如下: ...
- Asp.net+JS 分页
function pagestart() {//初始化页面,获取公司新闻 $("#pagediv").hide(); $("); var pagesize = $(&qu ...
- cPage分页,asp.net自定义分页,url传值分页,支持datalist、gridview、Repeater等
asp.net分页是最最常用的功能,实现方式也很多,使用不同的控件有不同的分页方式. 下面分享一个我们团队内部使用了多年的一个分页控件cPage,是自己设计编写,没有冗余,简单.快速. cPage,现 ...
- PagedDataSource、Repeater以及AspNetPager在ASP.NET上分页。
一.前台使用服务器标签 1.1使用Repeater控件 <asp:Repeater ID="Repeater1" runat="server"> & ...
- ASP.NET MVC分页实现
ASP.NET MVC中不能使用分页控件,所以我就自己写了一个分页局部视图,配合PageInfo类,即可实现在任何页面任意位置呈现分页,由于采用的是基于POST分页方式,所以唯一的限制就是必须放在FO ...
随机推荐
- spark概论
一.概述 1.轻:(1)采用语言简洁的scala编写:(2)利用了hadoop和mesos的基础设施 2.快:spark的内存计算.数据本地性和传输优化.调度优化,使其在迭代机器学习,ad-hoc ...
- android空鼠修改
抛弃盒子自带遥控器后,又不满意改键红外遥控器,选择飞鼠及无线键鼠成为最终方案.问题是:菜单键如何实现!其实很简单:即插即用USB无线飞鼠及键鼠套装只涉及2个文件:system/usr/layout/G ...
- delphi常用函数过程
数据类型转化 1.1. 数值和字符串转化 Procedure Str(X [: Width [ : Decimals ]]; var S); 将数值X按照一定格式转化成字符串S.Wid ...
- Perl 随机数和随机密码的产生
Perl有着强大的随机数产生函数rand(),下面的代码详细介绍其应用 #!/usr/bin/perl # use strict; use warnings; # 0~1之间 $rando ...
- Python学习教程(learning Python)--3.3 分支语句的条件表达式详解
本节主要讨论分支语句的条件表达式问题. 在if或者if-else分支控制语句里由于都用到条件判断(表达式是真还是假),条件判断可以是一种关系运算也可以是布尔表达式. 本节将对if及if-else语句的 ...
- 在WPF程序中将控件所呈现的内容保存成图像(转载)
在WPF程序中将控件所呈现的内容保存成图像 转自:http://www.cnblogs.com/TianFang/archive/2012/10/07/2714140.html 有的时候,我们需要将控 ...
- open/fopen read/fread write/fwrite区别
fopen /open区别 UNIX环境下的C 对二进制流文件的读写有两套班子:1) fopen,fread,fwrite ; 2) open, read, write这里简单的介绍一下他们的区别.1 ...
- python中的多继承
python和C++一样,支持多继承.概念虽然容易,但是困难的工作是如果子类调用一个自身没有定义的属性,它是按照何种顺序去到父类寻找呢,尤其是众多父类中有多个都包含该同名属性. class P1 #( ...
- Windows Phone Emoji
今天基于项目的需要,研究了一下windows phone 8里面的Emoji实现.如果大家用过wp版本的微信或者qq,相比一定对它里面的表情符号影像深刻吧!是的,只要你细看一下,其实在微信里面包括两种 ...
- bash: 避免命令重复执行的简单脚本
1. 根据命令生成md5做为文件名保存当前进程的pid2. 使用exec执行命令3. 如果再次执行, 使用ps -p检测上次pid是否有效, 如果是则exit 200.否则重复1.hadoop@ubu ...