Hello
I have a RadComboBox that updates two RadGrids, each with a detail table that has a command button which opens a different RadWindow containing another RadGrid, and I'm running into errors when trying to apply RadAjaxManager controls to the page. Everything is working fine until I set the second grid (uxRolesRG) to update its window (RoleAvailUsers), which causes the page to throw a JScript runtime error whenever a new value is selected in the RadComboBox.
Error:
Default.aspx:
Default.aspx.vb
I have a RadComboBox that updates two RadGrids, each with a detail table that has a command button which opens a different RadWindow containing another RadGrid, and I'm running into errors when trying to apply RadAjaxManager controls to the page. Everything is working fine until I set the second grid (uxRolesRG) to update its window (RoleAvailUsers), which causes the page to throw a JScript runtime error whenever a new value is selected in the RadComboBox.
Error:
0x800a139e - Microsoft JScript runtime error: Sys.WebForms.PageRequestManagerServerErrorException: Collection was modified; enumeration operation may not execute.
If there is a handler for this exception, the program may be safely continued.
Default.aspx:
<%@ Page Title="" Language="VB" MasterPageFile="~/MasterPage.master" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="Applications_Default" %>
<
asp:Content
ID
=
"Content1"
ContentPlaceHolderID
=
"head"
runat
=
"Server"
>
</
asp:Content
>
<
asp:Content
ID
=
"Content2"
ContentPlaceHolderID
=
"MainContent"
runat
=
"Server"
>
<
telerik:RadScriptBlock
ID
=
"RSBlock1"
runat
=
"server"
>
<
script
type
=
"text/javascript"
>
function ShowAddRoleWindow(sender, args) {
$find("<%=AddUserRoleRW.ClientID%>").show();
}
function ShowAddUserWindow(sender, args) {
$find("<%=AddRoleUserRW.ClientID%>").show();
}
</
script
>
</
telerik:RadScriptBlock
>
<
telerik:RadAjaxManager
ID
=
"uxAjaxManager"
runat
=
"server"
>
<
AjaxSettings
>
<
telerik:AjaxSetting
AjaxControlID
=
"uxAppSelectCB"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"uxUserRG"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"uxRolesRG"
/>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
<
telerik:AjaxSetting
AjaxControlID
=
"uxUserRG"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"UserAvailRoles"
LoadingPanelID
=
"UserAvailRolesLW"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"AddUserRoleUN"
/>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
<
telerik:AjaxSetting
AjaxControlID
=
"uxRolesRG"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"RoleAvailUsers"
LoadingPanelID
=
"RoleAvailUsersLW"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"AddRoleUserUN"
/>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
</
AjaxSettings
>
</
telerik:RadAjaxManager
>
<
asp:Label
ID
=
"AddUserRoleUN"
runat
=
"server"
Visible
=
"false"
/>
<
asp:Label
ID
=
"AddRoleUserUN"
runat
=
"server"
Visible
=
"false"
/>
<
telerik:RadComboBox
ID
=
"uxAppSelectCB"
AllowCustomText
=
"true"
runat
=
"server"
DataSourceID
=
"AppListODS"
DataValueField
=
"ApplicationId"
DataTextField
=
"ApplicationName"
MarkFirstMatch
=
"true"
AutoPostBack
=
"true"
/>
<
telerik:RadWindow
ID
=
"AddUserRoleRW"
runat
=
"server"
>
<
ContentTemplate
>
<
telerik:RadAjaxLoadingPanel
ID
=
"UserAvailRolesLW"
runat
=
"server"
/>
<
telerik:RadGrid
ID
=
"UserAvailRoles"
runat
=
"server"
DataSourceID
=
"UserRolesUnassignedODS"
AutoGenerateColumns
=
"false"
AllowAutomaticUpdates
=
"true"
AllowAutomaticInserts
=
"false"
>
<
MasterTableView
EditMode
=
"Batch"
DataKeyNames
=
"RoleId"
CommandItemDisplay
=
"Top"
AllowPaging
=
"true"
PageSize
=
"40"
>
<
BatchEditingSettings
OpenEditingEvent
=
"MouseOver"
/>
<
CommandItemSettings
ShowAddNewRecordButton
=
"false"
ShowRefreshButton
=
"false"
/>
<
Columns
>
<
telerik:GridCheckBoxColumn
UniqueName
=
"GrantCB"
HeaderStyle-Width
=
"30px"
DataField
=
"IsSelected"
/>
<
telerik:GridBoundColumn
DataField
=
"RoleName"
HeaderText
=
"Role"
ReadOnly
=
"true"
/>
</
Columns
>
</
MasterTableView
>
</
telerik:RadGrid
>
</
ContentTemplate
>
</
telerik:RadWindow
>
<
telerik:RadWindow
ID
=
"AddRoleUserRW"
runat
=
"server"
>
<
ContentTemplate
>
<
telerik:RadAjaxLoadingPanel
ID
=
"RoleAvailUsersLW"
runat
=
"server"
/>
<
telerik:RadGrid
ID
=
"RoleAvailUsers"
runat
=
"server"
DataSourceID
=
"RoleUsersUnassignedODS"
AutoGenerateColumns
=
"false"
AllowAutomaticUpdates
=
"true"
AllowAutomaticInserts
=
"false"
>
<
MasterTableView
EditMode
=
"Batch"
DataKeyNames
=
"UserId"
CommandItemDisplay
=
"Top"
AllowPaging
=
"true"
PageSize
=
"40"
>
<
BatchEditingSettings
OpenEditingEvent
=
"MouseOver"
/>
<
CommandItemSettings
ShowAddNewRecordButton
=
"false"
ShowRefreshButton
=
"false"
/>
<
Columns
>
<
telerik:GridCheckBoxColumn
UniqueName
=
"AddCB"
HeaderStyle-Width
=
"30px"
DataField
=
"IsSelected"
/>
<
telerik:GridBoundColumn
DataField
=
"FirstName"
HeaderText
=
"First Name"
ReadOnly
=
"true"
/>
<
telerik:GridBoundColumn
DataField
=
"LastName"
HeaderText
=
"Last Name"
ReadOnly
=
"true"
/>
<
telerik:GridBoundColumn
DataField
=
"UserName"
HeaderText
=
"User Name"
ReadOnly
=
"true"
/>
</
Columns
>
</
MasterTableView
>
</
telerik:RadGrid
>
</
ContentTemplate
>
</
telerik:RadWindow
>
<
telerik:RadTabStrip
runat
=
"server"
ID
=
"uxAdminModeStrip"
Orientation
=
"HorizontalTop"
SelectedIndex
=
"0"
MultiPageID
=
"uxAdminModeMP"
>
<
Tabs
>
<
telerik:RadTab
Text
=
"Manage By User"
TabIndex
=
"0"
/>
<
telerik:RadTab
Text
=
"Manage By Role"
TabIndex
=
"1"
/>
</
Tabs
>
</
telerik:RadTabStrip
>
<
telerik:RadMultiPage
runat
=
"server"
ID
=
"uxAdminModeMP"
SelectedIndex
=
"0"
Width
=
"100%"
>
<%--Page: By User--%>
<
telerik:RadPageView
runat
=
"server"
ID
=
"uxByUserPV"
TabIndex
=
"0"
>
<
telerik:RadGrid
ID
=
"uxUserRG"
runat
=
"server"
DataSourceID
=
"UserListODS"
AutoGenerateColumns
=
"false"
>
<
MasterTableView
DataKeyNames
=
"UserId"
AllowFilteringByColumn
=
"true"
AllowSorting
=
"true"
>
<
DetailTables
>
<
telerik:GridTableView
DataKeyNames
=
"RoleId"
Name
=
"uxUserRolesRG"
AutoGenerateColumns
=
"false"
runat
=
"server"
DataSourceID
=
"UserRolesODS"
AllowAutomaticDeletes
=
"true"
CommandItemDisplay
=
"Top"
>
<
CommandItemTemplate
>
<
telerik:RadButton
ID
=
"AddUserRoleRB"
runat
=
"server"
CommandName
=
"AddRoles"
OnClientClicked
=
"ShowAddRoleWindow"
AutoPostBack
=
"true"
Text
=
"Add Roles"
ButtonType
=
"SkinnedButton"
/>
</
CommandItemTemplate
>
<
CommandItemSettings
ShowAddNewRecordButton
=
"false"
/>
<
ParentTableRelation
>
<
telerik:GridRelationFields
DetailKeyField
=
"UserId"
MasterKeyField
=
"UserId"
/>
</
ParentTableRelation
>
<
Columns
>
<
telerik:GridBoundColumn
DataField
=
"RoleName"
HeaderText
=
"Role Name"
ReadOnly
=
"true"
/>
<
telerik:GridBoundColumn
DataField
=
"Description"
HeaderText
=
"Description"
ReadOnly
=
"true"
/>
<
telerik:GridButtonColumn
CommandName
=
"Delete"
HeaderText
=
"Remove"
ButtonType
=
"PushButton"
Text
=
"X"
/>
</
Columns
>
</
telerik:GridTableView
>
</
DetailTables
>
<
Columns
>
<
telerik:GridBoundColumn
DataField
=
"UserName"
HeaderText
=
"User Name"
CurrentFilterFunction
=
"Contains"
AutoPostBackOnFilter
=
"true"
/>
<
telerik:GridBoundColumn
DataField
=
"FirstName"
HeaderText
=
"First Name"
CurrentFilterFunction
=
"Contains"
AutoPostBackOnFilter
=
"true"
/>
<
telerik:GridBoundColumn
DataField
=
"LastName"
HeaderText
=
"Last Name"
CurrentFilterFunction
=
"Contains"
AutoPostBackOnFilter
=
"true"
/>
<
telerik:GridCheckBoxColumn
DataField
=
"IsLockedOut"
HeaderText
=
"Locked"
AllowFiltering
=
"false"
/>
<
telerik:GridCheckBoxColumn
DataField
=
"IsArchive"
HeaderText
=
"Archived"
AllowFiltering
=
"false"
/>
<
telerik:GridDateTimeColumn
DataField
=
"LastActivityDate"
HeaderText
=
"Last Active"
DataFormatString
=
"{0:dd/MM/yyyy}"
CurrentFilterFunction
=
"GreaterThanOrEqualTo"
AutoPostBackOnFilter
=
"true"
/>
</
Columns
>
</
MasterTableView
>
<
GroupingSettings
CaseSensitive
=
"false"
/>
</
telerik:RadGrid
>
</
telerik:RadPageView
>
<%--Page: By Role--%>
<
telerik:RadPageView
runat
=
"server"
ID
=
"uxByRolePV"
TabIndex
=
"1"
>
<
telerik:RadGrid
ID
=
"uxRolesRG"
runat
=
"server"
DataSourceID
=
"RoleListODS"
AutoGenerateColumns
=
"false"
>
<
MasterTableView
DataKeyNames
=
"RoleId"
AllowFilteringByColumn
=
"true"
AllowSorting
=
"true"
>
<
DetailTables
>
<
telerik:GridTableView
DataKeyNames
=
"UserId"
Name
=
"uxRoleUsersRG"
AutoGenerateColumns
=
"false"
runat
=
"server"
DataSourceID
=
"RoleUsersODS"
AllowAutomaticDeletes
=
"true"
CommandItemDisplay
=
"top"
>
<
CommandItemTemplate
>
<
telerik:RadButton
ID
=
"AddRoleUserRB"
runat
=
"server"
CommandName
=
"AddUsers"
OnClientClicked
=
"ShowAddUserWindow"
AutoPostBack
=
"true"
Text
=
"Add Users"
ButtonType
=
"SkinnedButton"
/>
</
CommandItemTemplate
>
<
CommandItemSettings
ShowAddNewRecordButton
=
"false"
/>
<
ParentTableRelation
>
<
telerik:GridRelationFields
DetailKeyField
=
"RoleId"
MasterKeyField
=
"RoleId"
/>
</
ParentTableRelation
>
<
Columns
>
<
telerik:GridBoundColumn
DataField
=
"UserName"
HeaderText
=
"User Name"
/>
<
telerik:GridBoundColumn
DataField
=
"FirstName"
HeaderText
=
"First Name"
/>
<
telerik:GridBoundColumn
DataField
=
"LastName"
HeaderText
=
"Last Name"
/>
<
telerik:GridCheckBoxColumn
DataField
=
"IsLockedOut"
HeaderText
=
"Locked"
/>
<
telerik:GridCheckBoxColumn
DataField
=
"IsArchive"
HeaderText
=
"Archived"
/>
<
telerik:GridDateTimeColumn
DataField
=
"LastActivityDate"
HeaderText
=
"Last Active"
DataFormatString
=
"{0:dd/MM/yyyy}"
/>
<
telerik:GridButtonColumn
CommandName
=
"Delete"
HeaderText
=
"Remove"
ButtonType
=
"PushButton"
Text
=
"X"
/>
</
Columns
>
</
telerik:GridTableView
>
</
DetailTables
>
<
Columns
>
<
telerik:GridBoundColumn
DataField
=
"RoleName"
HeaderText
=
"Role Name"
CurrentFilterFunction
=
"Contains"
AutoPostBackOnFilter
=
"true"
/>
<
telerik:GridBoundColumn
DataField
=
"Description"
HeaderText
=
"Description"
CurrentFilterFunction
=
"Contains"
AutoPostBackOnFilter
=
"true"
/>
<
telerik:GridCheckBoxColumn
DataField
=
"IsActive"
HeaderText
=
"Active"
AllowFiltering
=
"false"
/>
<
telerik:GridCheckBoxColumn
DataField
=
"IsLocked"
HeaderText
=
"Locked"
AllowFiltering
=
"false"
/>
<
telerik:GridDateTimeColumn
DataField
=
"CreateDate"
HeaderText
=
"Created"
DataFormatString
=
"{0:dd/MM/yyyy}"
CurrentFilterFunction
=
"GreaterThanOrEqualTo"
AutoPostBackOnFilter
=
"true"
/>
<
telerik:GridDateTimeColumn
DataField
=
"ModifyDate"
HeaderText
=
"Modified"
DataFormatString
=
"{0:dd/MM/yyyy}"
CurrentFilterFunction
=
"GreaterThanOrEqualTo"
AutoPostBackOnFilter
=
"true"
/>
</
Columns
>
</
MasterTableView
>
<
GroupingSettings
CaseSensitive
=
"false"
/>
</
telerik:RadGrid
>
</
telerik:RadPageView
>
</
telerik:RadMultiPage
>
<%--ODS For Dropdown--%>
<
asp:ObjectDataSource
ID
=
"AppListODS"
runat
=
"server"
TypeName
=
"Applications"
SelectMethod
=
"GetApplicationsWithAccessRights"
/>
<%--ODS For Base Grids--%>
<
asp:ObjectDataSource
ID
=
"UserListODS"
runat
=
"server"
TypeName
=
"Applications"
SelectMethod
=
"GetApplicationUsers"
>
<
SelectParameters
>
<
asp:ControlParameter
ControlID
=
"uxAppSelectCB"
Name
=
"ApplicationId"
/>
</
SelectParameters
>
</
asp:ObjectDataSource
>
<
asp:ObjectDataSource
ID
=
"RoleListODS"
runat
=
"server"
TypeName
=
"Applications"
SelectMethod
=
"GetApplicationRoles"
>
<
SelectParameters
>
<
asp:ControlParameter
ControlID
=
"uxAppSelectCB"
Name
=
"ApplicationId"
/>
</
SelectParameters
>
</
asp:ObjectDataSource
>
<%--ODS For Detail Tables--%>
<
asp:ObjectDataSource
ID
=
"UserRolesODS"
runat
=
"server"
TypeName
=
"Applications"
SelectMethod
=
"GetUserApplicationRoles"
DeleteMethod
=
"DeleteUserRole"
>
<
SelectParameters
>
<
asp:ControlParameter
ControlID
=
"uxAppSelectCB"
Name
=
"ApplicationId"
/>
<
asp:Parameter
Name
=
"UserId"
/>
</
SelectParameters
>
<
DeleteParameters
>
<
asp:Parameter
Name
=
"UserId"
/>
<
asp:Parameter
Name
=
"RoleId"
/>
</
DeleteParameters
>
</
asp:ObjectDataSource
>
<
asp:ObjectDataSource
ID
=
"RoleUsersODS"
runat
=
"server"
TypeName
=
"Applications"
SelectMethod
=
"GetUsersWithRole"
DeleteMethod
=
"DeleteRoleUser"
>
<
SelectParameters
>
<
asp:Parameter
Name
=
"RoleId"
/>
</
SelectParameters
>
<
DeleteParameters
>
<
asp:Parameter
Name
=
"UserId"
/>
<
asp:Parameter
Name
=
"RoleId"
/>
</
DeleteParameters
>
</
asp:ObjectDataSource
>
<%--ODS For Add Window--%>
<
asp:ObjectDataSource
ID
=
"UserRolesUnassignedODS"
runat
=
"server"
TypeName
=
"Applications"
SelectMethod
=
"GetUserUngrantedRoles"
UpdateMethod
=
"BatchInsertUserRole"
>
<
SelectParameters
>
<
asp:ControlParameter
ControlID
=
"uxAppSelectCB"
Name
=
"ApplicationId"
/>
<
asp:Parameter
Name
=
"UserId"
/>
</
SelectParameters
>
<
UpdateParameters
>
<
asp:ControlParameter
ControlID
=
"AddUserRoleUN"
Name
=
"UserId"
/>
</
UpdateParameters
>
</
asp:ObjectDataSource
>
<
asp:ObjectDataSource
ID
=
"RoleUsersUnassignedODS"
runat
=
"server"
TypeName
=
"Applications"
SelectMethod
=
"GetRoleUngrantedUsers"
UpdateMethod
=
"BatchInsertRoleUser"
>
<
SelectParameters
>
<
asp:Parameter
Name
=
"RoleId"
/>
</
SelectParameters
>
<
UpdateParameters
>
<
asp:ControlParameter
ControlID
=
"AddRoleUserUN"
Name
=
"RoleId"
/>
</
UpdateParameters
>
</
asp:ObjectDataSource
>
</
asp:Content
>
Default.aspx.vb
Imports
Telerik.Web.UI
Partial
Class
Applications_Default
Inherits
System.Web.UI.Page
Protected
Sub
Page_Init(sender
As
Object
, e
As
EventArgs)
Handles
Me
.Init
If
Not
Page.IsPostBack
Then
uxAppSelectCB.SelectedIndex = 0
uxRolesRG.Rebind()
uxUserRG.Rebind()
End
If
End
Sub
Protected
Sub
uxUserRG_ItemCommand(sender
As
Object
, e
As
GridCommandEventArgs)
Handles
uxUserRG.ItemCommand
If
e.Item.OwnerTableView.DataSourceID.Equals(
"UserRolesODS"
)
Then
Dim
UserId = e.Item.OwnerTableView.ParentItem.GetDataKeyValue(
"UserId"
).ToString()
If
e.CommandName.Equals(
"Delete"
)
Then
UserRolesODS.DeleteParameters(
"UserId"
).DefaultValue = UserId
ElseIf
e.CommandName.Equals(
"AddRoles"
)
Then
UserRolesUnassignedODS.SelectParameters(
"UserId"
).DefaultValue = UserId
AddUserRoleUN.Text = UserId
UserAvailRoles.Rebind()
End
If
End
If
End
Sub
Protected
Sub
uxRolesRG_ItemCommand(sender
As
Object
, e
As
GridCommandEventArgs)
Handles
uxRolesRG.ItemCommand
If
e.Item.OwnerTableView.DataSourceID.Equals(
"RoleUsersODS"
)
Then
Dim
RoleId = e.Item.OwnerTableView.ParentItem.GetDataKeyValue(
"RoleId"
).ToString()
If
e.CommandName.Equals(
"Delete"
)
Then
RoleUsersODS.DeleteParameters(
"RoleId"
).DefaultValue = RoleId
ElseIf
e.CommandName.Equals(
"AddUsers"
)
Then
RoleUsersUnassignedODS.SelectParameters(
"RoleId"
).DefaultValue = RoleId
AddRoleUserUN.Text = RoleId
RoleAvailUsers.Rebind()
End
If
End
If
End
Sub
End
Class