toolbar and record are different in prepareCommand

  1. #1

    bug is found?: toolbar and record are different in prepareCommand when Grouping gridPanel

    Hi,
    I have a GridPanel with grouping by boolean field. GridPanel has a CommandColumn with two commands: Start and Stop. Only one command should be visible at time and it's depending from group field (if 'field == true' should show Start command and if 'field == false' should show Stop command).
    Set command visible state I doing in prepareToolbar function, but I was surprised that toolbar and record are different, it's mean that toolbar for second row but record for third row, and I can't set command visible state properly.

    How make sure toolbar showing correct record data of command?
    p.s. if I remove grouping all works fine.

     <ext:GridPanel ID="gridPanelCars" runat="server" Header="False" Border="False">
                                    <Store>
                                        <ext:Store runat="server" GroupField="IsTracked">
                                            <Model>
                                                <ext:Model ID="Model1" runat="server" IDProperty="Id">
                                                    <Fields>
                                                        <ext:ModelField Name="Id" />
                                                        <ext:ModelField Name="Name" Type="String" />
                                                        <ext:ModelField Name="Speed" Type="Float" />
                                                        <ext:ModelField Name="LastSendTime" />
                                                        <ext:ModelField Name="IsTracked">
                                                        </ext:ModelField>
                                                    </Fields>
                                                </ext:Model>
                                            </Model>
                                            <Sorters>
                                                <ext:DataSorter Property="IsTracked" Direction="DESC"  />
                                            </Sorters>                                       
                                        </ext:Store>
                                    </Store>
                                    <ColumnModel ID="ColumnModel1" runat="server" ForceFit="True" Selectable="False">
                                        <Columns>
                                            <ext:Column ID="Column1" runat="server" Text="Название" DataIndex="Name">                                           
                                            </ext:Column>
                                            <ext:Column ID="Column2" runat="server" Text="Описание" DataIndex="Speed" Flex="1">              
                                            </ext:Column>
                                            <ext:Column runat="server" DataIndex="IsTracked">
                                            </ext:Column>
                                            <ext:CommandColumn ID="CommandColumn1" runat="server">
                                                <Commands>
                                                    <ext:GridCommand Icon="CarStart" CommandName="CarStart">
                                                        <ToolTip Text="Начать трекинг" />
                                                    </ext:GridCommand>
                                                    <ext:GridCommand Icon="CarStop" CommandName="CarStop">
                                                        <ToolTip Text="Остановить трекинг" />
                                                    </ext:GridCommand>
                                                </Commands>
                                                <Listeners>
                                                    <Command Fn="Repository.executeRepositoryCommand" />
                                                </Listeners>
                                                <PrepareToolbar Fn="Repository.prepareRepositoryCommand">
                                                </PrepareToolbar>
                                            </ext:CommandColumn>
                                        </Columns>
                                    </ColumnModel>
                                    <View>
                                        <ext:GridView ID="GridView1" runat="server">                                       
                                        </ext:GridView>
                                    </View>
                                    <Plugins>
                                        <ext:CellEditing ID="CellEditing1" runat="server">
                                        </ext:CellEditing>
                                    </Plugins>
                                    <SelectionModel>
                                        <ext:RowSelectionModel ID="RowSelectionModel1" runat="server" Mode="Multi">
                                            <Listeners>
                                            </Listeners>
                                        </ext:RowSelectionModel>
                                    </SelectionModel>
                                    <Features>
                                        <ext:GroupingSummary ID="Group1" runat="server" GroupHeaderTplString="{groupValue}"
                                            HideGroupedHeader="False" EnableGroupingMenu="false">
                                        </ext:GroupingSummary>
                                    </Features>
                                </ext:GridPanel>
    and prepareToolbar function:

    Repository.prepareRepositoryCommand = function (grid, toolbar, rowIndex, record) {
        if (record.get("IsTracked")) {
            toolbar.items.items[0].hide();
        } else {
            toolbar.items.items[1].hide();
        }
    };
    Last edited by retto; Jan 28, 2013 at 8:57 PM.
  2. #2
    Here is my test case, it works fine
    <%@ Page Language="C#" %>
    <%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
    
    
    <!DOCTYPE html>
    
    
    <script runat="server">
        protected void Page_Load(object sender, EventArgs e)
         {
             this.Store1.DataSource = new List<object> 
             { 
                 new {Id =1, Name = "Name1", Speed = 1, IsTracked = false},
                 new {Id =2, Name = "Name2", Speed = 2, IsTracked = true},
                 new {Id =3, Name = "Name3", Speed = 3, IsTracked = false},
                 new {Id =4, Name = "Name4", Speed = 4, IsTracked = true},
                 new {Id =5, Name = "Name5", Speed = 5, IsTracked = false},
                 new {Id =6, Name = "Name6", Speed = 6, IsTracked = true}
             };
    
    
            if (!X.IsAjaxRequest)
            {
                this.Store1.DataBind();           
            }
        }
    </script>
    
    
    <html>
    <head runat="server">
        <title></title>
    
    
        <script type="text/javascript">
            var prepareRepositoryCommand = function (grid, toolbar, rowIndex, record) {
                if (record.get("IsTracked")) {
                    toolbar.items.items[0].hide();
                } else {
                    toolbar.items.items[1].hide();
                }
            };
        </script>
    </head>
    <body>
         <form runat="server">
            <ext:ResourceManager runat="server" />
    
    
             <ext:GridPanel ID="gridPanelCars" runat="server" Header="False" Border="False">
                <Store>
                    <ext:Store ID="Store1" runat="server" GroupField="IsTracked">
                        <Model>
                            <ext:Model ID="Model1" runat="server" IDProperty="Id">
                                <Fields>
                                    <ext:ModelField Name="Id" />
                                    <ext:ModelField Name="Name" Type="String" />
                                    <ext:ModelField Name="Speed" Type="Float" />
                                    <ext:ModelField Name="LastSendTime" />
                                    <ext:ModelField Name="IsTracked">
                                    </ext:ModelField>
                                </Fields>
                            </ext:Model>
                        </Model>
                        <Sorters>
                            <ext:DataSorter Property="IsTracked" Direction="DESC"  />
                        </Sorters>                                       
                    </ext:Store>
                </Store>
                <ColumnModel ID="ColumnModel1" runat="server" ForceFit="True" Selectable="False">
                    <Columns>
                        <ext:Column ID="Column1" runat="server" Text="Название" DataIndex="Name">                                           
                        </ext:Column>
                        <ext:Column ID="Column2" runat="server" Text="Описание" DataIndex="Speed" Flex="1">              
                        </ext:Column>
                        <ext:Column runat="server" DataIndex="IsTracked">
                        </ext:Column>
                        <ext:CommandColumn ID="CommandColumn1" runat="server">
                            <Commands>
                                <ext:GridCommand Icon="CarStart" CommandName="CarStart">
                                    <ToolTip Text="Начать трекинг" />
                                </ext:GridCommand>
                                <ext:GridCommand Icon="CarStop" CommandName="CarStop">
                                    <ToolTip Text="Остановить трекинг" />
                                </ext:GridCommand>
                            </Commands>
                                               
                            <PrepareToolbar Fn="prepareRepositoryCommand">
                            </PrepareToolbar>
                        </ext:CommandColumn>
                    </Columns>
                </ColumnModel>
                <View>
                    <ext:GridView ID="GridView1" runat="server">                                       
                    </ext:GridView>
                </View>
                <Plugins>
                    <ext:CellEditing ID="CellEditing1" runat="server">
                    </ext:CellEditing>
                </Plugins>
                <SelectionModel>
                    <ext:RowSelectionModel ID="RowSelectionModel1" runat="server" Mode="Multi">
                        <Listeners>
                        </Listeners>
                    </ext:RowSelectionModel>
                </SelectionModel>
                <Features>
                    <ext:GroupingSummary ID="Group1" runat="server" GroupHeaderTplString="{groupValue}"
                        HideGroupedHeader="False" EnableGroupingMenu="false">
                    </ext:GroupingSummary>
                </Features>
            </ext:GridPanel>
        
            
        </form>
    </body>
    </html>
  3. #3
    Vladimir, I modified code and you can see bug after executing any commands. Commands will hidden wrong maybe error in my code?

    <%@ Page Language="C#" %>
    
    <%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
    <!DOCTYPE html>
    <script runat="server">
        protected void Page_Load(object sender, EventArgs e) {
            this.Store1.DataSource = new List<object> 
    *********{ 
    *************new {Id =1, Name = "Name1", Speed = 1, IsTracked = false},
    *************new {Id =2, Name = "Name2", Speed = 2, IsTracked = true},
    *************new {Id =3, Name = "Name3", Speed = 3, IsTracked = false},
    *************new {Id =4, Name = "Name4", Speed = 4, IsTracked = true},
    *************new {Id =5, Name = "Name5", Speed = 5, IsTracked = false},
    *************new {Id =6, Name = "Name6", Speed = 6, IsTracked = true}
    *********};
    
    
            if (!X.IsAjaxRequest) {
                this.Store1.DataBind();
            }
        }
    </script>
    <html>
    <head id="Head1" runat="server">
        <title></title>
        <script type="text/javascript">
    ********        var prepareRepositoryCommand = function (grid, toolbar, rowIndex, record) {
        if (record.get("IsTracked")) {
            toolbar.items.items[0].hide();
        } else {
            toolbar.items.items[1].hide();
        }
    };
            executeRepositoryCommand = function (t, command, record, recordIndex, cellIndex) {
                if (command == 'CarStart') {
                    record.set('IsTracked', true);
                } else if (command == "CarStop") {
                    record.set('IsTracked', false);
                }
            };
        </script>
    </head>
    <body>
        <form id="Form1" runat="server">
        <ext:ResourceManager ID="ResourceManager1" runat="server" />
        <ext:GridPanel ID="gridPanelCars" runat="server" Header="False" Border="False">
            <Store>
                <ext:Store ID="Store1" runat="server" GroupField="IsTracked">
                    <Model>
                        <ext:Model ID="Model1" runat="server" IDProperty="Id">
                            <Fields>
                                <ext:ModelField Name="Id" />
                                <ext:ModelField Name="Name" Type="String" />
                                <ext:ModelField Name="Speed" Type="Float" />
                                <ext:ModelField Name="LastSendTime" />
                                <ext:ModelField Name="IsTracked">
                                </ext:ModelField>
                            </Fields>
                        </ext:Model>
                    </Model>
                    <Sorters>
                        <ext:DataSorter Property="IsTracked" Direction="DESC" />
                    </Sorters>
                </ext:Store>
            </Store>
            <ColumnModel ID="ColumnModel1" runat="server" ForceFit="True" Selectable="False">
                <Columns>
                    <ext:Column ID="Column1" runat="server" Text="Название" DataIndex="Name">
                    </ext:Column>
                    <ext:Column ID="Column2" runat="server" Text="Описание" DataIndex="Speed" Flex="1">
                    </ext:Column>
                    <ext:Column ID="Column3" runat="server" DataIndex="IsTracked">
                    </ext:Column>
                    <ext:CommandColumn ID="CommandColumn1" runat="server">
                        <Commands>
                            <ext:GridCommand Icon="CarStart" CommandName="CarStart">
                                <ToolTip Text="Начать трекинг" />
                            </ext:GridCommand>
                            <ext:GridCommand Icon="CarStop" CommandName="CarStop">
                                <ToolTip Text="Остановить трекинг" />
                            </ext:GridCommand>
                        </Commands>
                        <Listeners>
                            <Command Fn="executeRepositoryCommand" />
                        </Listeners>
                        <PrepareToolbar Fn="prepareRepositoryCommand">
                        </PrepareToolbar>
                    </ext:CommandColumn>
                </Columns>
            </ColumnModel>
            <View>
                <ext:GridView ID="GridView1" runat="server">
                </ext:GridView>
            </View>
            <Plugins>
                <ext:CellEditing ID="CellEditing1" runat="server">
                </ext:CellEditing>
            </Plugins>
            <SelectionModel>
                <ext:RowSelectionModel ID="RowSelectionModel1" runat="server" Mode="Multi">
                    <Listeners>
                    </Listeners>
                </ext:RowSelectionModel>
            </SelectionModel>
            <Features>
                <ext:GroupingSummary ID="Group1" runat="server" GroupHeaderTplString="{groupValue}"
                    HideGroupedHeader="False" EnableGroupingMenu="false">
                </ext:GroupingSummary>
            </Features>
        </ext:GridPanel>
        </form>
    </body>
    </html>
  4. #4
    I don't see any bug, please provide more details (screenshot)
  5. #5
    I use the code mentioned above, (see attached image please), when I click on button by Name5 record is moved to true group but toolbar has incorrect visible button. It's happen after field IsTracked changed, in this time prepareRepositoryCommand fired and in args we have: toolbar by Name5 row and record by Name1, therefore toolbar' button hiding incorrectly.

    Click image for larger version. 

Name:	grouping_command.jpg 
Views:	70 
Size:	85.7 KB 
ID:	5504
  6. #6
    Unfortunately, I cannot reproduce it with latest source code, may be it is fixed already
  7. #7
    latest source code available for license with premium support , correct? And after I will buy license I can get latest version from SVN before release?

    Regards, Alex
  8. #8
    Yes, premium subscribers (license + premium support) have SVN access to all versions (including under current development)

Similar Threads

  1. [CLOSED] this.toolbar.record.store is null
    By drgw74 in forum 1.x Legacy Premium Help
    Replies: 4
    Last Post: Jun 18, 2012, 2:52 PM
  2. Replies: 4
    Last Post: Apr 27, 2012, 2:07 PM
  3. Replies: 0
    Last Post: Oct 26, 2011, 1:16 PM
  4. [CLOSED] grid parameter is null for prepareCommand function in 1.0.
    By vedagopal2004 in forum 1.x Legacy Premium Help
    Replies: 5
    Last Post: Feb 14, 2011, 7:47 AM
  5. Replies: 3
    Last Post: Aug 13, 2009, 3:27 PM

Tags for this Thread

Posting Permissions