How do I disable or clear memory for the built-in functionality of RadPane remembering height/width?

6 posts, 0 answers
  1. Sean
    Sean avatar
    200 posts
    Member since:
    Nov 2010

    Posted 04 Nov 2011 Link to this post

    Hi Telerik,

    I am trying to implemented an 'Edit Mode' for my application. When exiting out of 'Edit Mode' the user has two options -- revert to old state, or save changes.

    I noticed that when the option 'revert state' is chosen, even though I clear all my saved information, the RadPanes still retain their old dimensions. I know this is by design, and that's fine, but I would like to clear that memory from within a static method.

    Basically, if the user refreshes the page -- everything is good. The ClientState information is lost, old data is loaded from our database, and the dimensions for the controls are set. But, when ClientState information is not lost, the old data is overwritten with the client state data.

    If it's not possible to do within a static method, let me know the instructions anyway. I can probably re-implement the lost functionality in a way that would work for my project.

    Thanks

    Sean
  2. Dobromir
    Admin
    Dobromir avatar
    1633 posts

    Posted 09 Nov 2011 Link to this post

    Hi Sean,

    Please take a look at the following live demo implementing similar scenario:
    http://demos.telerik.com/aspnet-ajax/splitter/examples/saveloadstateonserver/defaultcs.aspx

    Regards,
    Dobromir
    the Telerik team
    If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to their blog feed now
  3. UI for ASP.NET Ajax is Ready for VS 2017
  4. Sean
    Sean avatar
    200 posts
    Member since:
    Nov 2010

    Posted 09 Nov 2011 Link to this post

    Hi Dobromir,

    This issue is not handled by the demo provided. In fact, it highlights the issue.


    This is documented  and was not surprising to me, I am merely asking how to undo the provided functionality. 

    The state of a RadSplitter automatically persists across postbacks, so you do not need to reconfigure it every time to maintain the same appearance. Even if you change the values of the properties listed below using the client-side API, they will persist across postbacks.

    I have made a quick video which highlights this issue in my dashboard.

    Initially, the video will load and there are some panes/splitters on the dashboard. These have been saved to a database, session, and are loaded / retained across postbacks.

    Then, I add some extra controls to the page. These are newly added and have not been saved to the database. When I click 'Cancel Changes' I clear everything in Session (as to forget), and then reload my information from the database. This causes the controls to revert back to their previously known information.

    This works for everything except the dimensions of the panes. I have not written the resize to the database, and I have cleared Session. As such, I have no memory of this move, but it is retaining its own memory somewhere. I would like to tell it "Hey, act like you've never resized before" so that when I re-apply my information from the database it is not overwritten by unsaved actions.

    http://screencast.com/t/07i4zhlJes

    I hope this all makes sense. :) 

    Sean

  5. Dobromir
    Admin
    Dobromir avatar
    1633 posts

    Posted 14 Nov 2011 Link to this post

    Hi Sean,

    Thank you for the detailed explanation and the provided video.

    This built-in behavior of the splitter (to persists its state over postbacks) cannot be disabled and if you want to revert the original state of the panes' width / height you need to set them explicitly when recreating the control but in a later stage of the Page's lifecycle (later than Page_Init). This requirement is due to the fact that splitter is loading its client state in the ProccesPostData stage of the InitComplete.

    Kind regards,
    Dobromir
    the Telerik team
    If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to their blog feed now
  6. Sean
    Sean avatar
    200 posts
    Member since:
    Nov 2010

    Posted 15 Nov 2011 Link to this post

    Hi Dobromir,

    That sucks! I was hoping that since RadPane has the PersistScrollPosition property that it wouldn't be a far cry to have another Persist property.

    I'm going to log this into PITS... For anyone who needs this in the future -- the best solution I could come up with was just writing to Session. Anything else would couple the knowledge of "getting data from database" with the objects.. trying to keep that all decoupled. 

    [WebMethod]
    public static bool RevertToLastSave()
    {
        bool successful = false;
     
        try
        {
            StateManager.RevertToLastSave();
            SessionRepository.Instance.SetSession("cleared", true);
            successful = true;
        }
        catch (Exception exception)
        {
            _logger.ErrorFormat("Unable to revert changes. Reason: {0}", exception.Message);
        }
     
        return successful;
    }
     //Page_Load:
    object justCleared = SessionRepository.Instance.GetSession("cleared");
     
    if(!Equals(justCleared, null) && (bool)justCleared)
    {
        List<RadPaneSetting> settings = StateManager.GetStates<SerializableDictionary<string, RadPaneSetting>>().Select(state => state.Value).ToList();
     
        foreach (CormantRadPane pane in LayoutManager.Instance.RegisteredPanes)
        {
            RadPaneSetting paneSetting = settings.FirstOrDefault(setting => int.Equals(setting.ID, pane.ID));
            if (Equals(paneSetting, null))
            {
                _logger.DebugFormat("Failed to find settings for {0} when trying to set dimensions.", pane.ID);
                continue;
            }
            if (int.Equals(paneSetting.Height, 0) || int.Equals(paneSetting.Width, 0)) continue;
            pane.Height = paneSetting.Height;
            pane.Width = paneSetting.Width;
        }
        SessionRepository.Instance.SetSession("cleared", false);
    }
  7. Dobromir
    Admin
    Dobromir avatar
    1633 posts

    Posted 21 Nov 2011 Link to this post

    Hi Sean,

    I have brought your request to the attention of the developers of RadSplitter and we will consider implementing property to control the client state.

    Regarding your solution, I believe its the best one. In all cases, you need to have two different states of the panes: one to store the original state and one to store current state; otherwise, how would you preserve the changes over postbacks that are not related to Save Changes / Cancel Changes actions?

    Greetings,
    Dobromir
    the Telerik team
    If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to their blog feed now
Back to Top
UI for ASP.NET Ajax is Ready for VS 2017