[OPEN] [#319] Ext.grid.Panel stopEditing() and Ext.data.Store sort() compatibility

Page 1 of 2 12 LastLast
  1. #1

    [OPEN] [#319] Ext.grid.Panel stopEditing() and Ext.data.Store sort() compatibility

    Hi,

    Please advise what are the equivalents of Grid's headersDisabled property and stopEditing() method as well as Store's sort() method taking the Field Name as parameter in 2.x.
    Last edited by Baidaly; Aug 08, 2013 at 12:32 AM. Reason: [OPEN] [#319]
  2. #2
    Hello!

    Ideally, you can use the following:

    <ColumnModel Sortable="False" EnableColumnHide="False">
    But there are two bugs:

    1. bug with preventing sorting on header click: http://forums.ext.net/showthread.php?23032
    2. bug with disabling sort menu: https://github.com/extnet/Ext.NET/issues/319.


    For now, I would recommend to use Column's property:
    <ext:Column runat="server" Sortable="False" />
    There are two methods that you can use to stop editing:
    http://docs.sencha.com/extjs/4.2.1/#...hod-cancelEdit
    http://docs.sencha.com/extjs/4.2.1/#...d-completeEdit
    Last edited by Baidaly; Aug 08, 2013 at 12:33 AM.
  3. #3
    Hi,

    A GridView's HeadersDisable option in Ext.NET v1 also disable headers' menu. An alternative in Ext.NET v2 is:
    <ext:Column runat="server" MenuDisabled="true" />
    By the way, both the settings - Sortable and MenuDisabled - are possible to set up via a ColumnModel's Defaults.
    <ColumnModel runat="server">
        <Defaults>
            <ext:Parameter Name="sortable" Value="false" Mode="Raw" />
            <ext:Parameter Name="menuDisabled" Value="true" Mode="Raw" />
        </Defaults>
        <Columns>
            <ext:Column runat="server" Text="Test1" DataIndex="test1" />
            <ext:Column runat="server" Text="Test2" DataIndex="test2" />
            <ext:Column runat="server" Text="Test3" DataIndex="test3" />
        </Columns>
    </ColumnModel>
    Quote Originally Posted by vadym.f View Post
    as well as Store's sort() method taking the Field Name as parameter in 2.x.
    I think it still works.
    store.sort("columnDataIndex");
    store.sort("columnDataIndex", "DESC");
    Am I misunderstanding your requirement?
  4. #4
    Here's in a nutshell what I'm up to. I'm still not clear how to use stopEditing() in 2.x - what kind of plugin does it require to be defined? I didn't have to have an editing plugin back in 1.x. The headersDisabled property is undefined so I'm not sure how to make use of it.

    <%@ Page Language="C#" %>
    
    <%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
    <script runat="server">
        private object[] TestData
        {
            get
            {
                var now = DateTime.Now;
                return new object[]
                {
                    new object[] { "3m Co", 71.72, 0.02, 0.03, now },
                    new object[] { "Alcoa Inc", 29.01, 0.42, 1.47, now },
                    new object[] { "Altria Group Inc", 83.81, 0.28, 0.34, now },
                    new object[] { "American Express Company", 52.55, 0.01, 0.02, now },
                    new object[] { "American International Group, Inc.", 64.13, 0.31, 0.49, now },
                    new object[] { "AT&T Inc.", 31.61, -0.48, -1.54, now },
                    new object[] { "Boeing Co.", 75.43, 0.53, 0.71, now },
                    new object[] { "Caterpillar Inc.", 67.27, 0.92, 1.39, now },
                    new object[] { "Citigroup, Inc.", 49.37, 0.02, 0.04, now },
                    new object[] { "E.I. du Pont de Nemours and Company", 40.48, 0.51, 1.28, now },
                    new object[] { "Exxon Mobil Corp", 68.1, -0.43, -0.64, now },
                    new object[] { "General Electric Company", 34.14, -0.08, -0.23, now },
                    new object[] { "Government Motors Corporation", 30.27, 1.09, 3.74, now },
                    new object[] { "Hewlett-Packard Co.", 36.53, -0.03, -0.08, now },
                    new object[] { "Honeywell Intl Inc", 38.77, 0.05, 0.13, now },
                    new object[] { "Intel Corporation", 19.88, 0.31, 1.58, now },
                    new object[] { "International Business Machines", 81.41, 0.44, 0.54, now },
                    new object[] { "Johnson & Johnson", 64.72, 0.06, 0.09, now },
                    new object[] { "JP Morgan & Chase & Co", 45.73, 0.07, 0.15, now },
                    new object[] { "McDonald\"s Corporation", 36.76, 0.86, 2.40, now },
                    new object[] { "Merck & Co., Inc.", 40.96, 0.41, 1.01, now },
                    new object[] { "Microsoft Corporation", 25.84, 0.14, 0.54, now },
                    new object[] { "Pfizer Inc", 27.96, 0.4, 1.45, now },
                    new object[] { "The Coca-Cola Company", 45.07, 0.26, 0.58, now },
                    new object[] { "The Home Depot, Inc.", 34.64, 0.35, 1.02, now },
                    new object[] { "The Procter & Gamble Company", 61.91, 0.01, 0.02, now },
                    new object[] { "United Technologies Corporation", 63.26, 0.55, 0.88, now },
                    new object[] { "Verizon Communications", 35.57, 0.39, 1.11, now },
                    new object[] { "Wal-Mart Stores, Inc.", 45.45, 0.73, 1.63, now }
                };
            }
        }
    
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!X.IsAjaxRequest)
            {
                this.Store1.DataSource = this.TestData;
                this.Store1.DataBind();
            }
        }
    </script>
    <!DOCTYPE html>
    <html>
    <head id="Head1" runat="server">
        <title>Local Data Paging - Ext.NET Examples</title>
        <script type="text/javascript">
            var onGridPanelViewReady = function (grid) {
                var view = grid.getView();
                grid.un('headerclick', view.onHeaderClick, view);
                grid.on('headerclick', onGridPanelHeaderClick, view);
    
                grid.getView().suspendEvents(false);
                // Call a function to apply filters here
                // applyFilters(grid);
                grid.getView().resumeEvents();
            };
    
            var onGridPanelHeaderClick = function (columnModel, column, e) {
                var columnIndex = column.getIndex();
                var grid = column.grid;
                var gridView = grid.getView();
                var isSortable = column.sortable;
    
                // headersDisabled is undefined - how is it used??
                if (gridView.headersDisabled || !isSortable) {
                    return;
                }
                
                // Modify this call appropriately
                grid.stopEditing(true);
                grid.store.sort(columnIndex);
            };           
        </script>
    </head>
    <body>
        <form id="Form1" runat="server">
        <ext:ResourceManager ID="ResourceManager1" runat="server" />
        <ext:Viewport runat="server" Layout="FitLayout">
            <Items>
                <ext:GridPanel ID="GridPanel1" runat="server" Flex="1">
                    <Store>
                        <ext:Store ID="Store1" runat="server" RemoteSort="false" AutoLoad="true" PageSize="10">
                            <Model>
                                <ext:Model ID="Model1" runat="server" IDProperty="company">
                                    <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" />
                                    </Fields>
                                </ext:Model>
                            </Model>
                        </ext:Store>
                    </Store>
                    <ColumnModel ID="ColumnModel1" runat="server">
                        <Columns>
                            <ext:Column ID="Column1" runat="server" Text="Company" DataIndex="company" Width="200">
                                <Editor>
                                    <ext:TextField ID="TextField1" runat="server" />
                                </Editor>
                            </ext:Column>
                            <ext:Column ID="Column2" runat="server" Text="Price" Width="75" DataIndex="price">
                                <Editor>
                                    <ext:TextField ID="TextField2" runat="server" />
                                </Editor>
                            </ext:Column>
                            <ext:Column ID="Column3" runat="server" Text="Change" Width="100" DataIndex="change" />
                            <ext:Column ID="Column4" runat="server" Text="Change" Width="100" DataIndex="pctChange" />
                            <ext:DateColumn ID="DateColumn1" runat="server" Text="Last Updated" Width="120" DataIndex="lastChange"
                                Format="HH:mm:ss" />
                        </Columns>
                    </ColumnModel>
                    <SelectionModel>
                        <ext:RowSelectionModel ID="RowSelectionModel1" runat="server" Mode="Multi" />
                    </SelectionModel>
                    <BottomBar>
                        <ext:PagingToolbar ID="PagingToolbar1" runat="server">
                        </ext:PagingToolbar>
                    </BottomBar>
                    <Listeners>
                        <ViewReady Fn="onGridPanelViewReady" />
                    </Listeners>
                </ext:GridPanel>
            </Items>
        </ext:Viewport>
        </form>
    </body>
    </html>
    Last edited by vadym.f; Aug 08, 2013 at 2:58 PM.
  5. #5
    Quote Originally Posted by vadym.f View Post
    Here's in a nutshell what I'm up to. I'm still not clear how to use stopEditing() in 2.x - what kind of plugin does it require to be defined? I didn't have to have an editing plugin back in 1.x.
    Yes, it v2 it is required to set up an editing plugin - CellEditing or RowEditing.
    https://examples2.ext.net/#/GridPane...s/CellEditing/
    https://examples2.ext.net/#/GridPane...ins/RowEditor/

    So,
    grid.editingPlugin.completeEdit();

    Quote Originally Posted by vadym.f View Post
    The headersDisabled property is undefined so I'm not sure how to make use of it.
    There is no such a property in v2.

    Could you, please, clarify explain the scenario? I am not fully getting it.
  6. #6
    Thanks again for the tips Daniil!
    I'm converting the 1.x code and the test case is related to the older thread at http://forums.ext.net/showthread.php...-on-the-server. I don't want the client side sort change event to fire as a result of server side store sorting activity. I don't know if all the calls defined in the related thread are still applicable and whether the whole setup is still valid and justified. For example, there's no need to edit a grid row in my scenario. Maybe, a better way around the problem exists.
    I've found it cumbersome to migrate the custom code so far but we have pretty elaborate UI requirements. Please also take a look at the updated code sample below. I'm trying to select the top row after re-sort but often two rows become highlighted at the same time. If more info or clarification is needed, please advise.

    <%@ Page Language="C#" %>
    
    <%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
    <script runat="server">
        private object[] TestData
        {
            get
            {
                var now = DateTime.Now;
                return new object[]
                {
                    new object[] { "3m Co", 71.72, 0.02, 0.03, now },
                    new object[] { "Alcoa Inc", 29.01, 0.42, 1.47, now },
                    new object[] { "Altria Group Inc", 83.81, 0.28, 0.34, now },
                    new object[] { "American Express Company", 52.55, 0.01, 0.02, now },
                    new object[] { "American International Group, Inc.", 64.13, 0.31, 0.49, now },
                    new object[] { "AT&T Inc.", 31.61, -0.48, -1.54, now },
                    new object[] { "Boeing Co.", 75.43, 0.53, 0.71, now },
                    new object[] { "Caterpillar Inc.", 67.27, 0.92, 1.39, now },
                    new object[] { "Citigroup, Inc.", 49.37, 0.02, 0.04, now },
                    new object[] { "E.I. du Pont de Nemours and Company", 40.48, 0.51, 1.28, now },
                    new object[] { "Exxon Mobil Corp", 68.1, -0.43, -0.64, now },
                    new object[] { "General Electric Company", 34.14, -0.08, -0.23, now },
                    new object[] { "Government Motors Corporation", 30.27, 1.09, 3.74, now },
                    new object[] { "Hewlett-Packard Co.", 36.53, -0.03, -0.08, now },
                    new object[] { "Honeywell Intl Inc", 38.77, 0.05, 0.13, now },
                    new object[] { "Intel Corporation", 19.88, 0.31, 1.58, now },
                    new object[] { "International Business Machines", 81.41, 0.44, 0.54, now },
                    new object[] { "Johnson & Johnson", 64.72, 0.06, 0.09, now },
                    new object[] { "JP Morgan & Chase & Co", 45.73, 0.07, 0.15, now },
                    new object[] { "McDonald\"s Corporation", 36.76, 0.86, 2.40, now },
                    new object[] { "Merck & Co., Inc.", 40.96, 0.41, 1.01, now },
                    new object[] { "Microsoft Corporation", 25.84, 0.14, 0.54, now },
                    new object[] { "Pfizer Inc", 27.96, 0.4, 1.45, now },
                    new object[] { "The Coca-Cola Company", 45.07, 0.26, 0.58, now },
                    new object[] { "The Home Depot, Inc.", 34.64, 0.35, 1.02, now },
                    new object[] { "The Procter & Gamble Company", 61.91, 0.01, 0.02, now },
                    new object[] { "United Technologies Corporation", 63.26, 0.55, 0.88, now },
                    new object[] { "Verizon Communications", 35.57, 0.39, 1.11, now },
                    new object[] { "Wal-Mart Stores, Inc.", 45.45, 0.73, 1.63, now }
                };
            }
        }
    
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!X.IsAjaxRequest)
            {
                this.Store1.DataSource = this.TestData;
                this.Store1.DataBind();
            }
        }
    </script>
    <!DOCTYPE html>
    <html>
    <head id="Head1" runat="server">
        <title>Local Data Paging - Ext.NET Examples</title>
        <script type="text/javascript">
            var onGridPanelViewReady = function (grid) {
                var view = grid.getView();
                grid.un('headerclick', view.onHeaderClick, view);
                grid.on('headerclick', onGridPanelHeaderClick, view);
    
                grid.getView().suspendEvents(false);
                // Call a function to apply filters here
                grid.getView().resumeEvents();
            };
    
            var onGridPanelHeaderClick = function (columnModel, column, e) {
                var columnIndex = column.getIndex();
                var grid = column.grid;
                var gridView = grid.getView();
                var isSortable = column.sortable;
    
                if (gridView.headersDisabled || !isSortable) {
                    return;
                }
    
                grid.editingPlugin.cancelEdit();
                //grid.stopEditing(true);
                grid.store.sort(columnIndex);
    
                grid.getSelectionModel().deselectAll();
                grid.getSelectionModel().selectRange(0, 0);
            };           
        </script>
    </head>
    <body>
        <form id="Form1" runat="server">
        <ext:ResourceManager ID="ResourceManager1" runat="server" />
        <ext:Viewport runat="server" Layout="FitLayout">
            <Items>
                <ext:GridPanel ID="GridPanel1" runat="server" Flex="1">
                    <Store>
                        <ext:Store ID="Store1" runat="server" RemoteSort="false" AutoLoad="true" PageSize="10">
                            <Model>
                                <ext:Model ID="Model1" runat="server" IDProperty="company">
                                    <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" />
                                    </Fields>
                                </ext:Model>
                            </Model>
                        </ext:Store>
                    </Store>
                    <ColumnModel ID="ColumnModel1" runat="server">
                        <Columns>
                            <ext:Column ID="Column1" runat="server" Text="Company" DataIndex="company" Width="200">
                                <Editor>
                                    <ext:TextField ID="TextField1" runat="server" />
                                </Editor>
                            </ext:Column>
                            <ext:Column ID="Column2" runat="server" Text="Price" Width="75" DataIndex="price">
                                <Editor>
                                    <ext:TextField ID="TextField2" runat="server" />
                                </Editor>
                            </ext:Column>
                            <ext:Column ID="Column3" runat="server" Text="Change" Width="100" DataIndex="change" />
                            <ext:Column ID="Column4" runat="server" Text="Change" Width="100" DataIndex="pctChange" />
                            <ext:DateColumn ID="DateColumn1" runat="server" Text="Last Updated" Width="120" DataIndex="lastChange"
                                Format="HH:mm:ss" />
                        </Columns>
                    </ColumnModel>
                    <SelectionModel>
                        <ext:RowSelectionModel ID="RowSelectionModel1" runat="server" Mode="Multi" />
                    </SelectionModel>
                    <BottomBar>
                        <ext:PagingToolbar ID="PagingToolbar1" runat="server">
                        </ext:PagingToolbar>
                    </BottomBar>
                    <Plugins>
                        <ext:RowEditing ID="RowEditing1" runat="server" ClicksToMoveEditor="1" AutoCancel="false" />
                    </Plugins>
                    <Listeners>
                        <ViewReady Fn="onGridPanelViewReady" />
                    </Listeners>
                </ext:GridPanel>
            </Items>
        </ext:Viewport>
        </form>
    </body>
    </html>
  7. #7
    I can suggest to use DelayedTask:

    var onGridPanelHeaderClick = function (columnModel, column, e) {
        var columnIndex = column.getIndex();
        var grid = column.grid;
        var gridView = grid.getView();
        var isSortable = column.sortable;
    
        if (gridView.headersDisabled || !isSortable) {
            return;
        }
    
        grid.editingPlugin.cancelEdit();
        //grid.stopEditing(true);
        grid.store.sort(columnIndex);
    
        grid.getSelectionModel().deselectAll();
        var task = new Ext.util.DelayedTask(function () {
            grid.getSelectionModel().selectRange(0, 0);
        });
        task.delay(100);
    };
  8. #8
    Thanks Daulet, it seems to be working. I'm surprised though that doing it conventionally should produce such erratic results. Was it not how one is supposed to deselect all rows and then select a single row?
  9. #9
    I think the problem in SelectionMemory. Try to disable it:

    <ext:GridPanel ID="GridPanel1" runat="server" Flex="1" SelectionMemory="False">
    ...
  10. #10
    Sorry, that didn't make any difference.
Page 1 of 2 12 LastLast

Similar Threads

  1. [CLOSED] How to set grid store sort?
    By jchau in forum 2.x Legacy Premium Help
    Replies: 2
    Last Post: Apr 05, 2013, 1:18 AM
  2. Replies: 17
    Last Post: Sep 27, 2012, 3:18 PM
  3. [CLOSED] this.grid.stopEditing error
    By Marcelo in forum 1.x Legacy Premium Help
    Replies: 5
    Last Post: Sep 15, 2011, 3:46 PM
  4. Changing Grid Panel Data Store
    By anand in forum 1.x Help
    Replies: 4
    Last Post: May 14, 2011, 8:07 PM
  5. [CLOSED] Reset store's sort info on grid reload/reconfigure
    By jchau in forum 1.x Legacy Premium Help
    Replies: 6
    Last Post: Aug 10, 2010, 4:06 PM

Tags for this Thread

Posting Permissions