最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

利用jQuery实现GridView异步排序、分页的代码_jquery

来源:动视网 责编:小采 时间:2020-11-27 20:47:09
文档

利用jQuery实现GridView异步排序、分页的代码_jquery

利用jQuery实现GridView异步排序、分页的代码_jquery:每次请求备份管理页面时,服务端会把所以的备份还原信息都传到客户端,然后ui.tabs将两种信息折叠起来分别显示,好在ui.tabs给我提供ajax功能,我们的每个tab可以直接应用另外一个页面 如: 代码如下: 备份 还原 但这样,当Restore.aspx存
推荐度:
导读利用jQuery实现GridView异步排序、分页的代码_jquery:每次请求备份管理页面时,服务端会把所以的备份还原信息都传到客户端,然后ui.tabs将两种信息折叠起来分别显示,好在ui.tabs给我提供ajax功能,我们的每个tab可以直接应用另外一个页面 如: 代码如下: 备份 还原 但这样,当Restore.aspx存


每次请求备份管理页面时,服务端会把所以的备份还原信息都传到客户端,然后ui.tabs将两种信息折叠起来分别显示,好在ui.tabs给我提供ajax功能,我们的每个tab可以直接应用另外一个页面
如:

代码如下:



  • 备份

  • 还原



  • 但这样,当Restore.aspx存在服务端控件时,当他与服务端交互时,将不会很理想,比如GridView自带排序,分页就不可能实现,因为每一次交互他总是他只会显示你第一次加载该tab的状态(gridview它可能总是显示的第一页),有时甚至会充开整个页面。

    解决这个问题,首先想到时ajax以防止被引用的页面全部重新加载。UpdatePanel我试了一下不行,如是便想到juery。

    下面我将示范如何结合jquery实现GridView的异步排序,分页。

    首先我们还时在页面放放一个gridview,他不会作为页面中真正显示的部分,而是作为辅助html输出,当一个ajax请求来到时,我们利用这个GridView,Render为Html输出,ajax的回调函数完成显示。为了不显示GridView我在PreRender中设置Visible = false,不能直接设置Visible=false否则他不会被Render成html

    代码
    代码如下:



    注意,我们在Body的onload事件中指定了一个 函数,他会在页面被加载时请求服务端,传回数据。本身是个ajax请求

    原形如下:

    代码
    代码如下:
    var getPageData=function(i)
    {
    $.ajax({
    url:'Restore.aspx?'+new Date()+'&page='+i,//指定pageindex
    type:'get',
    success:function(data,textStatus)
    {
    $('#ShowData')[0].innerHTML=data;
    },
    error:function(XMLHttpRequest,textStatus)
    {
    //debugger;
    $('#ShowData').text(XMLHttpRequest.responseText);
    },
    complete:function(XMLHttpRequest,textStatus)
    {
    }
    });

    接下来就是排序了,通过get方式指定排序字段,排序方向。函数如下:
    代码
    代码如下:
    var sortDataGridView=function(sortExpression,sortDirection)
    {
    event.returnVaule=false;//阻止提交服务器
    $.ajax({
    url:'Restore.aspx?'+new Date()+'&sortEx='+sortExpression+'&sortDir='+sortDirection,//IE从在缓存,因此加new Date()防止缓存的影响
    type:'get',
    success:function(data,textStatus)
    {
    $('#ShowData')[0].innerHTML=data;
    },
    error:function(XMLHttpRequest,textStatus)
    {
    $('#ShowData').text(XMLHttpRequest.responseText);
    },
    complete:function(XMLHttpRequest,textStatus)
    {
    }
    });
    }


    当点击GridView中HeadText时我们要触发 sortDataGridView实现异步排序,查看GridView的原始生成内容,实际上是个A标记
    我们要为该标记添加一个onclick事件,并移除href属性值,以防止PostBack服务器。因此我在GridView的RowDataBound事件做如下处理:

    代码
    代码如下:
    protected void gvRestore_RowDataBound(object sender, GridViewRowEventArgs e)
    {
    if (e.Row.RowType == DataControlRowType.Header)
    {
    for (int i = 1; i <= 7; i++)
    {
    LinkButton lt = (LinkButton)e.Row.Cells[i].Controls[0];
    lt.Attributes["href"] = "#";
    lt.OnClientClick = string.Format(" return sortDataGridView('{0}','{1}')", lt.CommandArgument, "ASC");
    }
    }
    if (e.Row.RowType == DataControlRowType.Pager)
    {
    e.Row.Visible = false;
    }
    }

    到这一步,思路基本上已经清晰,剩下的事,就是在服务端响应ajax请求了,很简单,直接看代码,要注意是调用GridView的RendControl方法,输出html。

    现在可以实现gridview的ajax排序和分页 ,总结一下思路其实很简单,但在实现的时还是走了点弯路,主要时原本想同通过code形式手工实例化一个GridView,但最终还是没有实现,因为我添加了一个模板列。在模板列中添加一个intput type='Radio' 我在code时继承ITemplate,但我确不知怎样实现value='<%#Eval("operatePath") %>'的绑定,这里留下一个问题吧,谁知道,请告诉我。
    代码如下:






    代码
    代码如下:
    static string sortDirection = "ASC";
    protected void Page_Load(object sender, EventArgs e)
    {
    if (hasKeyName("page"))
    {
    if (!string.IsNullOrEmpty(Request.QueryString["page"].ToString()))
    {
    this.gvRestore.PageIndex = int.Parse(Request.QueryString["page"].ToString());
    ResponseData(this.gvRestore);
    }
    }
    else
    if (hasKeyName("sortEx"))
    {
    string sortEx = Request.QueryString["sortEx"].ToString();
    string sortDir = Request.QueryString["sortDir"].ToString();
    if (string.Compare(sortDir, sortDirection, true) == 0)
    {
    this.gvRestore.Sort(sortEx, SortDirection.Ascending);
    sortDirection = "DSAC";
    }
    else
    {
    this.gvRestore.Sort(sortEx, SortDirection.Descending);
    sortDirection = "ASC";
    }
    ResponseData(this.gvRestore);
    }
    }

    private bool hasKeyName(string key)
    {
    string[] keys = Request.QueryString.AllKeys;
    foreach (string str in keys)
    {
    if (String.Compare(key, str, true) == 0)
    return true;
    }
    return false;
    }

    private void ResponseData(GridView gv)
    {
    gv.DataSourceID = this.SqlDataSource1.ID;
    System.Globalization.CultureInfo info = new System.Globalization.CultureInfo("ZH-CN", true);
    System.IO.StringWriter sWriter = new System.IO.StringWriter(info);
    System.Web.UI.HtmlTextWriter html = new HtmlTextWriter(sWriter);
    gv.DataBind();
    if (gv != null)
    {
    gv.RenderControl(html);
    }
    Response.Write(html.InnerWriter);
    Response.Write(GetNav(gv.PageCount));
    Response.Flush();
    Response.End();
    }

    public string GetNav(int pagesize)
    {
    string NavStr = @"

    ";
    for (int i = 0; i < pagesize; i++)
    {
    NavStr = NavStr + @"";
    }
    NavStr = NavStr + @"
    " + (i + 1).ToString() + @" | " + @"
    ";
    return NavStr;
    }

    public override void VerifyRenderingInServerForm(Control control)
    {
    //base.VerifyRenderingInServerForm(control);
    }
    protected void gvRestore_PreRender(object sender, EventArgs e)
    {
    this.gvRestore.Visible = false;
    }

    文档

    利用jQuery实现GridView异步排序、分页的代码_jquery

    利用jQuery实现GridView异步排序、分页的代码_jquery:每次请求备份管理页面时,服务端会把所以的备份还原信息都传到客户端,然后ui.tabs将两种信息折叠起来分别显示,好在ui.tabs给我提供ajax功能,我们的每个tab可以直接应用另外一个页面 如: 代码如下: 备份 还原 但这样,当Restore.aspx存
    推荐度:
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top