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