Oracle分页之三:利用PagerView来实现无刷新GridView

接上面一节,上面还存在问题就是分页控件使用的仍然是服务器端控件,没点一次就要刷新页面一次,也就是向服务器端请求一次。那么用什么方法能够让页面无刷新而进行分页呢?

在这里,我想到了PagerView这套开源控件,有兴趣的朋友可以通过PagerView关键字去搜搜,然后研究下,这个封装的还是挺好的。

                但是,这里遇到一个问题,如何让页面的GridView实现无刷新加载数据呢?这里我不得不提到我以前文章中写道的ICallbackEventhandler接口,这是微软的一个ajax回调接口,然后再配合这输出页面HTML的方式,不就可以实现无刷新GridView分页了吗?

前台代码:

<% @ Page Language = " C# "  AutoEventWireup = " true "  CodeFile = " PagerWithPagerView.aspx.cs "  Inherits = " PagerWithPagerView "   %>


< html  xmlns ="http://www.w3.org/1999/xhtml" >
< head  runat ="server" >
    
< title ></ title >
    
< script  src ="tableview/scripts/jquery.js"  type ="text/javascript" ></ script >
    
< script  src ="tableview/scripts/PagerView.js"  type ="text/javascript" ></ script >
    
< link  href ="tableview/style.css"  rel ="stylesheet"  type ="text/css"   />
    
< link  href ="css/TableZB.css"  rel ="stylesheet"  type ="text/css"   />
    
< link  href ="css/swcss.css"  rel ="stylesheet"  type ="text/css"   />
    
< link  href ="css/GridViewCSS_O.css"  rel ="stylesheet"  type ="text/css"   />
   
<% --< style type = " text/css " >
   
    .PagerView a
    {
        background:url(images
/ loginButton.gif) no - repeat;
        
    }
   
   
</ style >-- %>
   
</ head >
< body >
   
< form  id ="form1"  runat ="server" >
   
< div  id ="myData" >
       
< asp:GridView  CssClass ="GVtable"  ID ="GridView1"  runat ="server"  Width ="100%"  
        AutoGenerateColumns
="False" >
        
< Columns >
        
< asp:TemplateField  HeaderText ="编号" >
        
< ItemTemplate >
        
<% # Eval ( " R " ).ToString()  %> </ ItemTemplate ></ asp:TemplateField >
        
< asp:TemplateField  HeaderText ="纳税人识别码" >
        
< ItemTemplate > <% # Eval ( " nsrsbm " ).ToString()  %> </ ItemTemplate ></ asp:TemplateField >
         
< asp:TemplateField  HeaderText ="纳税人名称" >
        
< ItemTemplate > <% # Eval ( " nsr_mc " %> </ ItemTemplate ></ asp:TemplateField >
         
< asp:TemplateField  HeaderText ="登记类型" >
        
< ItemTemplate > <% # Eval ( " djlx_mc " ) %> </ ItemTemplate ></ asp:TemplateField >
         
< asp:TemplateField  HeaderText ="登记状态" >
        
< ItemTemplate > <% # Eval ( " dj_ztmc " ) %> </ ItemTemplate ></ asp:TemplateField >
         
< asp:TemplateField  HeaderText ="注册类型" >
        
< ItemTemplate > <% # Eval ( " zclx_mc " ) %> </ ItemTemplate ></ asp:TemplateField >
         
< asp:TemplateField  HeaderText ="所别" >
        
< ItemTemplate > <% # Eval ( " gljg_mc " ) %> </ ItemTemplate ></ asp:TemplateField >
         
< asp:TemplateField  HeaderText ="专管员" >
        
< ItemTemplate > <% # Eval ( " zgy_mc " ) %> </ ItemTemplate ></ asp:TemplateField >
         
< asp:TemplateField  HeaderText ="所属性" >
        
< ItemTemplate > <% # Eval ( " ssx_mc " ) %> </ ItemTemplate ></ asp:TemplateField >
         
< asp:TemplateField  HeaderText ="操作" >
        
< ItemTemplate >
            
< asp:LinkButton  ID ="lbtnOperation"  CommandArgument ='<%#Eval("nsrsbm")  % > ' runat="server">编辑 </ asp:LinkButton >
        
</ ItemTemplate >
        
</ asp:TemplateField >
        
</ Columns >
    
</ asp:GridView >
    
</ div >
   
< script  type ="text/javascript" >
    window.onload
= function (){
         
var  pager  =   new  PagerView( ' pager ' );   // pager对象申明
         pager.itemCount  =   <%= totalCount  %> ;   // 设置当前显示的页索引
         pager.size  =   <%= _pageSize  %> ;   // 设置每页显示条数
         pager.onclick  =   function (index) {
             raiseCallBack(index,
"" );   // 当分页按钮被点击的时候,触发的Ajax回调函数
         };
         pager.render();
     }
     
     
// ajax回调成功后,进行处理的函数
      function  rServer(arg,context)  
     {
        $(
" #myData " ).text();
        $(
" #myData " ).html(arg);
     }
     
     
// ajax回调函数,用户向后台请求数据
      function  raiseCallBack(arg,context)
     {
        
<%= ClientScript.GetCallbackEventReference( this , " arg " , " rServer " , " context " %>
     }
</ script >
    
</ form >
     
< div  id ="pager" ></ div >
</ body >
</ html >
 

 

那么在后台只要先实现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接口的使用方法即可。

 

具体的结果页面如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值