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

Manual grid editing error

3 Answers 100 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Jeff
Top achievements
Rank 1
Jeff asked on 31 Dec 2011, 06:10 AM
I get the following error when trying to insert a record ...Unable to cast object of type 'Telerik.Web.UI.GridCommandItem' to type 'Telerik.Web.UI.GridEditFormInsertItem'.  I have followed the examples, what am I missing here?
Private Sub grdLogins_DeleteCommand(sender As Object, e As Telerik.Web.UI.GridCommandEventArgs) Handles grdLogins.DeleteCommand
    Dim item As GridDataItem = DirectCast(e.Item, GridDataItem)
    Dim LoginID As Integer = CInt(item.OwnerTableView.DataKeyValues(item.ItemIndex)("LoginKey").ToString)
    gUserData.DeleteUserNTCredential(LoginID)
    grdLogins.Rebind()
End Sub
 
Private Sub grdLogins_InsertCommand(sender As Object, e As Telerik.Web.UI.GridCommandEventArgs) Handles grdLogins.InsertCommand
    Dim insertedItem As GridEditFormInsertItem = DirectCast(e.Item, GridEditFormInsertItem)
    Dim UserID As Integer = GetSelectedUser()
    Dim Login As String = (TryCast(insertedItem("NTLogin").Controls(0), TextBox)).Text
    gUserData.AddUserNTCredential(UserTree.SelectedValue, Login, GetEditorInfo)
    grdLogins.Rebind()
End Sub
 
Private Sub grdLogins_UpdateCommand(sender As Object, e As Telerik.Web.UI.GridCommandEventArgs) Handles grdLogins.UpdateCommand
    Dim editedItem As GridEditableItem = TryCast(e.Item, GridEditableItem)
    Dim LoginID As Integer = CInt(editedItem.OwnerTableView.DataKeyValues(editedItem.ItemIndex)("LoginKey").ToString)
    Dim Login As String = (TryCast(editedItem("NTLogin").Controls(0), TextBox)).Text
    Dim UserID As Integer = CInt(GetSelectedUser())
    gUserData.UpdateUserNTCredential(UserID, LoginID, Login, GetEditorInfo)
    grdLogins.Rebind()
End Sub
 
Private Sub grdLogins_NeedDataSource(sender As Object, e As Telerik.Web.UI.GridNeedDataSourceEventArgs) Handles grdLogins.NeedDataSource
    Dim UserID As Integer
    If GetSelectedUser() Then
        UserID = GetSelectedUser()
    Else
        UserID = 0
    End If
    grdLogins.DataSource = gUserData.SelectUserNTCredentialsAll(UserID)
End Sub

<telerik:RadGrid ID="grdLogins" runat="server" Skin="Office2010Blue"
                     AutoGenerateColumns="False" CellSpacing="0" GridLines="None" AllowPaging="True"
                     PageSize="5">
                 <ClientSettings>
                     <Selecting AllowRowSelect="True" />
                 </ClientSettings>
                 <MasterTableView DataKeyNames="LoginID"
                     CommandItemDisplay="Top" EditMode="InPlace">
                     <NoRecordsTemplate>
                         No Records to display.
                     </NoRecordsTemplate>
                     <CommandItemSettings ExportToPdfText="Export to PDF" />
                     <RowIndicatorColumn FilterControlAltText="Filter RowIndicator column"
                         Visible="True">
                         <HeaderStyle Width="20px" />
                     </RowIndicatorColumn>
                     <ExpandCollapseColumn FilterControlAltText="Filter ExpandColumn column"
                         Visible="True">
                         <HeaderStyle Width="20px" />
                     </ExpandCollapseColumn>
                     <Columns>
                         <telerik:GridBoundColumn DataField="LoginID"
                             FilterControlAltText="Filter LoginID column" UniqueName="LoginID"
                             Visible="False" Display="False" ReadOnly="True">
                         </telerik:GridBoundColumn>
                         <telerik:GridBoundColumn DataField="NTLogin"
                             FilterControlAltText="Filter NTLogin column" HeaderText="NT Login"
                             UniqueName="NTLogin">
                         </telerik:GridBoundColumn>
                         <telerik:GridBoundColumn DataField="CreateDate" Display="False"
                             FilterControlAltText="Filter CreateDate column" HeaderText="Date Added"
                             UniqueName="CreateDate" Visible="False">
                         </telerik:GridBoundColumn>
                         <telerik:GridBoundColumn DataField="CreateBy"
                             FilterControlAltText="Filter CreateBy column" UniqueName="CreateBy"
                             Visible="False">
                         </telerik:GridBoundColumn>
                         <telerik:GridBoundColumn DataField="UpdateDate"
                             FilterControlAltText="Filter UpdateDate column" UniqueName="UpdateDate"
                             Visible="False">
                         </telerik:GridBoundColumn>
                         <telerik:GridBoundColumn DataField="UpdateBy"
                             FilterControlAltText="Filter UpdateBy column" UniqueName="UpdateBy"
                             Visible="False">
                         </telerik:GridBoundColumn>
                     </Columns>
                     <EditFormSettings>
                         <EditColumn FilterControlAltText="Filter EditCommandColumn column">
                         </EditColumn>
                     </EditFormSettings>
                     <CommandItemTemplate>
                         <telerik:RadToolBar ID="RadToolBar1" Runat="server" Width="100%" Skin="Office2010Blue"
                         onbuttonclick="RadToolBar1_ButtonClick" EnableRoundedCorners="True">
                         <items>
             <telerik:RadToolBarButton runat="server" CommandName="InitInsert" ImageUrl="~/Images/add2.png"
                 Visible='<%# Not grdLogins.MasterTableView.IsItemInserted %>' Owner="RadToolBar1"
                 Text="Add New">
             </telerik:RadToolBarButton>
             <telerik:RadToolBarButton runat="server" CommandName="EditSelected" ImageUrl="~/Images/edit.png"
                 Owner="RadToolBar1" Text="Edit Selected" Visible='<%# grdLogins.EditIndexes.Count = 0 %>'>
             </telerik:RadToolBarButton>
             <telerik:RadToolBarButton runat="server" CommandName="UpdateEdited" ImageUrl="~/Images/check2.png"
                 Text="Update Edit" Visible='<%# grdLogins.EditIndexes.Count > 0 %>'>
             </telerik:RadToolBarButton>
             <telerik:RadToolBarButton runat="server" CommandName="CancelAll" ImageUrl="~/Images/undo.png"
                 Text="Cancel" Visible='<%# grdLogins.EditIndexes.Count > 0 or grdLogins.MasterTableView.IsItemInserted %>'>
             </telerik:RadToolBarButton>
             <telerik:RadToolBarButton runat="server" CommandName="PerformInsert" ImageUrl="~/Images/redo.png"
                 Text="Commit Insert" Visible='<%# grdLogins.MasterTableView.IsItemInserted%>'>
             </telerik:RadToolBarButton>
             <telerik:RadToolBarButton runat="server" CommandName="DeleteSelected" ImageUrl="~/Images/delete2.png"
                 Owner="RadToolBar1" Text="Delete Selected">
             </telerik:RadToolBarButton>
             <telerik:RadToolBarButton runat="server" IsSeparator="True" Text="Sep3">
             </telerik:RadToolBarButton>
             <telerik:RadToolBarButton runat="server" CommandName="RebindGrid" ImageUrl="~/Images/refresh.png"
                 Text="Refresh">
             </telerik:RadToolBarButton>
         </items>
                         </telerik:RadToolBar>
                         </CommandItemTemplate>
                 </MasterTableView>
                 <PagerStyle PageButtonCount="5" />
                 <FilterMenu EnableImageSprites="False">
                     <WebServiceSettings>
                         <ODataSettings InitialContainerName="">
                         </ODataSettings>
                     </WebServiceSettings>
                 </FilterMenu>
                 <HeaderContextMenu CssClass="GridContextMenu GridContextMenu_Office2010Blue">
                     <WebServiceSettings>
                         <ODataSettings InitialContainerName="">
                         </ODataSettings>
                     </WebServiceSettings>
                 </HeaderContextMenu>
                 </telerik:RadGrid>

3 Answers, 1 is accepted

Sort by
0
Andrey
Telerik team
answered on 03 Jan 2012, 01:33 PM
Hello Jeff,

Event argument e.Item is returns the Grid item in which the button resides. So, when the button is in the EditForm the e.item is returning the GridEditFormItem and when the button is in CommandItemTemplate, the e.Item is returning the GridCommandItem.

However, there is still a way to obtain the Grid insert item which involves recursion. You need to put this function in your code:

Protected Function GetControlsRecursively(c As Control) As IGridInsertItem
    For Each control As Control In c.Controls
        If TypeOf c Is IGridInsertItem Then
            Return DirectCast(c, IGridInsertItem)
        End If
        Dim dataItem As IGridInsertItem = GetControlsRecursively(control)
        If dataItem IsNot Nothing Then
            Return dataItem
        End If
    Next
    Return Nothing
End Function

This function will return the first IGridInsertItem.

Then, you need to modify your code a bit:

Private Sub grdLogins_InsertCommand(sender As Object, e As Telerik.Web.UI.GridCommandEventArgs) Handles grdLogins.InsertCommand
    Dim insertedItem As GridDataItem = DirectCast(GetControlsRecursively(RadGrid1), GridDataItem)
    Dim UserID As Integer = GetSelectedUser()
    Dim Login As String = (TryCast(insertedItem("NTLogin").Controls(0), TextBox)).Text
    gUserData.AddUserNTCredential(UserTree.SelectedValue, Login, GetEditorInfo)
    grdLogins.Rebind()
End Sub


All the best,
Andrey
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
0
Jeff
Top achievements
Rank 1
answered on 03 Jan 2012, 08:55 PM
Thanks, that works great. Can you send an example for update and delete as well?
0
Andrey
Telerik team
answered on 04 Jan 2012, 02:47 PM
Hi Jeff,

The approach is similar for bothe the Update and Delete commands, namely:

Protected Sub RadGrid1_UpdateCommand(sender As Object, e As GridCommandEventArgs)
    For Each editedItem As GridDataItem In RadGrid1.MasterTableView.Items
        If editedItem.IsInEditMode Then
        Dim LoginID As Integer = CInt(editedItem.OwnerTableView.DataKeyValues(editedItem.ItemIndex)("LoginKey").ToString)
        Dim Login As String = (TryCast(editedItem("NTLogin").Controls(0), TextBox)).Text
        Dim UserID As Integer = CInt(GetSelectedUser())
        gUserData.UpdateUserNTCredential(UserID, LoginID, Login, GetEditorInfo)
        grdLogins.Rebind()
        End If
        Exit For
    Next
End Sub

and

Protected Sub RadGrid1_DeleteCommand(sender As Object, e As GridCommandEventArgs)
    For Each dataItem As GridDataItem In RadGrid1.SelectedItems
    Dim LoginID As Integer = CInt(item.OwnerTableView.DataKeyValues(item.ItemIndex)("LoginKey").ToString)
    gUserData.DeleteUserNTCredential(LoginID)
    grdLogins.Rebind()
    Next
End Sub


All the best,
Andrey
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
Grid
Asked by
Jeff
Top achievements
Rank 1
Answers by
Andrey
Telerik team
Jeff
Top achievements
Rank 1
Share this question
or