[CLOSED] Dynamic loaded user control height problem

Page 1 of 2 12 LastLast
  1. #1

    [CLOSED] Dynamic loaded user control height problem

    The issue is when I load user control on runtime user control won't Stretch in height is any workaround to solved this issue?

    Screenshots
    Click image for larger version. 

Name:	Untitled.png 
Views:	148 
Size:	22.0 KB 
ID:	2918

    this is aspx page code
    
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Default" %>
    <%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
     <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Test</title>
         <script type="text/javascript">
             var destroyFromCache = function (container) {
                 container.controlsCache = container.controlsCache || [];
                 Ext.each(container.controlsCache, function (controlId) {
                     var control = Ext.getCmp(controlId);
                     if (control && control.destroy) {
                         control.destroy();
                     }
                 });
             };
    
             var putToCache = function (container, controls) {
                 container.controlsCache = controls;
             };
    
             var filterTree = function (title, text) {
                 pnlMenuContent.setTitle(title);
                 var tree = menuItems;
    
                 tree.clearFilter();
    
                 if (Ext.isEmpty(text, false)) {
                     return;
                 }
    
                 var re = new RegExp(".*" + text + ".*", "i");
    
                 tree.filterBy(function (node) {
                     return re.test(node.id);
                 });
             };
    
             var clearFilter = function () {
                 var tree = menuItems;
    
    
                 tree.clearFilter();
                 tree.getRootNode().collapseChildNodes(true);
                 tree.getRootNode().ensureVisible();
             };
       </script>
    </head>
    <body>
        <form id="form1" runat="server">
        <ext:ResourceManager runat="server" id="ResourceManager 1" />
        <ext:Viewport ID="ViewPort1" runat="server">
            <Items>
                <ext:BorderLayout ID="BorderLayout1" runat="server">
                    <West Collapsible="true" MinWidth="220"  Split="true">
                        <ext:Panel ID="pnlMenuContent" runat="server" Width="220" Layout="VBoxLayout" Border="false"
                            Header="true" ClientIDMode="Static" Title="Workplace">
                            <LayoutConfig>
                                <ext:VBoxLayoutConfig Align="Stretch" />
                            </LayoutConfig>
                            <Items>
                                <ext:TreePanel ID="menuItems" runat="server" Width="220" AutoHeight="true" Border="false"
                                    ClientIDMode="Static" Header="false" AutoScroll="true" RootVisible="false" UseArrows="true"
                                    Flex="1">
                                    <Root>
                                        <ext:TreeNode Text="Tools" Expanded="true">
                                            <Nodes>
                                                <ext:TreeNode Text="Load Empty" NodeID="empty" />
                                                <ext:TreeNode Text="Load Grid" NodeID="grid" />
                                            </Nodes>
                                        </ext:TreeNode>
                                    </Root>
                                    <DirectEvents>
                                        <Click OnEvent="onMenuClick" DisableCaching="false">
                                            <ExtraParams>
                                                <ext:Parameter Name="cmd" Value="node.text" Mode="Raw" />
                                                <ext:Parameter Name="cmd_id" Value="node.id" Mode="Raw" />
                                            </ExtraParams>
                                        </Click>
                                    </DirectEvents>
                                </ext:TreePanel>
                            </Items>
                        </ext:Panel>
                    </West>
                    <Center>
                        <ext:Panel ID="MainPanel" runat="server" Title="Control"  Layout="FitLayout" >
                            
                        </ext:Panel>
                    </Center>
                </ext:BorderLayout>
            </Items>
        </ext:Viewport>
        </form>
    </body>
    </html>
    and aspx.cs

    using System;
    using System.Collections.Generic;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using Ext.Net;
    
    public partial class application_Default2 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
    
        }
    
        protected void onMenuClick(object sender, DirectEventArgs e)
        {
            string strControlPath = "controls/empty.ascx";
            string strControlID = e.ExtraParams["cmd_id"];
            switch (e.ExtraParams["cmd_id"])
            {
                case "grid":
                    strControlPath = "controls/sales-leads.ascx";
                    break;
                case "empty":
                    strControlPath = "controls/empty.ascx";
                    break;
            }
    
    
            /* Loading User Control */
            X.Js.Call("destroyFromCache", new JRawValue(MainPanel.ClientID));
            BaseUserControl uc1 = (BaseUserControl)this.LoadControl(strControlPath);
            uc1.ID = String.Format("UC{0}", strControlID);
            this.MainPanel.ContentControls.Add(uc1);
    
            X.Js.Call("putToCache", new JRawValue(MainPanel.ClientID), uc1.ControlsToDestroy);
            this.MainPanel.UpdateContent();
         
        }
    }
    and sales-leads.ascx control
    <%@ Control Language="C#" AutoEventWireup="true" CodeFile="sales-leads.ascx.cs" Inherits="application_controls_sales_leads" %>
    <%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
      <ext:GridPanel MonitorResize="true"
                ID="GridPanel1"
                runat="server"
                StripeRows="true"
                Border="true"
                AutoExpandColumn="EventString">
                <TopBar>
                    <ext:Toolbar ID="Toolbar1" runat="server">
                        <Items>
                            <ext:DateField ID="DateField1" runat="server" />
                            <ext:DateField ID="DateField2" runat="server" />
                            <ext:Button ID="Button1" runat="server" />
                        </Items>
                    </ext:Toolbar>
                </TopBar>
                <Store>
                    <ext:Store ID="Store1" runat="server">
                        <Reader>
                            <ext:ArrayReader>
                                <Fields>
                                    <ext:RecordField Name="EventLogId" />
                                    <ext:RecordField Name="Timestamp" Type="Date" />
                                    <ext:RecordField Name="TriggerId" />
                                    <ext:RecordField Name="TriggerName" />
                                    <ext:RecordField Name="EventType" />
                                    <ext:RecordField Name="EventString" />
                                </Fields>
                            </ext:ArrayReader>
                        </Reader>
                    </ext:Store>
                </Store>
                <ColumnModel ID="ColumnModel1" runat="server">
                    <Columns> 
                        <ext:Column DataIndex="EventLogId" Header="ID" Width="50" Hidden="true" /> 
                        <ext:DateColumn DataIndex="Timestamp" Header="Tid" Format="yyyy-MM-dd HH:mm" Width="100" />
                        <ext:Column DataIndex="TriggerName" Header="Aktör" />
                        <ext:Column DataIndex="EventType" Header="Typ" />
                        <ext:Column DataIndex="EventString" Header="Info" />
                    </Columns>
                </ColumnModel>
            </ext:GridPanel>
    .CS
    using System;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    public partial class application_controls_sales_leads : BaseUserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
    
        }
    }
    empty.ascx user control
    <%@ Control Language="C#" AutoEventWireup="true" CodeFile="empty.ascx.cs" Inherits="controls_empty" %>
    Empty Control

    and BaseUserControl

    using System.Collections.Generic;
    using System.Web.UI;
    
    public class BaseUserControl : UserControl
    {
        public virtual List<string> ControlsToDestroy
        {
            get
            {
                // we should return none lazy controls only because lazy controls will be autodestroyed by parent container
                return new List<string>();
            }
        }
    }
    Last edited by Daniil; Jun 27, 2011 at 9:33 AM. Reason: [CLOSED]
  2. #2
    Hi,

    Please wrap the GridPanel in <ext:FitLayout>.
  3. #3
    Quote Originally Posted by Daniil View Post
    Hi,

    Please wrap the GridPanel in <ext:FitLayout>.
    Hi, I tried with wrap the GridPanel in FitLayout and also tried with <ext:ContainerLayout>,<ext:BorderLayout>\<center > before posting for help here
    nothing work for me.

    I tried again with FitLayout still not working.
  4. #4
    Hi,

    How did you wrap GridPanel? It should be like this
    <%@ Control Language="C#" AutoEventWireup="true" CodeFile="sales-leads.ascx.cs" Inherits="application_controls_sales_leads" %>
    <%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
      <ext:FitLayout ...>
       <Items>
       <ext:GridPanel
         ....
      </ext:GridPanel>
      </Items>
      </ext:FitLayout>
  5. #5
    Yes I did the same
    <ext:FitLayout>
        <Items>
            <ext:GridPanel runat="server" ID="MainGrid" Border="false" StoreID="MainStore" StripeRows="true"
                Title="Enquiries" TrackMouseOver="true" AutoExpandColumn="Requirements">
                
                <ColumnModel>
                    <Columns>
                        <ext:RowNumbererColumn />
                        <ext:Column DataIndex="HOCODE" ColumnID="HOCODE" Header="HOCODE" Hidden="true" />
                        <ext:Column DataIndex="Prospect" ColumnID="Prospect" Header="Prospect" Resizable="false"
                            MenuDisabled="true" Sortable="true" Width="120" />
                        <ext:Column DataIndex="Contact" ColumnID="Contact" Header="Contact" Resizable="false"
                            MenuDisabled="true" Sortable="true" Width="120" />
                        <ext:Column DataIndex="Phone" ColumnID="Phone" Header="Phone" Resizable="false" MenuDisabled="true"
                            Sortable="false" Width="60" />
                        <ext:Column DataIndex="Date" ColumnID="Date" Header="Date" MenuDisabled="true" Sortable="false"
                            Width="60">
                            <Renderer Fn="Ext.util.Format.dateRenderer('d/m/Y')" />
                        </ext:Column>
                        <ext:Column DataIndex="OurRep" ColumnID="OurRep" Header="Our Rep" Resizable="false"
                            MenuDisabled="true" Sortable="true" Width="120" />
                        <ext:NumberColumn DataIndex="EnquiryValue" ColumnID="EnquiryValue" Header="Enquiry Value ($)"
                            Align="Right" Editable="false" MenuDisabled="true" Sortable="false" Resizable="false"
                            Width="100" />
                        <ext:RatingColumn Header="Rating" DataIndex="Rating" RoundToTick="false" Editable="true"
                            Width="100" />
                        <ext:Column DataIndex="Requirements" ColumnID="Requirements" Header="Requirements"
                            Resizable="false" MenuDisabled="true" Sortable="true" Width="160" />
                    </Columns>
                </ColumnModel>
                 <BottomBar>
                    <ext:PagingToolbar ID="MainPageingBar" runat="server" PageSize="100" StoreID="MainStore">
                    </ext:PagingToolbar>
                </BottomBar>
                <DirectEvents>
                    <Command OnEvent="recordEdit" />
                    <RowDblClick OnEvent="recordEdit" />
                </DirectEvents>
                <Listeners>
                    <RowContextMenu Handler="e.preventDefault(); #{RowContextMenu}.showAt(e.getXY());" />
                </Listeners>
            </ext:GridPanel>
        </Items>
    </ext:FitLayout>
  6. #6
    Also, UpdateContent is not option in your case. You have to Rerender MainPanel.
    The problem that border layout region cannot be rerendered therefore need to addit additional container

    <Center>        
    	<ext:Panel ID="MainPanel" runat="server" Title="Control"  Layout="FitLayout" >
    		 <Items>
                            <ext:Container ID="CenterContainer" runat="server"/>
                     </Items>
    	</ext:Panel>
    </Center>
    
    CenterContainer.ContentControls.Add(uc1);
    CenterContainer.Render();
  7. #7
    Quote Originally Posted by Vladimir View Post
    Also, UpdateContent is not option in your case. You have to Rerender MainPanel.
    The problem that border layout region cannot be rerendered therefore need to addit additional container

    <Center>        
    	<ext:Panel ID="MainPanel" runat="server" Title="Control"  Layout="FitLayout" >
    		 <Items>
                            <ext:Container ID="CenterContainer" runat="server"/>
                     </Items>
    	</ext:Panel>
    </Center>
    
    CenterContainer.ContentControls.Add(uc1);
    CenterContainer.Render();
    Well it works perfectly if I keep store inside GridPanel.

    Can I still access store as...

    this.getSelected().id
    record.data.FieldName
    <ext:FitLayout runat="server">
        <Items>
            <ext:GridPanel runat="server" ID="MainGrid">
               <Store>
                    <ext:Store ID="MainStore" runat="server" >
                       ....
                    </ext:Store>
                </Store>
    
            </ext:GridPanel>
        </Items>
    </ext:FitLayout>
  8. #8
    Hi,

    Sorry but I did not understand the question about the store. Can you provide more details?
  9. #9
    Quote Originally Posted by Vladimir View Post
    Hi,

    Sorry but I did not understand the question about the store. Can you provide more details?
    Sorry I couldn't explained in details

    Your solution works only if I move my store inside grid panel

    Example 1: works
    <ext:FitLayout runat="server">
        <Items>
            <ext:GridPanel runat="server" ID="MainGrid">
               <Store>
                    <ext:Store ID="MainStore" runat="server" >
                       ....
                    </ext:Store>
                </Store>
     
            </ext:GridPanel>
        </Items>
    </ext:FitLayout>

    I won't work in this case
    Example 2 : Not working: "MainStore is not defined" (firebug).
      <ext:Store ID="MainStore" runat="server" >
                       ....
       </ext:Store>
    
    <ext:FitLayout runat="server">
        <Items>
            <ext:GridPanel runat="server" ID="MainGrid" StoreId="MainStore">
             ......
     
            </ext:GridPanel>
        </Items>
    </ext:FitLayout>

    And also I check it work fine if I have more then 1 store i.e.
    Example 3 : Work fine
        <ext:Store ID="SecondStore" runat="server" >
           ....
       </ext:Store>
    
    <ext:Store ID="AnotherStore" runat="server" >
         ....
      </ext:Store>
    
    <ext:FitLayout runat="server">
        <Items>
            <ext:GridPanel runat="server" ID="MainGrid">
               <Store>
                    <ext:Store ID="MainStore" runat="server" >
                       ....
                    </ext:Store>
                </Store>
     
            </ext:GridPanel>
        </Items>
    </ext:FitLayout>

    Just a question why Example1 and Example3 works fine but Example2 didn't work ?

    you can mark as solved
    thanks
  10. #10
    Hi,

    Because GridPanel is rendered before store in your case.
    Is it a problem for you to move the store inside the grid? Does it break any functionality in your application?
    Placing a store inside a grid is optimal solution. Please note that store is still accessable in code behind and javascript (by store id or through the grid)
Page 1 of 2 12 LastLast

Similar Threads

  1. Replies: 2
    Last Post: Feb 06, 2012, 9:06 AM
  2. [CLOSED] Problem on dynamic load user control
    By andreasperanza in forum 1.x Legacy Premium Help
    Replies: 13
    Last Post: Dec 22, 2011, 4:23 PM
  3. Replies: 2
    Last Post: Dec 08, 2011, 1:00 PM
  4. [CLOSED] [1.0] User Control loaded several times
    By FVNoel in forum 1.x Legacy Premium Help
    Replies: 4
    Last Post: Jul 07, 2011, 10:33 AM
  5. Replies: 32
    Last Post: Jan 11, 2011, 9:53 AM

Tags for this Thread

Posting Permissions