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