[CLOSED] Problems with Hidden Field after SVN Update

  1. #1

    [CLOSED] Problems with Hidden Field after SVN Update

    Hello,

    after an SVN Update (the first since ca. 6 months) we have some trouble with one of our old UserControls.

    Here is the Code:

    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="BuildingSelector.ascx.cs"
        Inherits="App.Controls.GL.BuildingSelector" %>
    <%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
    <style type="text/css" media="screen">
        .os-center-panel-base-body
        {
            background: #efefef;
        }
    </style>
    
    <ext:ResourceManagerProxy ID="ResourceManagerProxy1" runat="server" />
    
    <script type="text/javascript">
        var Selector = {
            Add: function (tree, grid) {
                currentNode = tree.selModel.getSelectedNode();
                if (currentNode != null) {
                    if (currentNode.leaf) {
                        this.AddLeafToGrid(currentNode, grid);
                    } else {
                        currentNode.expand();
                        if (currentNode.hasChildNodes()) {
                            this.AddNodeToGrid(currentNode.childNodes, grid);
                        }
                    }
                }
            },
            AddLeafToGrid: function (currentNode, grid) {
                var idx = grid.store.find('id', currentNode.id);
                if (grid.store.getAt(idx) == undefined) {
                    // Add node to grid if the node isn't allready in grid
                    grid.store.add(new Ext.data.Record({
                        id: currentNode.id,
                        text: currentNode.text
                    })
                    );
                    currentNode.disable();
                }
            },
            AddNodeToGrid: function (childNodes, grid) {
                for (i = 0; i < childNodes.length; i++) {
                    currentNode = childNodes[i];
                    if (currentNode.leaf) {
                        this.AddLeafToGrid(currentNode, grid);
                    }
                }
            },
            Remove: function (grid, tree) {
                if (grid.hasSelection()) {
                    // get selected Rows
                    var records = grid.selModel.getSelections();
                    // it returns selected records, to test it in firefox(firebug)
                    for (var i = 0; i < records.length; i++) {
                        // get id of current row
                        var nodeId = records[i].get('id');
                        // get node from tree
                        currentNode = tree.getNodeById(nodeId);
                        // enable the
                        if (currentNode != null) currentNode.enable();
                    }
                    grid.deleteSelected();
                }
            },
    
            RemoveAll: function (grid, tree) {
                grid.selModel.selectAll();
                this.Remove(grid, tree);
            },
            Save: function (grid, list) {
                list.setValue(Ext.encode(grid.getRowsValues(false)));
            },
    
            Check: function (grid, tree) {
                // it returns selected records, to test it in firefox(firebug)
                for (var i = 0; i < grid.store.data.items.length; i++) {
                    var nodeId = grid.store.data.items[i].get('id');
    
                    currentNode = tree.getNodeById(nodeId);
                    if (currentNode != null) currentNode.disable();
                }
            },
    
            Fill: function (list, grid) {
                listContent = list.getValue();
                if (listContent.length > 0) {
                    entries = Ext.decode(listContent);
                    //grid.store.loadData(entries);
                    for (i = 0; i < entries.length; i++) {
                        grid.store.add(new Ext.data.Record({ id: entries[i].id, text: entries[i].text, tableUid: entries[i].tableUid, dataId: entries[i].dataId }));
                    }
                    //Ext.Msg.alert('Status', 'Filled successfully with "' + listContent + '" entries');
                }
            }
    
        };
    
    </script>
    <script type="text/javascript">
        var onlyBuildingsCanBeSelected = '<%= Core.Tools.Text.FL.Label.OnlyBuildingsCanBeSelected %>';
        var startsWithBuilding = '<%= Core.Providers.NodePath.NodeType.Building %>';
    </script>
    
    <ext:Hidden ID="ItemSelected" runat="server" />
    <ext:Panel runat="server" ID="Panel1">
        <Items>
            <ext:ColumnLayout ID="ColumnLayout1" runat="server" FitHeight="true" Split="false">
                <Columns>
                    <ext:LayoutColumn ColumnWidth="0.5">
                        <ext:TreePanel ID="ItemTree" runat="server" UseArrows="true" AutoScroll="true" TitleCollapse="true"
                            AnimCollapse="true" Border="true" RootVisible="false" MonitorResize="true" EnableDD="false"
                            ContainerScroll="true" Footer="false" Height="300">
                            <TopBar>
                                <ext:Toolbar runat="server" ID="Toolbar1">
                                    <Items>
                                        <ext:Button runat="server" ID="treeExpand" Text="Expand" IconCls="tree-expand-all">
                                            <Listeners>
                                                <Click Handler="
                            #{ItemTree}.expandAll();
                            " />
                                            </Listeners>
                                        </ext:Button>
                                        <ext:Button runat="server" ID="treeCollapse" Text="Collapse" IconCls="tree-collapse-all">
                                            <Listeners>
                                                <Click Handler="
                            #{ItemTree}.collapseAll();
                            " />
                                            </Listeners>
                                        </ext:Button>
                                    </Items>
                                </ext:Toolbar>
                            </TopBar>
                            <Loader>
                                <ext:TreeLoader DataUrl="/neon/App/data/RealEstate.ashx">
                                    <BaseParams>
                                        <ext:Parameter Name="IsSelector" Mode="Raw" Value="true" />
                                    </BaseParams>
                                </ext:TreeLoader>
                            </Loader>
                            <Root>
                                <ext:AsyncTreeNode NodeID="root" Text="Root" AllowDrop="false" AllowDrag="false">
                                </ext:AsyncTreeNode>
                            </Root>
                            <Listeners>
                                <BeforeClick Handler="if ((!node.leaf) && (!node.expanded)) node.expand(false);" />
                                <DblClick Handler="
                        if ((node.leaf) && (node.id.indexOf(startsWithBuilding) != -1))
                            Selector.Add(#{ItemTree}, #{ItemGrid});
                        else if (node.leaf) 
                            Ext.MessageBox.alert('Info', onlyBuildingsCanBeSelected);
                    " />
                                <ExpandNode Handler="
                        Selector.Check(#{ItemGrid}, #{ItemTree});
                    " />
                            </Listeners>
                        </ext:TreePanel>
                    </ext:LayoutColumn>
                    <ext:LayoutColumn>
                        <ext:Panel runat="server" ID="CenterPanel" Width="35" Height="300" Border="true"
                            BodyBorder="true" BodyStyle="padding: 25px 5px 5px 5px;" Cls="os-center-panel"
                            CtCls="os-center-panel-ct" BaseCls="os-center-panel-base">
                            <TopBar>
                                <ext:Toolbar runat="server" ID="CenterToolbar">
                                    <Items>
                                        <ext:Button ID="dummy01" runat="server" Text="" />
                                    </Items>
                                </ext:Toolbar>
                            </TopBar>
                            <Content>
                                <ext:Button ID="Button1" runat="server" Icon="ResultsetNext" StyleSpec="margin-bottom:2px;">
                                    <Listeners>
                                        <Click Handler="
                                Selector.Add(#{ItemTree}, #{ItemGrid});
                        " />
                                    </Listeners>
                                </ext:Button>
                                <ext:Button ID="Button3" runat="server" Icon="ResultsetPrevious" StyleSpec="margin-bottom:2px;">
                                    <Listeners>
                                        <Click Handler="
                        Selector.Remove(#{ItemGrid}, #{ItemTree});
                        " />
                                    </Listeners>
                                </ext:Button>
                                <ext:Button ID="Button4" runat="server" Icon="ResultsetFirst" StyleSpec="margin-bottom:2px;">
                                    <Listeners>
                                        <Click Handler="
                        Selector.RemoveAll(#{ItemGrid}, #{ItemTree});
                        " />
                                    </Listeners>
                                </ext:Button>
                            </Content>
                        </ext:Panel>
                    </ext:LayoutColumn>
                    <ext:LayoutColumn ColumnWidth="0.5">
                        <ext:GridPanel runat="server" ID="ItemGrid" EnableDragDrop="false" AutoExpandColumn="text"
                            Height="300" Border="true">
                            <ColumnModel runat="server">
                                <Columns>
                                    <ext:Column ColumnID="id" Header="Id" DataIndex="id" Hideable="false" Sortable="false"
                                        MenuDisabled="true" Hidden="true" />
                                    <ext:Column ColumnID="text" Header="Building" DataIndex="text" Sortable="true" Hideable="true" />
                                </Columns>
                            </ColumnModel>
                            <SelectionModel>
                                <ext:RowSelectionModel ID="RowSelectionModel1" runat="server" />
                            </SelectionModel>
                            <Listeners>
                                <DblClick Handler="
                        Selector.Remove(#{ItemGrid}, #{ItemTree});
                    " />
                            </Listeners>
                            <Store>
                                <ext:Store runat="server" ID="estateStore">
                                    <Reader>
                                        <ext:JsonReader IDProperty="id">
                                            <Fields>
                                                <ext:RecordField Name="id" Type="Int" Mapping="Id" />
                                                <ext:RecordField Name="text" Type="String" Mapping="Text" SortType="AsText" SortDir="ASC" />
                                            </Fields>
                                        </ext:JsonReader>
                                    </Reader>
                                    <Listeners>
                                        <Load Handler="
            Selector.Fill(#{ItemSelected}, #{ItemGrid});
        " />
                                        <Add Handler="
            Selector.Save(#{ItemGrid}, #{ItemSelected});
        " />
                                        <Remove Handler="
            Selector.Save(#{ItemGrid}, #{ItemSelected});
        " />
                                    </Listeners>
                                </ext:Store>
                            </Store>
                        </ext:GridPanel>
                    </ext:LayoutColumn>
                </Columns>
            </ext:ColumnLayout>
        </Items>
    </ext:Panel>
    Its similar to the TwoGrids sample>
    https://examples1.ext.net/#/GridPane...ous/Two_Grids/

    but with a Tree at the left side.


    The problem is, that the HiddenField is not really found. Firebug says:

    ctl00_mainContentPlaceHolder_Fieldset7_Pluginaa35d 9125f5e4416a1d2917ba91b40b8_ItemGrid is not defined


    Its a bit strange to me because it seems that the ClientId itself is resolved from:
    #{ItemSelected}
    to
    ctl00_mainContentPlaceHolder_Fieldset7_Pluginaa35d 9125f5e4416a1d2917ba91b40b8_ItemGrid

    But the object doesnt seem to be on the page.

    Also a
    Ext.get('ctl00_mainContentPlaceHolder_Fieldset7_Pl uginaa35d9125f5e4416a1d2917ba91b40b8_ItemGrid')
    on the firebug console returns null. Ext.getCmp returns undefined.



    Does anybody have an idea? Where there any specific changes the last months on Ext.NET or ExtJS?


    As I said its a very old control. If I would build it new from scatch I would use normal JavaScript vars instead of Hidden fields
    but we do not have time to rebuild several old UserControls after every Ext.NET udate ;)
    So I hope that there is a another solution.


    Regards,

    Martin
    Last edited by Daniil; May 31, 2011 at 10:46 AM. Reason: [CLOSED]
  2. #2
    Hi,

    Please set Delay="10" for Load listener.
    <Load 
        Handler="Selector.Fill(#{ItemSelected}, #{ItemGrid});" 
        Delay="10" />
    It was a breaking change, apologize for the inconvenience - there was Delay="10" by default.
  3. #3
    Hi,

    I have a similar problem now again with the following Store:

    ctl00_mainContentPlaceHolder_Plugin3_BasketsOvervi ewControl_BasketsOverviewGrid is not defined


    
    //..
    
    
    <ext:Store runat="server" ID="BasketMaterialOverviewStore" AutoLoad="true" DataSourceID="BasketMaterialOverviewSqlDataSource"
        OnRefreshData="BasketMaterialOverviewStore_Refresh" >
        <Reader>
            <ext:JsonReader IDProperty="WARENKORB_MATERIAL_ID" TotalProperty="total">
                <Fields>
                    <ext:RecordField Name="WARENKORB_MATERIAL_ID" />
                    <ext:RecordField Name="MATERIAL_MANDANT_BEZEICHNUNG" />
                    <ext:RecordField Name="WARENKORB_MATERIAL_MENGE" Type="Int" />
                    <ext:RecordField Name="WARENKORB_MATERIAL_LIEFERMENGE" Type="Int" />
                    <ext:RecordField Name="WARENKORB_PACKEINHEIT_BEZEICHNUNG" />
                    <ext:RecordField Name="WARENKORB_MATERIAL_PREIS" Type="Float" />
                    <ext:RecordField Name="MATERIAL_MANDANT_PREIS" Type="Float" />
                    <ext:RecordField Name="MATERIAL_MANDANT_PREIS_WAEHRUNG" />
                    <ext:RecordField Name="WARENKORB_STATUS_ID" />
                    <ext:RecordField Name="MATERIAL_STATUS_BEZEICHNUNG" />
                    <ext:RecordField Name="MATERIAL_MANDANT_BEMERKUNG" />
                    <ext:RecordField Name="WARENKORB_MATERIAL_LIEFERDATUM" Type="Date" />
                    <ext:RecordField Name="IMAGE_ID" />
                    <ext:RecordField Name="BESTAND_SUM" />
                </Fields>
            </ext:JsonReader>
        </Reader>
        <BaseParams>
            <ext:Parameter Name="warenkorbId" Value="#{BasketsOverviewGrid}.getSelectionModel().hasSelection() ? #{BasketsOverviewGrid}.getSelectionModel().getSelected().id : 1"
                Mode="Raw"   />
        </BaseParams>
        <Listeners>
            <LoadException Handler="Ext.MessageBox.alert('Load failed', response.statusText);" />
        </Listeners>
    </ext:Store>
    <ext:RowLayout ID="RowLayout1" runat="server" Split="true">
    <Rows>
        <ext:LayoutRow RowHeight="0.5">
            <ext:GridPanel ID="BasketsOverviewGrid" runat="server" Collapsible="false" Icon="Basket"
                Title="Warenkörbe (Bestellanforderungen)" StoreID="BasketsOverviewStore" MonitorResize="true"
                MonitorWindowResize="true" EnableColumnMove="false" StripeRows="true" Height="500" AutoExpandColumn="POSTEN">
                <ColumnModel runat="server">
                    <Columns>
                        <ext:Column ColumnID="WARENKORB_CODE" DataIndex="WARENKORB_CODE" Sortable="true" />
                        <ext:Column ColumnID="CREATE_DATE" DataIndex="CREATE_DATE">
                            <Renderer Fn="Ext.util.Format.dateRenderer('d.m.Y H:m')" />
                        </ext:Column>
                        <ext:Column ColumnID="WARENKORB_MATERIAL_PERSONAL_KST" Width="150" DataIndex="WARENKORB_MATERIAL_PERSONAL_KST" />
                        <ext:Column ColumnID="WARENKORB_MATERIAL_ABRECHNU_KST" Width="150" DataIndex="WARENKORB_MATERIAL_ABRECHNU_KST" />
                        <ext:Column ColumnID="STATUS" DataIndex="STATUS" />
                        <ext:Column ColumnID="POSTEN">
                            <Renderer Fn="renderPositions" />
                        </ext:Column>
                        <ext:Column ColumnID="WARENKORB_ID" Width="25" DataIndex="WARENKORB_ID" Sortable="false"
                            MenuDisabled="true">
                            <Renderer Fn="linkBaskets" />
                        </ext:Column>
                    </Columns>
                </ColumnModel>
                <SelectionModel>
                    <ext:RowSelectionModel ID="RowSelectionModel1" runat="server" SingleSelect="true">
                        <Listeners>
                            <RowSelect Handler="#{BasketMaterialOverviewGrid}.setTitle(record.data.WARENKORB_CODE+' '+record.data.USERNAME+' ('+record.data.WARENKORB_MATERIAL_PERSONAL_KST+')');#{BasketMaterialOverviewStore}.reload();"
                                Buffer="250" />
                        </Listeners>
                    </ext:RowSelectionModel>
                </SelectionModel>
                <BottomBar>
                    <ext:PagingToolbar ID="PagingToolbarBasketsOverviewGrid" runat="server" />
                </BottomBar>
            </ext:GridPanel>
    
    //..
    The problem is the following definition:
        <ext:Parameter Name="warenkorbId"  Value="#{BasketsOverviewGrid}.getSelectionModel().hasSelection() ?  #{BasketsOverviewGrid}.getSelectionModel().getSelected().id : 1"
                Mode="Raw"   />
    Any idea?

    At this point I cannot define a Delay of 10.

    And by the way... why did you remove the Delay of 10 as standard value?
    It woudl be nice if you could place informations like this in the changelog.




    Regards,

    Martin
    Last edited by Daniil; May 23, 2011 at 10:19 AM. Reason: Please use [CODE] tags
  4. #4
    Hi,

    Try this
    <ext:Parameter Name="warenkorbId" Value="(Ext.getCmp('#{BasketsOverviewGrid}') && #{BasketsOverviewGrid}.getSelectionModel(). hasSelection()) ? #{BasketsOverviewGrid}.getSelectionModel().getSelected().id : 1"
    Mode="Raw" />
  5. #5
    Yes this works fine. Thanks!

    For my solution its ok because the SelectionModel never has a selction at the first load of the page.

    But why did I had this problem after SVN Update?

    How can I avoid it and which changes caused my problems?
  6. #6
    Quote Originally Posted by macap View Post
    But why did I had this problem after SVN Update?

    How can I avoid it and which changes caused my problems?
    Removing Delay="10" for Store's Load causes this error also.
    <ext:Parameter Name="warenkorbId" Value="#{BasketsOverviewGrid}.getSelectionModel().hasSelection() ? #{BasketsOverviewGrid}.getSelectionModel().getSelected().id : 1"            Mode="Raw"   />
    The grid is not rendered yet when the first Store's Load occurs.

    Vladimir added check on undefined for the grid.

    why did you remove the Delay of 10 as standard value?
    It woudl be nice if you could place informations like this in the changelog.
    We have removed this Delay="10" to provide a developer with more flexibility and it caused bugs in some cases.

    And yes, it must be in changelog, I agree.
  7. #7
    Quote Originally Posted by Daniil View Post
    Vladimir added check on undefined for the grid.
    Sorry I do not understand this answer.

    Does Vladimir s check cause my problems or did Vladimir made some changes to avoid my problem?
    If yes... when is an SVN-Update available?


    Regard,

    Martin
  8. #8
    He added check just here:
    <ext:Parameter Name="warenkorbId" Value="(Ext.getCmp('#{BasketsOverviewGrid}')  && #{BasketsOverviewGrid}.getSelectionModel(). hasSelection()) ?  #{BasketsOverviewGrid}.getSelectionModel().getSelected().id : 1"
    Mode="Raw" />
    This is check on undefined/null:
    Ext.getCmp('#{BasketsOverviewGrid}')  &&
    I can't see anyway to solve it in SVN.
  9. #9
    Ahhh ok.
    So I have to change up to 10 UserControls now :-(

    But thanks for the answer!
  10. #10
    Apologize for the inconvenience.

Similar Threads

  1. [CLOSED] Hidden field affects layout, why?
    By CarpFisher in forum 2.x Legacy Premium Help
    Replies: 9
    Last Post: May 10, 2012, 2:25 PM
  2. [CLOSED] Problems after update from SVN
    By VALUELAB in forum 1.x Legacy Premium Help
    Replies: 8
    Last Post: May 05, 2011, 4:57 PM
  3. [CLOSED] Problems with BorderLayout and Hidden GridPanel
    By macap in forum 1.x Legacy Premium Help
    Replies: 4
    Last Post: Feb 04, 2010, 8:03 AM
  4. [CLOSED] Hidden field problem
    By tdracz in forum 1.x Legacy Premium Help
    Replies: 4
    Last Post: Dec 12, 2008, 1:39 PM
  5. [CLOSED] Hidden field question
    By Jurke in forum 1.x Legacy Premium Help
    Replies: 2
    Last Post: Dec 12, 2008, 9:18 AM

Posting Permissions