[FIXED] [2.5] ContextMenu on grid does not clear x-grid-row-before-selected

  1. #1

    [FIXED] [2.5] ContextMenu on grid does not clear x-grid-row-before-selected

    Hi

    I am using a grid with a context-menu. The context menu handler performs an action on the selected record marking it as dirty. When this happens the x-grid-row-before-selected is not being cleared....which leaves a single line in the grid.

    To replicate the issue please make the following changes to your "Simple Array grid" example.

    Listeners on GridPanel:
    <Listeners>
                <ItemContextMenu Fn="showMenu" />
     </Listeners>
    Change to window script:
            var menu;
            var showMenu = function (view, record, item, index, event) {
                var me = this;
    
                if (!menu) {
                    me.menu = new Ext.menu.Menu();
                    me.menu.add(new Ext.menu.Item({
                        text: 'Something',
                        handler: function () {
                            record.set('company', 'sdff');
                        }
                    }));
                }
                event.preventDefault();
                me.menu.showAt(event.getXY());
            }

    To view the issue right click an item and then click the "Something" button. Then right click the another row to show the context menu and select the "Something" button. The line should now be still showing....you can do this numerous times to leave a trail of lines.

    It maybe more apparent switching the Theme to Neptune....

    Kind Regards
    Glen
    Last edited by Daniil; Feb 20, 2014 at 7:44 AM. Reason: [FIXED] [2.5]
  2. #2
    Hi @glenh,

    Thank you for the report. We are investigating. Here is a full test case.

    Example
    <%@ Page Language="C#" %>
    
    <%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
    
    <script runat="server">
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!X.IsAjaxRequest)
            {
                this.Store1.DataSource = this.Data;
            }
        }
    
        private object[] Data
        {
            get
            {
                return new object[]
                {
                    new object[] { "3m Co", 71.72, 0.02, 0.03, "9/1 12:00am" },
                    new object[] { "Alcoa Inc", 29.01, 0.42, 1.47, "9/1 12:00am" },
                    new object[] { "Altria Group Inc", 83.81, 0.28, 0.34, "9/1 12:00am" },
                    new object[] { "American Express Company", 52.55, 0.01, 0.02, "9/1 12:00am" },
                    new object[] { "American International Group, Inc.", 64.13, 0.31, 0.49, "9/1 12:00am" },
                    new object[] { "AT&T Inc.", 31.61, -0.48, -1.54, "9/1 12:00am" },
                    new object[] { "Boeing Co.", 75.43, 0.53, 0.71, "9/1 12:00am" },
                    new object[] { "Caterpillar Inc.", 67.27, 0.92, 1.39, "9/1 12:00am" },
                    new object[] { "Citigroup, Inc.", 49.37, 0.02, 0.04, "9/1 12:00am" },
                    new object[] { "E.I. du Pont de Nemours and Company", 40.48, 0.51, 1.28, "9/1 12:00am" },
                    new object[] { "Exxon Mobil Corp", 68.1, -0.43, -0.64, "9/1 12:00am" },
                    new object[] { "General Electric Company", 34.14, -0.08, -0.23, "9/1 12:00am" },
                    new object[] { "General Motors Corporation", 30.27, 1.09, 3.74, "9/1 12:00am" },
                    new object[] { "Hewlett-Packard Co.", 36.53, -0.03, -0.08, "9/1 12:00am" },
                    new object[] { "Honeywell Intl Inc", 38.77, 0.05, 0.13, "9/1 12:00am" },
                    new object[] { "Intel Corporation", 19.88, 0.31, 1.58, "9/1 12:00am" },
                    new object[] { "International Business Machines", 81.41, 0.44, 0.54, "9/1 12:00am" },
                    new object[] { "Johnson & Johnson", 64.72, 0.06, 0.09, "9/1 12:00am" },
                    new object[] { "JP Morgan & Chase & Co", 45.73, 0.07, 0.15, "9/1 12:00am" },
                    new object[] { "McDonald\"s Corporation", 36.76, 0.86, 2.40, "9/1 12:00am" },
                    new object[] { "Merck & Co., Inc.", 40.96, 0.41, 1.01, "9/1 12:00am" },
                    new object[] { "Microsoft Corporation", 25.84, 0.14, 0.54, "9/1 12:00am" },
                    new object[] { "Pfizer Inc", 27.96, 0.4, 1.45, "9/1 12:00am" },
                    new object[] { "The Coca-Cola Company", 45.07, 0.26, 0.58, "9/1 12:00am" },
                    new object[] { "The Home Depot, Inc.", 34.64, 0.35, 1.02, "9/1 12:00am" },
                    new object[] { "The Procter & Gamble Company", 61.91, 0.01, 0.02, "9/1 12:00am" },
                    new object[] { "United Technologies Corporation", 63.26, 0.55, 0.88, "9/1 12:00am" },
                    new object[] { "Verizon Communications", 35.57, 0.39, 1.11, "9/1 12:00am" },
                    new object[] { "Wal-Mart Stores, Inc.", 45.45, 0.73, 1.63, "9/1 12:00am" }
                };
            }
        }
    </script>
    
    <!DOCTYPE html>
    
    <html>
    <head runat="server">
        <title>Simple Array Grid - Ext.NET Examples</title>
    
    
        <style>
            .x-grid-row-over .x-grid-cell-inner {
                font-weight: bold;
            }
        </style>
    
        <script>
            var menu;
            var showMenu = function (view, record, item, index, event) {
                var me = this;
    
                if (!menu) {
                    me.menu = new Ext.menu.Menu();
                    me.menu.add(new Ext.menu.Item({
                        text: 'Something',
                        handler: function () {
                            record.set('company', 'sdff');
                            App.GridPanel1.view.refreshNode(App.GridPanel1.store.indexOf(record));
                        }
                    }));
                }
                event.preventDefault();
                me.menu.showAt(event.getXY());
            }
    
    
            var template = '<span style="color:{0};">{1}</span>';
    
            var change = function (value) {
                return Ext.String.format(template, (value > 0) ? "green" : "red", value);
            };
    
            var pctChange = function (value) {
                return Ext.String.format(template, (value > 0) ? "green" : "red", value + "%");
            };
        </script>
    </head>
    <body>
        <ext:ResourceManager runat="server" />
    
        <h1>Simple Array Grid</h1>
    
        <ext:GridPanel
            ID="GridPanel1"
            runat="server"
            Title="Array Grid"
            Width="600"
            Height="350">
            <Store>
                <ext:Store ID="Store1" runat="server">
                    <Model>
                        <ext:Model runat="server">
                            <Fields>
                                <ext:ModelField Name="company" />
                                <ext:ModelField Name="price" Type="Float" />
                                <ext:ModelField Name="change" Type="Float" />
                                <ext:ModelField Name="pctChange" Type="Float" />
                                <ext:ModelField Name="lastChange" Type="Date" DateFormat="M/d hh:mmtt" />
                            </Fields>
                        </ext:Model>
                    </Model>
                </ext:Store>
            </Store>
            <ColumnModel>
                <Columns>
                    <ext:Column runat="server" Text="Company" DataIndex="company" Flex="1" />
                    <ext:Column runat="server" Text="Price" DataIndex="price">
                        <Renderer Format="UsMoney" />
                    </ext:Column>
                    <ext:Column runat="server" Text="Change" DataIndex="change">
                        <Renderer Fn="change" />
                    </ext:Column>
                    <ext:Column runat="server" Text="Change" DataIndex="pctChange">
                        <Renderer Fn="pctChange" />
                    </ext:Column>
                    <ext:DateColumn runat="server" Text="Last Updated" DataIndex="lastChange" />
                </Columns>
            </ColumnModel>
            <SelectionModel>
                <ext:RowSelectionModel runat="server" />
            </SelectionModel>
            <Listeners>
                <ItemContextMenu Fn="showMenu" />
            </Listeners>
        </ext:GridPanel>
    </body>
    </html>
  3. #3
  4. #4
    Hi Daniil,

    Yes the fix does work.......Thank you for the prompt response as per usual! You guys are brilliant!!!
  5. #5
    Thank you for the confirmation and kind words!
  6. #6
    The fix has been committed in the revision #5673. It will go to the v2.5 release.

    Thank you again for the report!

Similar Threads

  1. grid panel does not clear the records
    By danillofratta in forum 2.x Help
    Replies: 2
    Last Post: Sep 26, 2013, 3:32 PM
  2. clear checked rows after reload the grid panel
    By hongxue in forum 2.x Help
    Replies: 0
    Last Post: Jun 20, 2013, 1:38 AM
  3. How to clear selected row in grid panel.
    By Satyanarayana murthy in forum 1.x Legacy Premium Help
    Replies: 1
    Last Post: Nov 25, 2009, 8:22 AM
  4. Clear Grid data server side
    By bsnezw in forum 1.x Help
    Replies: 2
    Last Post: Oct 26, 2009, 11:48 AM
  5. How to set and clear selected row in grid
    By grishconner in forum 1.x Help
    Replies: 1
    Last Post: Oct 24, 2009, 9:55 AM

Posting Permissions