This is a migrated thread and some comments may be shown as answers.

Save RibbonBar in Session

1 Answer 41 Views
RibbonBar
This is a migrated thread and some comments may be shown as answers.
Thomas
Top achievements
Rank 1
Thomas asked on 05 Sep 2012, 10:01 AM
Is it possible to save the entire RibbonBar in a Session variable and use it on page load?
I tried the following but on PostBack it fails.

if (!Page.IsPostBack)
{
 TCMenu _rb = new TCMenu();
 _rb.InitRibbonBar(ref trans_RibbonBarMenu); //dynamically adding tabs, groups and buttons - see code below
 Session["Test"] = trans_RibbonBarMenu;
}
else
{
 trans_RibbonBarMenu = (Session["Test"] as RadRibbonBar);
}


public void InitRibbonBar(ref RadRibbonBar ribbonBar, string formName, int userLevel)
 
{
 
    CriteriaOperator filter;           
 
    filter = CriteriaOperator.Parse(String.Format("FormName = '{0}'", formName));
 
  
 
    XPCollection _xpoObjects = new XPCollection(DbUtils.GetDefaultSession, typeof(XPOMenuSettings), filter, null);
 
  
 
    SortProperty TabSortOrder = new SortProperty("TabSortOrder", DevExpress.Xpo.DB.SortingDirection.Ascending);
 
    _xpoObjects.Sorting.Add(TabSortOrder);
 
  
 
    SortProperty GroupSortOrder = new SortProperty("GroupSortOrder", DevExpress.Xpo.DB.SortingDirection.Ascending);
 
    _xpoObjects.Sorting.Add(GroupSortOrder);
 
  
 
    SortProperty sortOrder = new SortProperty("SortOrder", DevExpress.Xpo.DB.SortingDirection.Ascending);
 
    _xpoObjects.Sorting.Add(sortOrder);
 
  
 
    RibbonBarTab rbt;
 
    RibbonBarGroup rbg;
 
  
 
    foreach (XPOMenuSettings _xpoButton in _xpoObjects)
 
    {
 
        bool rbt_found = true;
 
        bool rbg_found = true;
 
          
 
        rbt = ribbonBar.FindTabByValue(_xpoButton.TabValue);
 
        if (rbt == null)
 
        {
 
            rbt = new RibbonBarTab();
 
            rbt.ID = _xpoButton.TabId;
 
            rbt.Text = _xpoButton.TabText;
 
            rbt.Value = _xpoButton.TabValue;
 
            rbt_found = false;
 
        }
 
  
 
        rbg = ribbonBar.FindGroupByValue(_xpoButton.GroupValue);
 
        if (rbg == null)
 
        {
 
            rbg = new RibbonBarGroup();
 
            rbg.ID = _xpoButton.GroupId;
 
            rbg.Text = _xpoButton.GroupText;
 
            rbg.Value = _xpoButton.GroupValue;
 
            rbg_found = false;
 
        }
 
  
 
        RibbonBarButton rbb = new RibbonBarButton();
 
        rbb.Size = (RibbonBarItemSize)_xpoButton.Size;
 
        rbb.Text = _xpoButton.Text;
 
        rbb.Value = _xpoButton.Value;
 
        rbb.ID = _xpoButton.Id;
 
        rbb.ImageUrl = _xpoButton.ImageUrl;
 
        rbb.ImageUrlLarge = _xpoButton.ImageUrlLarge;
 
        rbb.Visible = _xpoButton.Visible && (_xpoButton.UserLevel >= userLevel);
 
  
 
        rbb.Width = 80;
 
  
 
        rbg.Items.Add(rbb);
 
        if (!rbg_found)
 
            rbt.Groups.Add(rbg);
 
        if (!rbt_found)
 
            ribbonBar.Tabs.Add(rbt);
 
    }
 
}

Clientside works fine, but as soon as I click a button that calls serverside, I get the following error message:

Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index

[ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index]
   System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource) +64
   System.ThrowHelper.ThrowArgumentOutOfRangeException() +15
   System.Collections.Generic.List`1.get_Item(Int32 index) +7500084
   Telerik.Web.UI.RadRibbonBar.RaisePostBackEvent(String eventArgument) +272
   Telerik.Web.UI.RadRibbonBar.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +39
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +175
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565

1 Answer, 1 is accepted

Sort by
0
Bozhidar
Telerik team
answered on 10 Sep 2012, 06:26 AM
Hi Thomas,

You have to move the logic that creates the RibbonBar in the Page_Init event.
 
Kind regards,
Bozhidar
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.
Tags
RibbonBar
Asked by
Thomas
Top achievements
Rank 1
Answers by
Bozhidar
Telerik team
Share this question
or