AJAXA进行分页(2)
查询功能是开发中最重要的一个功能,大量数据的显示,我们用的最多的就是分页。
在ASP.NET 中有很多数据展现的控件,比如用的最多的GridView,它同时也自带了分页的功能。但是我们知道用GridView来显示数据,如果没有禁用 ViewState,页面的大小会是非常的大的。而且平时我们点击首页,下一页,上一页,尾页这些功能都是会引起页面回发的,也就是需要完全跟服务器进行 交互,来回响应的时间,传输的数据量都是很大的。AJAX的分页可以很好的解决这些问题。
开发的坏境是:jQuery AJAX+Northwind。
具体的步骤:
SearchCustomer.aspx:
- <script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script>
- <script type="text/javascript">
- var pageIndex = ;
- var pageSize = ;
- $(function () {
- $("#btnSearch").click(function () {
- /*
- name 顾客的名字, 文本框中输入的内容
- 0 表示的是第1页
- 10 每页的大小
- */
- var name = $("#txtSearch").val();
- pageIndex = ;
- AjaxGetData(name, pageIndex, pageSize);
- });
- });
- function AjaxGetData(name, index, size) {
- $.ajax({
- url: "jQueryPaging.aspx",
- type: "Get",
- data: "Name=" + name + "&PageIndex=" + index + "&PageSize=" + size,
- dataType: "json",
- success: function (data) {
- var htmlStr = "";
- htmlStr += "<table>"
- htmlStr += "<thead>"
- htmlStr += "<tr><td>CustomerID</td><td>CompanyName</td><td>ContactName</td><td>ContactTitle</td><td>Address</td><td>City</td></tr>"
- htmlStr += "</thead>";
- htmlStr += "<tbody>"
- for (var i = ; i < data.Customers.length; i++) {
- htmlStr += "<tr>";
- htmlStr += "<td>" + data.Customers[i].CustomerID + "</td>"
- + "<td>" + data.Customers[i].CompanyName + "</td>"
- + "<td>" + data.Customers[i].ContactName + "</td>"
- + "<td>" + data.Customers[i].ContactTitle + "</td>"
- + "<td>" + data.Customers[i].Address + "</td>"
- + "<td>" + data.Customers[i].City + "</td>"
- htmlStr += "</tr>";
- }
- htmlStr += "</tbody>";
- htmlStr += "<tfoot>";
- htmlStr += "<tr>";
- htmlStr += "<td colspan='6'>";
- htmlStr += "<span>共有记录" + data.Count + ";共<span id='count'>" + (data.Count % == ? parseInt(data.Count / ) : parseInt(data.Count / + )) + "</span>页" + "</span>";
- htmlStr += "<a href='javascript:void' onclick='GoToFirstPage()' id='aFirstPage' >首 页</a> ";
- htmlStr += "<a href='javascript:void' onclick='GoToPrePage()' id='aPrePage' >前一页</a> ";
- htmlStr += "<a href='javascript:void' onclick='GoToNextPage()' id='aNextPage'>后一页</a> ";
- htmlStr += "<a href='javascript:void' onclick='GoToEndPage()' id='aEndPage' >尾 页</a> ";
- htmlStr += "<input type='text' /><input type='button' value='跳转' onclick='GoToAppointPage(this)' /> ";
- htmlStr += "</td>";
- htmlStr += "</tr>";
- htmlStr += "</tfoot>";
- htmlStr += "</table>";
- $("#divSearchResult").html(htmlStr);
- },
- error: function (XMLHttpRequest, textStatus, errorThrown) {
- alert(XMLHttpRequest);
- alert(textStatus);
- alert(errorThrown);
- }
- });
- }
- //首页
- function GoToFirstPage() {
- pageIndex = ;
- AjaxGetData($("#txtSearch").val(), pageIndex, pageSize);
- }
- //前一页
- function GoToPrePage() {
- pageIndex -= ;
- pageIndex = pageIndex >= ? pageIndex : ;
- AjaxGetData($("#txtSearch").val(), pageIndex, pageSize);
- }
- //后一页
- function GoToNextPage() {
- if (pageIndex + < parseInt($("#count").text())) {
- pageIndex += ;
- }
- AjaxGetData($("#txtSearch").val(), pageIndex, pageSize);
- }
- //尾页
- function GoToEndPage() {
- pageIndex = parseInt($("#count").text()) - ;
- AjaxGetData($("#txtSearch").val(), pageIndex, pageSize);
- }
- //跳转
- function GoToAppointPage(e) {
- var page = $(e).prev().val();
- if (isNaN(page)) {
- alert("请输入数字!");
- }
- else {
- var tempPageIndex = pageIndex;
- pageIndex = parseInt($(e).prev().val())-;
- if (pageIndex < || pageIndex >= parseInt($("#count").text())) {
- pageIndex = tempPageIndex;
- alert("请输入有效的页面范围!");
- }
- else {
- AjaxGetData($("#txtSearch").val(), pageIndex, pageSize);
- }
- }
- }
- </script>
数据的传输用的JSON格式。大家知道JSON是轻量级别的数据传输。前台的展现时用的table。这样生成的HTML代码很简洁。
HTML如下:
- <div>
- <input type="text" id="txtSearch" />
- <input type="button" id="btnSearch" value="Search" />
- </div>
- <div id="divSearchResult">
- </div>
- jQueryPaging.aspx页面的CS代码如下:
- public partial class jQueryPaging : System.Web.UI.Page
- {
- protected void Page_Load(object sender, EventArgs e)
- {
- Int32 pageIndex=Int32.MinValue;
- Int32 pageSize=Int32.MinValue;
- String name=String.Empty;
- JavaScriptSerializer jss=new JavaScriptSerializer();
- if(Request["Name"]!=null)
- {
- name=Request["Name"].ToString();
- if (Request["PageIndex"] != null)
- {
- pageIndex = Int32.Parse(Request["PageIndex"].ToString());
- pageSize = Request["PageSize"] != null ? Int32.Parse(Request["PageSize"].ToString()) : ;
- IList<Customer> customersLists = new List<Customer>();
- Customer c = null;
- DataSet ds= LookDataFromDB(name,pageIndex,pageSize);
- foreach (DataRow row in ds.Tables[].Rows)
- {
- c = new Customer();
- c.CustomerID = row["CustomerID"].ToString();
- c.CompanyName = row["CompanyName"].ToString();
- c.ContactName = row["ContactName"].ToString();
- c.ContactTitle = row["ContactTitle"].ToString();
- c.Address = row["Address"].ToString();
- c.City = row["City"].ToString();
- customersLists.Add(c);
- }
- if (customersLists.Count>)
- {
- Response.Write("{\"Count\":"+ds.Tables[].Rows[][]+",\"Customers\":"+jss.Serialize(customersLists)+"}");
- Response.End();
- }
- }
- }
- }
- private DataSet LookDataFromDB(string name, int pageIndex, int pageSize)
- {
- SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString);
- conn.Open();
- SqlCommand cmd = new SqlCommand();
- cmd.Connection = conn;
- cmd.CommandType = CommandType.StoredProcedure;
- cmd.CommandText = "SearchCustomerByName";
- cmd.Parameters.Add(new SqlParameter("@name",name));
- cmd.Parameters.Add(new SqlParameter("@pageIndex",pageIndex));
- cmd.Parameters.Add(new SqlParameter("@pageSize", pageSize));
- SqlDataAdapter dataAdapter = new SqlDataAdapter(cmd);
- DataSet ds = new DataSet();
- try
- {
- dataAdapter.Fill(ds);
- }
- catch (Exception)
- {
- }
- finally
- {
- if (dataAdapter != null)
- {
- dataAdapter.Dispose();
- }
- if (cmd != null)
- {
- cmd.Dispose();
- }
- if (conn != null)
- {
- conn.Dispose();
- }
- }
- return ds;
- }
- }
- 还有我们在CS中定义的Model类:
- public class Customer
- {
- public String CustomerID { get; set; }
- public String CompanyName { get; set; }
- public String ContactName { get;set;}
- public String ContactTitle { get; set; }
- public String Address { get; set; }
- public String City { get; set; }
- }
- SearchCustomerByName 存储过程的代码如下:
- SET ANSI_NULLS ON
- GO
- SET QUOTED_IDENTIFIER ON
- GO
- Create PROCEDURE SearchCustomerByName
- @name nvarchar(),
- @pageIndex int,
- @pageSize int
- AS
- BEGIN
- SET NOCOUNT ON;
- select t.CustomerID,t.CompanyName,t.ContactName,t.ContactTitle,t.Address,t.City from
- (
- select Row_Number() over (order by CustomerID) AS RowNum,* from Customers where ContactName like '%'+@name+'%'
- ) t
- where t.RowNum between @pageIndex*+ and (@pageIndex+)*
- select count(*) from Customers
- where ContactName like '%'+@name+'%'
- END
- GO
这个版本其实很多的功能点都是没有考虑到的,仅仅是个示例,大家可以在自己的实际项目中修改以上的功能来满足自己的需求。
AJAXA进行分页(2)的更多相关文章
- 记一次SQLServer的分页优化兼谈谈使用Row_Number()分页存在的问题
最近有项目反应,在服务器CPU使用较高的时候,我们的事件查询页面非常的慢,查询几条记录竟然要4分钟甚至更长,而且在翻第二页的时候也是要这么多的时间,这肯定是不能接受的,也是让现场用SQLServerP ...
- js实现前端分页页码管理
用JS实现前端分页页码管理,可以很美观的区分页码显示(这也是参考大多数网站的分页页码展示),能够有很好的用户体验,这也是有业务需要就写了一下,还是新手,经验不足,欢迎指出批评! 首先先看效果图: 这是 ...
- JdbcTemplate+PageImpl实现多表分页查询
一.基础实体 @MappedSuperclass public abstract class AbsIdEntity implements Serializable { private static ...
- MVC如何使用开源分页插件shenniu.pager.js
最近比较忙,前期忙公司手机端接口项目,各种开发+调试+发布现在几乎上线无问题了:虽然公司项目忙不过在期间抽空做了两件个人觉得有意义的事情,一者使用aspnetcore开发了个人线上项目(要说线上其实只 ...
- NET Core-TagHelper实现分页标签
这里将要和大家分享的是学习总结使用TagHelper实现分页标签,之前分享过一篇使用HtmlHelper扩展了一个分页写法地址可以点击这里http://www.cnblogs.com/wangrudo ...
- 套用JQuery EasyUI列表显示数据、分页、查询
声明,本博客从csdn搬到cnblogs博客园了,以前的csdn不再更新,朋友们可以到这儿来找我的文章,更多的文章会发表,谢谢关注! 有时候闲的无聊,看到extjs那么肥大,真想把自己的项目改了,最近 ...
- php实现的分页类
php分页类文件: <?php /** file: page.class.php 完美分页类 Page */ class Page { private $total; //数据表中总记录数 pr ...
- C#关于分页显示
---<PS:本人菜鸟,大手子还请高台贵手> 以下是我今天在做分页时所遇到的一个分页显示问题,使用拼写SQL的方式写的,同类型可参考哦~ ------------------------- ...
- JAVA 分页工具类及其使用
Pager.java package pers.kangxu.datautils.common; import java.io.Serializable; import java.util.List; ...
随机推荐
- 解决运行Robot Framework报‘’ascii’错误
在Python27\Lib\site-packages中新建‘sitecustomize.py’,内容如下: #coding=utf8import sysreload(sys)sys.setdefau ...
- CDN-内容发布网络
整理<CDN技术详解>一书中重要的内容. 互联网与万维网 广义的互联网,由两层组成:一层是以TCP/IP为代表的网络层:另一层是以万维网WWW为代表的应用层.辨识互联网和万维网的区别,是认 ...
- Javascript专题(三)c.各种轮播--上下滚动轮播(面向对象版本)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- [Leetcode]011. Container With Most Water
public class Solution { public int maxArea(int[] height) { int left = 0, right = height.length - 1; ...
- Eclipse中mybatis的xml文件没有提示,出现the file cannot be validated as the XML definition.....
1.下载dtd文件 2.在eclipse中配置本地dtd文件: Window->Preferences->XML->XML Catalog->User Specified En ...
- C++之struct
C++的struct对C做和很多补充,里面可以放函数(构造函数和虚函数),也可以同struct和class的继承,在C++中也完全可以替代class.他们之间的主要区别: 1 calss默认是私有继承 ...
- Oozie安装的说明
不多说,直接干货! Oozie相当于Hadoop的一个客户端,因此集群中要有一台机器部署Oozie server端即可,由于可以有任意多个客户端连接Oozie,故每个客户端都必须部署Oozie cli ...
- Access 将SQL查询结果强制转换为某种类型
每个函数都可以强制将一个表达式转换成某种特定数据类型. 语法 CBool(expression) CByte(expression) CCur(expression) CDate(expression ...
- Elasticsearch支持的字段类型
es支持下列简单的字段类型: String: string Whole number: byte, short, integer, long Floating point: float, double ...
- linq 读取xml
xml 文件如下: <?xml version="1.0" encoding="utf-8" ?><nodes> <node> ...