History Points and RadGrid

2 posts, 0 answers
  1. Justin
    Justin avatar
    13 posts
    Member since:
    Feb 2011

    Posted 22 Feb 2012 Link to this post

    I'm hoping someone can help me by either pointing me to a straight forward example or pointing out the error(s) in my code.  I'm attempting to provide history points when a user is interacting with an ajax grid.  I've started just with paging but eventually want to get this working with sorting as well.  

    I have a master page which defines a RadScriptManager:

    <telerik:RadScriptManager ID="RadScriptManager1" runat="server" EnablePartialRendering="true" EnableHistory="true" EnableSecureHistoryState="false"></telerik:RadScriptManager>

    On a content page I have a ScriptManagerProxy to invoke the OnNavigate event (when a browser back/forward button is clicked):

    <asp:ScriptManagerProxy ID="ProxyScriptManager" runat="server" OnNavigate="ScriptManager_OnNavigate" />

    The ScriptManager_OnNavigate handler is defined as such:

    protected void ScriptManager_OnNavigate(object sender, HistoryEventArgs e)
            {
                if (e.State.Count <= 0)
                {
                    // setup default state
                    RadGrid1.MasterTableView.CurrentPageIndex = 0;
                    RadGrid1.Rebind();
                    return;
                }
      
                string key = e.State.AllKeys[0];
                string state = string.Empty;
      
                if (string.Equals(key, GridPageHistoryKey))
                {
                    state = e.State[key];
                    int pageIndex;
                    if (int.TryParse(state, out pageIndex))
                    {
                        RadGrid1.MasterTableView.CurrentPageIndex = pageIndex;
                        RadGrid1.Rebind();
                    }
                }
      
      
            }

    On the grid's OnPageIndexChanged event handler, I set a private variable to true which is then checked in the grids OnPrerender event:

    protected void RadGrid1_PageIndexChanged(object sender, GridPageChangedEventArgs e)
            {
                _saveState = true;
            }

    protected void RadGrid1_PreRender(object sender, EventArgs e) {
    if (_saveState)
                {
                    if (RadScriptManager.GetCurrent(this.Page).IsInAsyncPostBack && !RadScriptManager.GetCurrent(this.Page).IsNavigating)
                    {
                        var state = RadGrid1.MasterTableView.CurrentPageIndex.ToString();
                        RadScriptManager.GetCurrent(this.Page).AddHistoryPoint(GridPageHistoryKey, state);
                    } 
                }

    It appears that the add history point is getting created and the OnNavigate code is executing but the grid doesn't update when clicking the back button.  Am I missing a crucial step?  Is there an example that doesn't just point me to:  http://www.telerik.com/help/aspnet-ajax/ajax-back-forward-btns.html 

    Thanks for any help!

  2. Walter
    Walter avatar
    11 posts
    Member since:
    Apr 2009

    Posted 20 Mar 2012 Link to this post

    Have you put your radgrid in the RadAjaxManager so it will be updated if the RadScriptManager triggers it ?

    Example:
    <telerik:RadAjaxManagerProxy ID="ramProxy" runat="server">
            <AjaxSettings>
              ......
                <telerik:AjaxSetting AjaxControlID="RadScriptManager1">
                    <UpdatedControls>
                        <telerik:AjaxUpdatedControl ControlID="RadGrid1"  />
                    </UpdatedControls>
                </telerik:AjaxSetting>

            </AjaxSettings>
        </telerik:RadAjaxManagerProxy>
  3. UI for ASP.NET Ajax is Ready for VS 2017
Back to Top