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

RadGrid w/ Context Menu..

5 Answers 181 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Neelima
Top achievements
Rank 1
Neelima asked on 23 Dec 2010, 09:23 PM
I followed this demo to show a context menu on the RadGrid.
http://demos.telerik.com/aspnet-ajax/controls/examples/integration/gridandmenu/defaultcs.aspx?product=grid

How do I prevent context menu from showing up if the Radgrid's row is in edit mode?

5 Answers, 1 is accepted

Sort by
0
Princy
Top achievements
Rank 2
answered on 24 Dec 2010, 07:30 AM
Hello Neelima,

One suggestion is in 'OnRowContextMenu' client event check with the editIndexes of Radgrid and cancel the event if it is in edit mode.

Java Script:
<script type="text/javascript">
    function RowContextMenu(sender, eventArgs) {
        var index = $find("RadGrid1")._editIndexes[0];
        if (index == undefined) {
            var menu = $find("<%=RadMenu1.ClientID %>");
            var evt = eventArgs.get_domEvent();
            if (evt.target.tagName == "INPUT" || evt.target.tagName == "A") {
                return;
            }
            var index = eventArgs.get_itemIndexHierarchical();
            document.getElementById("radGridClickedRowIndex").value = index;
            sender.get_masterTableView().selectItem(sender.get_masterTableView().get_dataItems()[index].get_element(), true);
            menu.show(evt);
            evt.cancelBubble = true;
            evt.returnValue = false;
            if (evt.stopPropagation) {
                evt.stopPropagation();
                evt.preventDefault();
            }
        }
        else {
            eventArgs.set_cancel(true);
        }
    }
 </script>

Thanks,
Princy.
0
Neelima
Top achievements
Rank 1
answered on 27 Dec 2010, 05:29 PM
<asp:TabContainer ID="tabGridview" runat="server">
       <asp:TabPanel ID="tabEdit" runat="server" HeaderText="Edit Reservations">
           <HeaderTemplate>
               Edit Reservations</HeaderTemplate>
           <ContentTemplate>
               <telerik:RadGrid ID="RadGrid1" runat="server" AllowSorting="True" ShowGroupPanel="True"
                   AutoGenerateColumns="False" AllowPaging="True">
                   <GroupingSettings ShowUnGroupButton="True" />
                   <ClientSettings AllowDragToGroup="True" AllowColumnsReorder="True" ColumnsReorderMethod="Reorder"
                       ReorderColumnsOnClient="True">
                       <ClientEvents OnRowContextMenu="RowContextMenu"></ClientEvents>
                   </ClientSettings>
                   <MasterTableView EditMode="InPlace" DataKeyNames="Trip_ID" GroupLoadMode="Client"
                       PageSize="2">
                       <CommandItemSettings ExportToPdfText="Export to Pdf"></CommandItemSettings>
                       <Columns>
                                  <%--  Columns Here --%>
</Columns>
                       <EditFormSettings>
                           <EditColumn UniqueName="EditCommandColumn1">
                           </EditColumn>
                       </EditFormSettings>
                   </MasterTableView><HeaderContextMenu CssClass="GridContextMenu GridContextMenu_Sunset"
                       EnableImageSprites="True">
                   </HeaderContextMenu>
               </telerik:RadGrid>
           </ContentTemplate>
       </asp:TabPanel>
Princy,

I'm getting this error:

Microsoft JScript runtime error: '_editIndexes' is null or not an object

Thanks
Neelima
0
Accepted
Princy
Top achievements
Rank 2
answered on 28 Dec 2010, 08:21 AM
Hello Neelima,

Try the following approach to access RadGrid from client side and check whether it works.

Java Script:

<script type="text/javascript">
       function RowContextMenu(sender, eventArgs) {
           var grid = sender;
           var index = grid._editIndexes[0];
           if (index == undefined) {
               var menu = $find("<%=RadMenu1.ClientID %>");
               var evt = eventArgs.get_domEvent();
               if (evt.target.tagName == "INPUT" || evt.target.tagName == "A") {
                   return;
               }
               var index = eventArgs.get_itemIndexHierarchical();
               document.getElementById("radGridClickedRowIndex").value = index;
               sender.get_masterTableView().selectItem(sender.get_masterTableView().get_dataItems()[index].get_element(), true);
               menu.show(evt);
               evt.cancelBubble = true;
               evt.returnValue = false;
               if (evt.stopPropagation) {
                   evt.stopPropagation();
                   evt.preventDefault();
               }
           }
           else {
               eventArgs.set_cancel(true);
           }
       }
 </script>

Thanks,
Princy.
0
Neelima
Top achievements
Rank 1
answered on 28 Dec 2010, 05:32 PM
Thanks a lot Princy
That worked. However I have another issue with this grid.

The RadGrid's pager row disappears after the postback if the number of rows is less than the page size selected from the pagers DropDownList.

For example.. Lets say ..Initially there were only 2 records. If I select page size to be 10 from the DropDownList, after the postback pager disappears.

Thanks again for your help!!
Neelima
0
Accepted
Princy
Top achievements
Rank 2
answered on 29 Dec 2010, 05:51 AM
Hello Neelima,

You can set PagerStyle AlwaysVisible property as 'true' to achieve this.

ASPX:
<MasterTableView>
  <PagerStyle AlwaysVisible="true" />

Thanks,
Princy.
Tags
Grid
Asked by
Neelima
Top achievements
Rank 1
Answers by
Princy
Top achievements
Rank 2
Neelima
Top achievements
Rank 1
Share this question
or