本文转自:
接上面一节,上面还存在问题就是分页控件使用的仍然是服务器端控件,没点一次就要刷新页面一次,也就是向服务器端请求一次。那么用什么方法能够让页面无刷新而进行分页呢?
在这里,我想到了PagerView这套开源控件,有兴趣的朋友可以通过PagerView关键字去搜搜,然后研究下,这个封装的还是挺好的。
但是,这里遇到一个问题,如何让页面的GridView实现无刷新加载数据呢?这里我不得不提到我以前文章中写道的ICallbackEventhandler接口,这是微软的一个ajax回调接口,然后再配合这输出页面HTML的方式,不就可以实现无刷新GridView分页了吗?
前台代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="PagerWithPagerView.aspx.cs" Inherits="PagerWithPagerView" %><%----%>
那么在后台只要先实现ICallbackEventhandler接口,然后获取从前台传送过来的数据,进行处理,最后将html标签元素打到前台即可。
后台代码如下:
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.Data;public partial class PagerWithPagerView : System.Web.UI.Page,ICallbackEventHandler{ protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { Bind(); } } public static int _pageSize = 11; public static int _startSize = 1; public static int totalCount; public string _str; //绑定gridview 并将绑定后的gridview对象返回 private GridView Bind() { string sqlQuery = "select nsrsbm,nsr_mc,djlx_mc,dj_ztmc,zclx_mc,gljg_mc,zgy_mc,ssx_mc from scott.t_yhs_djxxtz"; DataSet ds = Pagination.PaginationPager(sqlQuery, _pageSize, _startSize, out totalCount); GridView1.DataSource = ds.Tables["Table"]; GridView1.DataBind(); return GridView1; } public string GetCallbackResult() { return _str; //将html返回到前台 } public void RaiseCallbackEvent(string eventArgument) { if (!string.IsNullOrEmpty(eventArgument)) { _startSize = Int32.Parse(eventArgument); Response.ClearContent(); //清除 GridView gv=Bind(); //得到GridView对象 System.Text.StringBuilder sb = new System.Text.StringBuilder(); System.IO.StringWriter sw = new System.IO.StringWriter(sb); HtmlTextWriter htw = new HtmlTextWriter(sw); Header.RenderControl(htw); gv.RenderControl(htw); //将生成的html元素render出来 _str = sb.ToString(); } }}
代码中已经有了注释,我这里不再详细说明,这里只要知道ICallbackEventhandler接口的使用方法即可。