利用Ajax实现DataGrid无刷新分页(AjaxGrid)

DataGrid功能强大,我们只用写几行代码就能够实现复杂的页面数据显示。数据多的时候免不了要分页显示,DataGrdi本身自带分页功能,但是当数据量少的时候很方便,当大数据量时,DataGrid得分页机制就不太好了。于是在网上找到了一种比较好的利用存储过程实现分页机制(客户端想要第几页就取第几页数据,上十万级的数据查询也很快,数据量再多的时候就没试过了,等有时间把利用存储过程分页也写在blog上)在工作中为了让客户用的更舒服点,也赶时髦,想利用Ajax来实现DataGrid无刷新分页。主要用RenderControl方法把DataGrid翻译成Html代码,然后用Web Service 返回。当然也可以用别的方法。

GenericAjaxWS.asmx.cs

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Diagnostics;
using System.Web;
using System.Web.Services;
using System.Configuration;
using System.Web.UI.WebControls;
using System.Web.UI;
using System.IO;

namespace GenricAjaxWS
{
      [WebService(Namespace="http://localhost/GenricAjaxWS/")]
      public class GenricAjaxWS : System.Web.Services.WebService
      {
            SqlConnection con;
            SqlDataAdapter da;
            SqlCommand cmd;
            DataSet ds;

public GenricAjaxWS()
            {
              InitializeComponent();
              con= new SqlConnection(ConfigurationSettings.AppSettings["Connect"]);
              da=new SqlDataAdapter("",con);
              cmd=new SqlCommand("",con);
              ds=new DataSet("TahaSchema");
            }

#region Component Designer generated code

//Required by the Web Services Designer
            private IContainer components = null;

/// <summary>
            /// Required method for Designer support - do not modify
            /// the contents of this method with the code editor.
            /// </summary>
            private void InitializeComponent()
            {
            }

/// <summary>
            /// Clean up any resources being used.
            /// </summary>
            protected override void Dispose( bool disposing )
            {
              if(disposing && components != null)
              {
                    components.Dispose();
              }
              base.Dispose(disposing);
            }
           
            #endregion
 
/// <summary>
/// this function accepts TSql statment and returns dataset
/// </summary>

[WebMethod]
            public string getGrid(string sqlStr,int pageIndex)
            {
              da.SelectCommand.CommandText=sqlStr;
              da=new SqlDataAdapter(sqlStr,con);
              da.Fill(ds,"myTable");

DataGrid dataGrid = new DataGrid();
              dataGrid.AutoGenerateColumns = true;
              dataGrid.DataSource = ds.Tables["myTable"].DefaultView;
              dataGrid.AllowPaging = true;
              dataGrid.PageSize = 4;
              dataGrid.PagerStyle.Visible = false;
              dataGrid.CurrentPageIndex = pageIndex;
              try
              {
                    dataGrid.DataBind();
              }
              catch(Exception)
              {

}
              StringWriter wr = new StringWriter();
              HtmlTextWriter writer = new HtmlTextWriter(wr);
              dataGrid.RenderControl(writer);
              string gridHtml = wr.ToString();
              wr.Close();
              writer.Close();
              DropDownList ddl_Pager = new DropDownList();
              ddl_Pager.Attributes.Add("onchange","goToPage(this.value)");
              string pager="";
              for(int i=0;i<dataGrid.PageCount;i++)
              {
                ListItem lItem = new ListItem(i.ToString(),i.ToString());
                ddl_Pager.Items.Add(lItem);
                if(i==pageIndex)
                {
                  pager += "[background-color:#ffdd11;width" +
                         ":20px;align:center\"><a href=\"#\" onclick" +
                         "=\"goToPage('"+i+"')\">"+i+"</a>]";
                }
                else
                {
                  pager += "[width:20px;align:center\">" +
                         "<a href=\"#\" οnclick=\"goToPage" +
                         "('"+i+"')\" >"+i+"</a>]";
                }
              }
              ddl_Pager.SelectedIndex = pageIndex;
              wr = new StringWriter();
              writer = new HtmlTextWriter(wr);
              ddl_Pager.RenderControl(writer);
              string pagerHtml = "<input type='button'" +
                                 " value='<' οnclick='goToPrevPage()'>";
              pagerHtml += wr.ToString();
              pagerHtml += "<input type='button' value='>'" +
                           " οnclick='this.disabled=goToNextPage()'>";
              wr.Close();
              writer.Close();
              return pager+pagerHtml+"<br>"+gridHtml;
            }
      }
}

上面的是Web服务,然后利用Ajax请求这个服务来获取要现实的数据。以下是客户端JavaScript代码:

AjaxFuncs.js

//声明异步请求对象

/
var xmlhttp;
/
//填充DataGrid,这个函数有3个参数。

//第一个是包含DataGrid的DIV的ID

//第二个是查询数据的sql语句

//第三个是要获取第几页数据

/
var ph;
var fillGrid_Str_SQL="";
var currentPageIndex ;
function fillGrid(myPH,str_Sql,pageIndex){
      ph = window.document.getElementById(myPH);
      fillGrid_Str_SQL = str_Sql;
      currentPageIndex = pageIndex;
      var url = "http://localhost/GenricAjaxWS/GenricAjaxWS" +
                ".asmx/getGrid?sqlStr="+str_Sql+
                "&pageIndex="+pageIndex;

if(window.XMLHttpRequest)
    {
        xmlhttp=new XMLHttpRequest();
        xmlhttp.onreadystatechange=fillGrid_Change;
        xmlhttp.open("GET",url,true);
        xmlhttp.send(null);
    }
    //code for IE
    else if (window.ActiveXObject)
        {
        try
            {
            xmlhttp= new ActiveXObject("Msxml2.XMLHTTP");
            }
        catch(e)
            {
            try
            {
                xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch(e){}
        }

if(xmlhttp)
        {
            try
            {
            xmlhttp.onreadystatechange=fillGrid_Change;
            xmlhttp.open("GET",url,false);
            xmlhttp.send();
            }
            catch(e){}
        }
    }
}

function fillGrid_Change()
{
      if(xmlhttp.readyState==4&&xmlhttp.status==200)
      {
          //var rows=xmlhttp.responseXML.
          //        selectNodes(".//TahaSchema//TahaTable");
          var row =   xmlhttp.responseXML.selectNodes(".//");
          ph.innerHTML = row[1].text;
      }
}

function goToPage(pageIndex){
      fillGrid(ph.id,fillGrid_Str_SQL,pageIndex)
}
 
function goToNextPage(){
      try{ 
            fillGrid(ph.id,fillGrid_Str_SQL,
                     parseInt(currentPageIndex)+1);
            return false;
      }
      catch(e){
            return true;
      }
}

function goToPrevPage(){
      fillGrid(ph.id,fillGrid_Str_SQL,
               parseInt(currentPageIndex)-1)
}

最后就是显示数据的html页面,实例代码如下:

AjaxGrid.html:

<html>
  <head>
    <title>AjaxGrid</title>
  <script language="javascript"
        type="text/javascript" src="ajaxFuncs.js"></script>
  </head>
  <body  οnlοad="fillGrid('myPH','select * from sales',1)">
           
    <form id="Form1" method="post" runat="server">
                        <div id="myPH" ></div>
     </form>
  </body>
</html>

到此利用Ajax实现DataGrid无刷新分页就完成了。

希望对您有用!

欢迎大家讨论,您如果还有更好的方法或意见,请您留言,让我们共同做的更好。

谢谢您浏览我的Blog!

http://blog.csdn.net/soarheaven/archive/2006/09/24/1270120.aspx

转载于:https://www.cnblogs.com/Godblessyou/archive/2010/07/16/1779161.html

利用Ajax实现DataGrid无刷新分页(AjaxGrid)【转】相关推荐

  1. JavaWeb开发之Ajax省市联动无刷新分页

    我们在上一节课已经和大家讲解过Ajax的使用,大家可以去看下该篇文章,今天也主要是一个拓展延伸,使用Ajax去完成无刷新省市联动和无刷新分页. 案列:使用Ajax完成无刷新分页  数据库数据 crea ...

  2. Ajax+Asp.Net无刷新分页

    1.新建解决方案,并建立四个项目BLL,DAL,Model,PagerTest,如图所示: 2.Model代码 using System; using System.Collections.Gener ...

  3. 静态页中利用AJAX.NET实现无刷新页面

    一. 导言 我们知道,ASP.net应用程序事实是在服务器上运行的,用户的请求要不断地送往远程的服务器,服务器执行完本地的程序后把重新装载页面再发送客户端.所以就出现了不断刷新的问题,页面不断闪烁.用 ...

  4. php mysql ajax 分页_ajax+php+mysql无刷新分页代码(1/2)_PHP教程

    ajax+php+mysql无刷新分页代码 ajax+php教程+mysql教程无刷新分页代码 2 3 4投票结果 5 6 7 8 9 function getxmlhttpobject() 10 { ...

  5. thinkphp+ajax无刷新分页并加载显示图片

    2019独角兽企业重金招聘Python工程师标准>>> 最近自己用thinkphp和bootstrap做一个小站点,在用到ajax与后台数据库交互实现无刷新分页时,因为我需要返回的数 ...

  6. php页面自分页刷新,详解PHP+AJAX无刷新分页实现方法

    PHP+AJAX无刷新分页实现代码详解,最近在看ajax 教程,就想写个简单入门的PHP+AJAX无刷新分页,我们依据ajax开发框架,代码如下: var http_request=false; fu ...

  7. smarty+php+ajax 简单无刷新分页

    简介 分页,无非就是从数据库中获得我们想查询的数据,再加以处理即可! ① 确定数据总数($count) ② 每页显示数据条数($pageSize) ③ 分多少页($pageCount) ④ 上一页($ ...

  8. .net MvcPager+Ajax无刷新分页

    .net  MvcPager+Ajax无刷新分页百度网盘链接: https://pan.baidu.com/s/1QmtBVH_sb4O6pNnEIsB5jw 1.新建Asp.net  Web项目,重 ...

  9. thinkphp ajax 无刷新分页效果的实现

    思路:先做出传统分页效果,然后重新复制一份Page.class.php类,对它进行修改,把js中的函数传到page类中,把上一页.下一页.首页.尾页.链接页中的url地址改成js控制的函数,模板页面中 ...

最新文章

  1. 神经网络无法区分异同,而且这个缺陷是本质性的
  2. fiddler 之 返回数据乱码解决方法
  3. mysql触发器 生僻字_MySQL生僻字插入失败的处理方法(Incorrect string value)
  4. 【MySQL】如何让数据库查询区分大小写
  5. 容器学习 之 镜像命令(九)
  6. java mqtt丢包_MQTT 3.1协议非严肃反思录
  7. 如何将道具传递给{this.props.children}
  8. JVM监控及诊断工具GUI篇之Arthas(五):其他指令
  9. jsp mysql demo_ntko: ntko办公插件使用案例demo使用java+jsp+mysql实现
  10. 计算机旅游网站论文,设计一个旅游网站 计算机专业毕业论文.doc
  11. Webmin远程命令执行漏洞(CVE-2019-15107 )复现
  12. 《论文阅读》PSF-LO: Parameterized Semantic Features Based Lidar Odometry
  13. Deepin-WPS输出PDF文件过大的终极解决办法
  14. 小猪佩奇与Tom猫的一场内网友谊赛
  15. 用Python+matplotlib足球运动员的射门数据可视化(绘制散点图)
  16. matlab如何离散椭圆方程,给出一些椭圆上离散的点的横纵坐标,怎么用matlab拟合出椭圆方程...
  17. mongodb与mysql连接_MongoDB连接数据库
  18. ssm项目笔记(五)图片存储方案
  19. VS2008,C++,镜子反射 光线反射游戏
  20. MacPro下VirtualBox安装Windows7虚拟机太卡的解决方法

热门文章

  1. Idea中上传项目到Github
  2. 【CCCC】PAT : 团体程序设计天梯赛-练习集 L3 答案(01-23)
  3. 【2020模拟考试T4】【PAT乙】1034 有理数四则运算 (20分) 测试点2
  4. 【POJ3349】Snowflake Snow Snowflakes(哈希表判重,维护一个集合)
  5. 经典问题8连:小球和盒子
  6. bzoj 1054: [HAOI2008]移动玩具.cpp
  7. matlab2c使用c++实现matlab函数系列教程-raylpdf函数
  8. jQuery Mobile中链接(包含button和表单提交的链接)的data-*选项
  9. js系列教程10-canvas绘图全解
  10. Echarts数据可视化grid直角坐标系(xAxis、yAxis),开发全解+完美注释