GridView無刷新分頁的實現(ICallBackEventHandler)

要想實現無刷新分頁,就需要攔截GridView的PageIndexChange()事件,然後用ICallBackEventHandler實現無刷新回調.可是我發現如果GridView採用正常的分佈方法的話,很難在客戶端捕獲到這個事件.於是我想了個辦法,那就是採用模版的方式來編輯用於分頁操作的Row,在模版放上我們自己添加上去的控件來實現翻頁操作.具體的做法是:

1.往頁面上放一個GridView,將其放置於一個DIV中.正常設置分頁操作.

2.進入模版編輯界面,選擇編輯Pager Template,放上用於執行分頁操作的控件.我的做法是放兩個LinkButton控件.ID分別設爲lnkbtnPrev,lnkbtnNext.

3.在GridView1_DataBound事件中給這兩個控件添加相應的客戶端事件.代碼如下:

        GridViewRow pagerRow = GridView1.BottomPagerRow;
        LinkButton lnkPrev = (LinkButton)pagerRow.Cells[0].FindControl("lnkbtnPrev");
        LinkButton lnkNext = (LinkButton)pagerRow.Cells[0].FindControl("lnkbtnNext");
        int newPageIndex = GridView1.PageIndex;
        lnkPrev.Enabled = false;
        lnkNext.Enabled = false;
        lnkPrev.Attributes.Remove("onclick");
        lnkNext.Attributes.Remove("onclick");
        if (newPageIndex > 0)
        {
            lnkPrev.Enabled = true;
            lnkPrev.Attributes.Add("onclick", "setPageTo(" + (newPageIndex - 1).ToString() + ");return false;");
        }
        if (newPageIndex < GridView1.PageCount - 1)
        {
            lnkNext.Enabled = true;
            lnkNext.Attributes.Add("onclick", "setPageTo(" + (newPageIndex + 1).ToString() + ");return false;");
        }

4.在客戶端腳本中添加setPageTo()方法,以實現回調.

      function setPageTo(pageIndex)
      {
         var context=document.getElementById("listDIV");
         context.innerHTML="<IMG SRC='Images/pie.gif' />數據加載中...";
         var arg='pageChange|'+pageIndex;
         <%= ClientScript.GetCallbackEventReference(this, "arg", "onCallServerComplete", "context")%>;
      }

      function onCallServerComplete(result,context)
      {
         context.innerHTML=result;
      }

5.在服務器端添加用於實現回調的方法,重新生成GridView分頁後的HTML代碼,傳回客戶端.

    public void RaiseCallbackEvent(string eventArgument)
    {
        serverReturn = eventArgument;
    }
    public string GetCallbackResult()
    {
         return pageChange(int.Parse(serverReturn ));
    }

    private string pageChange(string newIndex)
    {
        int newPageIndex = int.Parse(newIndex);
             //設置數據源
        GridView1.DataBind();

        return getRenderCode();

    }

    private string getRenderCode()
    {
        StringWriter writer1 = new StringWriter(CultureInfo.InvariantCulture);
        HtmlTextWriter writer2 = new HtmlTextWriter(writer1);

        GridView1.Visible = true;
        GridView1.RenderControl(writer2);
        writer2.Flush();
        writer2.Close();

        return writer1.ToString();

    }

 

轉自:http://zfnh2002.bokee.com/viewdiary.12243206.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章