[CLOSED] Retrieve the formpanel ID rendered within a container window

  1. #1

    [CLOSED] Retrieve the formpanel ID rendered within a container window

    Hi,

    We implemented a formpanel programmatically which is loaded within a window. we want to retrieve the formpanel ID, after rendering, from the container window.
    The log displays "undefined"
    ASPX view code:

    <%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>
    
    <%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
    <!DOCTYPE html>
    <html>
    <head runat="server">
        <script type="text/javascript">
            var onDocumentReady = function () {
                console.log(Ext.getCmp('fp'));
            }
        </script>
    </head>
    <body>
        <ext:ResourceManager runat="server">
            <Listeners>
                <DocumentReady Handler="onDocumentReady();" />
            </Listeners>
        </ext:ResourceManager>
        <ext:Window runat="server" ID="_winUsrDetails" Icon="Group" Modal="true" Maximizable="true"
            Constrain="true" Layout="FitLayout" Height="500" Width="900">
            <Items>
                <ext:TabPanel runat="server" ID="_tabPnlWinUser" Border="false">
                    <Items>
                        <ext:Panel runat="server" ID="_pnlUsrDetails" Split="true" Border="false" Title="User Details">
                            <AutoLoad Url="/Research/LoadUserWindowDetails" NoCache="true">
                                <Params>
                                    <ext:Parameter Name="containerID" Value="#{_pnlUsrDetails}" Mode="Value" />
                                </Params>
                            </AutoLoad>
                        </ext:Panel>
                    </Items>
                </ext:TabPanel>
            </Items>
        </ext:Window>
    </body>
    </html>
    Controller Code:

     public FormPanel CreateFormPanel()
            {
                FormPanel formPanel = new FormPanel();
                formPanel.ID = "fp";
                formPanel.IDMode = IDMode.Static;
                TextField txtField = new TextField();
                txtField.FieldLabel = "Txt Label Field";
                formPanel.Items.Add(txtField);
                return formPanel;
            }
    
     public ContentResult LoadUserWindowDetails(String containerID)
            {
                ContentResult cr = new ContentResult();
                cr.Content = string.Format("<script>{0}</script>",
                    CreateFormPanel().ToScript(
                    RenderMode.AddTo,
                    containerID));
                return cr;
            }
    Thank you in advance.
    Last edited by Daniil; Apr 23, 2012 at 10:24 AM. Reason: [CLOSED]
  2. #2
    Hi,

    I think a FormPanel is not rendered yet on DocumentReady stage.

    You could attach an AfterRender listener for a FormPanel.
    formPanel.Listeners.AfterRender.Handler = "console.log(this.id);";
  3. #3
    Quote Originally Posted by Daniil View Post
    Hi,

    I think a FormPanel is not rendered yet on DocumentReady stage.

    You could attach an AfterRender listener for a FormPanel.
    formPanel.Listeners.AfterRender.Handler = "console.log(this.id);";
    Hi Daniil thanks for your response but your solution does not meet with my requirements, I implemented the code below to reproduce the issue, when I click on the gridpanel [row selected handler] I will display a window which takes a formpanel that should be loaded with gridpanel row values.
    I can't retrieve formPanel Id
    GridPanel code:
    <%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>
    
    <%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
    <!DOCTYPE html>
    <html>
    <head runat="server">
        <script src="../../Scripts/jquery-1.6.2.min.js" type="text/javascript"></script>
        <script type="text/javascript">
            var groupRenderer = function (value) {
                var r = _comboGroupStore.getById(value);
                if (Ext.isEmpty(r)) {
                    return "";
                }
                return r.data.GoupName;
            };
    
    
            var fillForm = function (record) {
                Ext.get("win_div").load(
                        {
                            url: "/Research/LoadWindow?containerID=_pnl",
                            text: "loading",
                            scripts: true
                        }
                    );
                Ext.getCmp('fp').getForm().loadRecord(record);
            };
        </script>
    </head>
    <body>
        <ext:ResourceManager runat="server">
        </ext:ResourceManager>
        <%-- <ext:Window runat="server" ID="_winUsrDetails" Icon="Group" Modal="true" Maximizable="true"
            Constrain="true" Layout="FitLayout" Height="500" Width="900">
            <Items>
                <ext:TabPanel runat="server" ID="_tabPnlWinUser" Border="false">
                    <Items>
                        <ext:Panel runat="server" ID="_pnlUsrDetails" Split="true" Border="false" Title="User Details">
                            <AutoLoad Url="/Research/LoadUserWindowDetails" NoCache="true">
                                <Params>
                                    <ext:Parameter Name="containerID" Value="#{_pnlUsrDetails}" Mode="Value" />
                                </Params>
                            </AutoLoad>
                        </ext:Panel>
                    </Items>
                </ext:TabPanel>
            </Items>
        </ext:Window>--%>
        <ext:Panel ID="_pnl" runat="server" Border="false" Header="false" Height="700" AutoWidth="true">
            <Items>
                <ext:GridPanel ID="GridPanelUsrGroup" runat="server" Header="false" Border="false"
                    AutoWidth="true" AutoHeight="true" StripeRows="true" IDMode="Static" Hidden="false">
                    <View>
                        <ext:GridView ID="GridViewUserGroup" runat="server" ForceFit="true" AutoFill="true" />
                    </View>
                    <Store>
                        <ext:Store ID="dsUsrGroup" runat="server" SkipIdForNewRecords="false">
                            <Proxy>
                                <ext:HttpProxy Url="/Research/GetUsersList" />
                            </Proxy>
                            <Reader>
                                <ext:JsonReader Root="data" TotalProperty="total">
                                    <Fields>
                                        <ext:RecordField Name="GroupId">
                                        </ext:RecordField>
                                        <ext:RecordField Name="UserId">
                                        </ext:RecordField>
                                        <ext:RecordField Name="UserName">
                                        </ext:RecordField>
                                    </Fields>
                                </ext:JsonReader>
                            </Reader>
                        </ext:Store>
                    </Store>
                    <ColumnModel ID="ColumnModelUsrGroup" runat="server">
                        <Columns>
                            <ext:Column ColumnID="_groupShortname" DataIndex="GroupId" Header="Group shortname">
                                <Renderer Fn="groupRenderer" />
                                <Editor>
                                    <ext:ComboBox ID="_comboGroupShortname" runat="server" AnchorHorizontal="25%" DisplayField="GoupName"
                                        ValueField="GroupId" ForceSelection="true" Shadow="Drop" Mode="Local" TriggerAction="All">
                                        <Store>
                                            <ext:Store ID="_comboGroupStore" runat="server">
                                                <Proxy>
                                                    <ext:HttpProxy Url="/Research/GetGroupsList">
                                                    </ext:HttpProxy>
                                                </Proxy>
                                                <Reader>
                                                    <ext:JsonReader IDProperty="GroupId" Root="data" TotalProperty="total">
                                                        <Fields>
                                                            <ext:RecordField Name="GroupId">
                                                            </ext:RecordField>
                                                            <ext:RecordField Name="GoupName">
                                                            </ext:RecordField>
                                                        </Fields>
                                                    </ext:JsonReader>
                                                </Reader>
                                                <Listeners>
                                                    <Load Handler="#{GridPanelUsrGroup}.getView().refresh();" />
                                                </Listeners>
                                            </ext:Store>
                                        </Store>
                                    </ext:ComboBox>
                                </Editor>
                            </ext:Column>
                            <ext:Column DataIndex="UserId" Header="Id">
                            </ext:Column>
                            <ext:Column DataIndex="UserName" Header="UserName">
                            </ext:Column>
                        </Columns>
                    </ColumnModel>
                    <SelectionModel>
                        <ext:RowSelectionModel ID="RowSelectionModelUserGrp" runat="server">
                            <Listeners>
                                <RowSelect Handler="fillForm(record);" />
                            </Listeners>
                        </ext:RowSelectionModel>
                    </SelectionModel>
                    <BottomBar>
                        <ext:PagingToolbar ID="PagingToolbarUserGrp" runat="server" PageSize="5" />
                    </BottomBar>
                    <LoadMask ShowMask="true" />
                </ext:GridPanel>
            </Items>
            <Content>
                <div id="win_div">
                </div>
            </Content>
        </ext:Panel>
    </body>
    </html>
    Controller code:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using Ext.Net.MVC;
    using System.Xml.Xsl;
    using System.Text;
    using System.Xml;
    using Ext.Net;
    using ViewEngine;
    using POCO;
    using Microsoft.Practices.Unity;
    using Services.ACPUserServices;
    using System.Collections.ObjectModel;
    using System.Data;
    
    
    namespace Presentation.Controllers
    {
        public class User
        {
            int userId;
    
            public int UserId
            {
                get { return userId; }
                set { userId = value; }
            }
            String userName;
    
            public String UserName
            {
                get { return userName; }
                set { userName = value; }
            }
            int groupId;
    
            public int GroupId
            {
                get { return groupId; }
                set { groupId = value; }
            }
        }
    
        public class Group
        {
            int groupId;
    
            public int GroupId
            {
                get { return groupId; }
                set { groupId = value; }
            }
            String goupName;
    
            public String GoupName
            {
                get { return goupName; }
                set { goupName = value; }
            }
        }
        public class ResearchController : Controller
        {
            public ActionResult UserGroupGrid()
            {
                return View();
            }
    
            public Window CreateUserWindowDetails()
            {
                Window window = new Window();
                window.ID = "_winUsrDetails";
                window.Icon = Icon.Group;
                window.Modal = true;
                window.AutoDoLayout = true;
                window.Maximizable = true;
                window.Constrain = true;
                window.Height = 500;
                window.Width = 900;
                window.Layout = "Fit";
                TabPanel tabPnl = new TabPanel();
                tabPnl.ID = "_tabPnlWinUser";
                tabPnl.Border = false;
                Panel pnl = new Panel();
                pnl.ID = "_pnlUsrDetails";
                pnl.Split = true;
                pnl.Border = true;
                pnl.Title = "User Details";
                pnl.AutoScroll = true;
                pnl.AutoLoad.Url = "/Research/LoadUserWindowDetails";
                pnl.AutoLoad.NoCache = true;
                Parameter containerParam = new Parameter("containerID", "_pnlUsrDetails", ParameterMode.Value);
                pnl.AutoLoad.Params.Add(containerParam);
                tabPnl.Items.Add(pnl);
                window.Items.Add(tabPnl);
                return window;
            }
    
            public FormPanel CreateFormPanel()
            {
                FormPanel formPanel = new FormPanel();
                formPanel.ID = "fp";
                formPanel.ClientIDMode = System.Web.UI.ClientIDMode.Static;
                TextField txtField = new TextField();
                txtField.FieldLabel = "Txt Label Field";
                formPanel.Items.Add(txtField);
                return formPanel;
            }
    
            public ContentResult LoadWindow(String containerID)
            {
                ContentResult cr = new ContentResult();
                cr.Content = string.Format("<script>{0}</script>",
                    CreateUserWindowDetails().ToScript(
                    RenderMode.AddTo,
                    containerID));
                return cr;
            }
    
            public ContentResult LoadUserWindowDetails(String containerID)
            {
                ContentResult cr = new ContentResult();
                cr.Content = string.Format("<script>{0}</script>",
                    CreateFormPanel().ToScript(
                    RenderMode.AddTo,
                    containerID));
                return cr;
            }
    
    
            public AjaxStoreResult GetUsersList()
            {
                List<User> users = new List<User>();
                User user = new User();
                user.UserId = 1;
                user.UserName = "User";
                user.GroupId = 2;
                users.Add(user);
                AjaxStoreResult result = new AjaxStoreResult();
                result.Data = users;
                result.Total = 1;
                return result;
            }
    
            public AjaxStoreResult GetGroupsList()
            {
                List<Group> groups = new List<Group>();
                Group group = new Group();
                group.GroupId = 1;
                group.GoupName = "Group";
                groups.Add(group);
                Group group2 = new Group();
                group2.GroupId = 2;
                group2.GoupName = "Group 2";
                groups.Add(group2);
                AjaxStoreResult result = new AjaxStoreResult();
                result.Data = groups;
                return result;
            }
        }
    }
  4. #4
    A FormPanel is not rendered yet just after the load method calling.

    You could set up a callback with some delay:
    Ext.get("win_div").load({
            url  : "/Test/LoadWindow?containerID=_pnl",
            text : "loading",
            scripts  : true,
            callback : function () {
                (function () {
                    Ext.getCmp('fp').getForm().loadRecord(record); 
                }).defer(1000);
            }
        }
    );
    But I would pass a Store id and a record id to a controller action to set up a respective AfterRender listener for a FormPanel.
  5. #5
    Quote Originally Posted by Daniil View Post
    A FormPanel is not rendered yet just after the load method calling.

    You could set up a callback with some delay:
    Ext.get("win_div").load({
            url  : "/Test/LoadWindow?containerID=_pnl",
            text : "loading",
            scripts  : true,
            callback : function () {
                (function () {
                    Ext.getCmp('fp').getForm().loadRecord(record); 
                }).defer(1000);
            }
        }
    );
    But I would pass a Store id and a record id to a controller action to set up a respective AfterRender listener for a FormPanel.
    It works thanks

Similar Threads

  1. Validation on FormPanel with a Container
    By lcestola in forum 1.x Help
    Replies: 4
    Last Post: Jun 26, 2012, 9:55 PM
  2. Doubt about formpanel with ext container
    By NishaLijo in forum 1.x Help
    Replies: 1
    Last Post: Feb 21, 2012, 7:59 AM
  3. Replies: 0
    Last Post: Nov 17, 2011, 10:53 AM
  4. [CLOSED] Open window in a parent container
    By edigital in forum 1.x Legacy Premium Help
    Replies: 2
    Last Post: Feb 18, 2011, 5:21 PM
  5. Replies: 5
    Last Post: May 13, 2010, 2:50 PM

Posting Permissions