Approved
Last Updated: 19 Apr 2019 09:41 by ADMIN
Attila Antal
Created on: 19 Apr 2019 09:33
Category: UI for ASP.NET AJAX
Type: Bug Report
0
EditSelected command puts wrong item into edit mode when called from a DetailTable of a Hierarchical RadGrid

Using CommandItemTemplate (Grid - Command Item) for Editing DetailTable records and selecting an item after filtering or from another page, one item from the first page is put for editing instead. Open the attached GIF animation (EditSelectedEditWrongItem.gif) to see it in action.

 

Currently the workaround we offer is to handle the EditSelected command manually for all the DetailTables Except for the Master.

 

Grid markup:

 

        <telerik:RadGrid ID="RadGrid1" runat="server" AllowPaging="True" Width="100%" PageSize="3"
            OnItemCommand="RadGrid1_ItemCommand"
            OnDetailTableDataBind="RadGrid1_DetailTableDataBind"
            OnNeedDataSource="RadGrid1_NeedDataSource">
            <MasterTableView Name="MasterTable" AutoGenerateColumns="true" DataKeyNames="OrderID">
                <DetailTables>
                    <telerik:GridTableView Name="ChildTable" DataKeyNames="OrderID" AutoGenerateColumns="true" CommandItemDisplay="Top">
                        <CommandItemTemplate>
                            <asp:LinkButton ID="btnEditSelected" runat="server" CommandName="EditSelected" CssClass="btn btn-default">Edit Selected</asp:LinkButton>
                        </CommandItemTemplate>
                    </telerik:GridTableView>
                </DetailTables>
            </MasterTableView>
            <ClientSettings>
                <Selecting AllowRowSelect="true" />
            </ClientSettings>
        </telerik:RadGrid>

 

C# - ItemCommand

 

    protected void RadGrid1_ItemCommand(object sender, GridCommandEventArgs e)
    {
        // Logic applies for all the tables (detail tables) which are not named "MasterTable"
        if(e.Item.OwnerTableView.Name != "MasterTable" && e.CommandName == RadGrid.EditSelectedCommandName)
        {
            e.Canceled = true;

            GridTableView detailTable = e.Item.OwnerTableView;

            if (detailTable.OwnerGrid.SelectedIndexes.Count == 0)
            {
                return;
            }

            foreach (GridDataItem selectedItem in detailTable.OwnerGrid.SelectedItems)
            {
                selectedItem.Edit = true;
            }

            detailTable.Rebind();
        }
    }

 

VB - ItemCommand


Protected Sub RadGrid1_ItemCommand(ByVal sender As Object, ByVal e As GridCommandEventArgs)
    If e.Item.OwnerTableView.Name <> "MasterTable" AndAlso e.CommandName = RadGrid.EditSelectedCommandName Then
        e.Canceled = True
        Dim detailTable As GridTableView = e.Item.OwnerTableView

        If detailTable.OwnerGrid.SelectedIndexes.Count = 0 Then
            Return
        End If

        For Each selectedItem As GridDataItem In detailTable.OwnerGrid.SelectedItems
            selectedItem.Edit = True
        Next

        detailTable.Rebind()
    End If
End Sub

0 comments