【Asp.Net WebFrom】分页

时间:2023-01-05 14:53:37

Asp.Net WebForm 分页

一、 前言

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

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

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

相关属性及其效果图:

【Asp.Net WebFrom】分页

二、使用第三方分页控件 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&period;NET MVC分页组件MvcPager 2&period;0版发布暨网站全新改版

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

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

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

  3. 基于Bootstrap的Asp&period;net Mvc 分页

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

  4. &lbrack;Asp&period;net&rsqb;AspNetPager分页组件

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

  5. Asp&period;Net真分页技术

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

  6. Asp&period;net&plus;JS 分页

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

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

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

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

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

  9. ASP&period;NET MVC分页实现

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

随机推荐

  1. 异步select

    server coding: #!/usr/bin/python # -*- coding: utf-8 -*- import select import socket import sys impo ...

  2. 利用Jersey构建REST之入门实例

    一.依赖包 1.目录结构如下:

  3. wxWidgets Tutorial

    wxWidgets Tutorial网站整理 两个重要的教程网站:1:点这里:2:点这里. 还有一个wxWidgets项目参考的网站:点这里. 已经翻译好的中文教程:点这里. 参考书籍:<wxW ...

  4. 【动态规划】Codeforces 698A &amp&semi; 699C Vacations

    题目链接: http://codeforces.com/problemset/problem/698/A http://codeforces.com/problemset/problem/699/C ...

  5. POJ 2029 DP &vert;&vert; 暴力

    在大矩形中找一个小矩形 使小矩形包括的*最多 暴力或者DP  水题 暴力: #include "stdio.h" #include "string.h" int ...

  6. Qunit 和 jsCoverage使用方法

    Qunit 和 jsCoverage使用方法(js单元测试) 近日在网上浏览过很多有关js单元测试相关的文档,工具,但是,针对Qunit 和 jsCoverage使用方法,缺少详细说明,对于初入前端的 ...

  7. ajax上传图片

    选择文件后 ajax上传图片到后台,后台执行保存操作,返回上传的图片路径,显示到页面 需要引入ajaxfileupload.js js代码 <script type="text/jav ...

  8. 需求收集实例 二 之 GF Phase 2

    GF Phase 2 做B2B的site, 需求收集过程与 需求收集过程实例之 - GF Phase 1主要的不同是在phase 1 开发在需求规格文档敲定后开始,而phase 2 把feature ...

  9. Linux常用目录结构

    此文引用自51CTO博客,博主snail_hf,原文地址<Linux系统目录详解(全而易懂)> 目录结构 / 根目录,处于Linux系统树形结构的最顶端,它是Linux文件系统的入口,所有 ...

  10. 使用mongoVUE删除大量数据的情况下失效问题

    昨天有一个系统出现了问题,导致半夜时大量的错误数据产生,早晨一早接到上边通知让把这些数据尽数删除. 不可否认在数据操作时mongoVUE更加直观,因此一般情况下我也都是使用这个工具,但是今天却出现了问 ...