[CLOSED] RowExpander: GridPanel button doesn't show

  1. #1

    [CLOSED] RowExpander: GridPanel button doesn't show

    Hi,
    I'm using a RowExpander and creating a GridPanel dynamically in the code-behind.
    I'm adding a button to the this generated grid. The issue is that this button is not shown.

    <%@ Page Language="C#" %>
    <%@ Import Namespace="System.Collections.Generic"%>
    <%@ Import Namespace="ListView=Ext.Net.ListView"%>
    
    <%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
    
    <script runat="server">
        protected void Page_Load(object sender, EventArgs e)
        {
            if (X.IsAjaxRequest)
            {
                //We do not need to DataBind on an DirectEvent
                return;
            }
            
            List<object> data = new List<object>();
            
            for (int i = 1; i <= 5; i++)
            {
                data.Add(new { ID = "S" + i, Name = "Supplier " + i});
            }
            
            this.Store1.DataSource = data;
            this.Store1.DataBind();
        }
        
        private void RemoveFromCache(string id)
        {
            X.Js.Call("removeFromCache", id);
        }
    
        private void AddToCache(string id)
        {
            X.Js.Call("addToCache", id);
        }
    
        protected void BeforeExpand(object sender, DirectEventArgs e)
        {
            string id = e.ExtraParams["id"];
            RenderGridPanel(id);
        }
    
        [DirectMethod]
        public void RenderGridPanel(string id)
        {
            string divId = "row-" + id;
            
            Store store = new Store { ID = "StoreRow_" + id };
    
            JsonReader reader = new JsonReader();
            reader.IDProperty = "ID";
            reader.Fields.Add("ID", "Name");
            store.Reader.Add(reader);
    
            HttpProxy proxy = new HttpProxy
            {
                Url = "Test.ashx",
                Method = HttpMethod.GET,
            };
            store.Proxy.Add(proxy);
            store.AutoLoadParams.Add(new Ext.Net.Parameter { Name = "id", Value = id });
    
            RemoveFromCache(store.ID);
            store.Render();
            AddToCache(store.ID);
    
            GridPanel grid = new GridPanel
            {
                ID = "GridPanelRow_" + id,
                StoreID = store.ID,
                Height = 200
            };
    
            grid.ColumnModel.Columns.Add(new Column
            {
                Header = "Products's Name",
                DataIndex = "Name"
            });
            grid.ColumnModel.ID = "GridPanelRowCM_" + id;
    
            grid.View.Add(new Ext.Net.GridView { ID = "GridPanelRowView_" + id, ForceFit = true });
            
            ResourceManager1.RegisterIcon(Icon.Disk);
            Ext.Net.Button saveButton = new Ext.Net.Button { Text = "Save", Icon = Icon.Disk };
            grid.Buttons.Add(saveButton);
            
            //important
            X.Get(divId).SwallowEvent(new string[] { "click", "dblclick", "mousedown", "mouseup" }, true);
    
            RemoveFromCache(grid.ID);
            grid.Render(divId, RenderMode.RenderTo);
            AddToCache(grid.ID);
        }
        
    </script>
    
    <!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 id="Head1" runat="server">
        <title>RowExpander with GridPanel - Ext.NET Examples</title>
        <link href="../../../../resources/css/examples.css" rel="stylesheet" type="text/css" />
        
        <ext:ResourcePlaceHolder ID="ResourcePlaceHolder1" runat="server" Mode="Script" />
        
        <script type="text/javascript">
            window.cache = [];
    
            var cleanCache = function () {
                if (window.cache.length == 0) {
                    return;
                }
    
                RowExpander1.collapseAll();
    
                Ext.each(window.cache, function (control) {
                    if (control) {
                        control.destroy();
                    }
                });
    
                window.cache = [];
            };
    
            var removeFromCache = function (controlId) {
                var control = window[controlId];
                window.cache.remove(control);
    
                if (control) {
                    control.destroy();
                }
            };
    
            var addToCache = function (controlId) {
                window.cache.push(window[controlId]);
            };
    
    
            var beforeExpand = function (item, record, body, rowIndex) {
                if (body.rendered) {
                    return;
                }
    
                Ext.net.DirectMethods.RenderGridPanel(record.get("ID"), {
                    success: function () {
                        body.rendered = true;
                    },
                    eventMask: {
                        showMask: true,
                        msg: "Loading ...",
                        target: "customTarget",
                        customTarget: item.grid.body
                    }
                });
            }
        </script>
    </head>
    <body>
        <form id="Form1" runat="server">
            <ext:ResourceManager ID="ResourceManager1" runat="server" />
            
            <ext:Store ID="Store1" runat="server">
                <Reader>
                    <ext:JsonReader IDProperty="ID">
                        <Fields>
                            <ext:RecordField Name="ID" />
                            <ext:RecordField Name="Name" />
                        </Fields>
                    </ext:JsonReader>
                </Reader>
            </ext:Store>
            
            <ext:GridPanel 
                ID="GridPanel1" 
                runat="server" 
                StoreID="Store1" 
                TrackMouseOver="false"
                Title="Expander Rows with ListView" 
                Collapsible="true"
                AnimCollapse="true" 
                Icon="Table" 
                Width="600" 
                Height="400">
                <ColumnModel ID="ColumnModel1" runat="server">
                    <Columns>
                        <ext:Column Header="Supplier" DataIndex="Name" />
                    </Columns>
                </ColumnModel>
                <View>
                    <ext:GridView ID="GridView1" runat="server" ForceFit="true">
                        <Listeners>
                            <BeforeRefresh Fn="cleanCache" />
                        </Listeners>
                    </ext:GridView>
                </View>
                <SelectionModel>
                    <ext:RowSelectionModel ID="RowSelectionModel1" runat="server" />
                </SelectionModel>
                <Plugins>
                    <ext:RowExpander ID="RowExpander1" runat="server" EnableCaching="true">
                        <Template ID="Template1" runat="server">
                            <Html>
    							<div id="row-{ID}" style="background-color:White;"></div>
    						</Html>
                        </Template>
                        <Listeners>
                            <BeforeExpand Fn="beforeExpand" />
                        </Listeners>
                    </ext:RowExpander>
                </Plugins>
            </ext:GridPanel>
    
    
        </form>
    </body>
    </html>
  2. #2
    Hi,

    Confirm, there is some issue when Right ButtonAlign is used by default.

    Please use Left or Center.

    Example

    GridPanel grid = new GridPanel
    {
        ID = "GridPanelRow_" + id,
        StoreID = store.ID,
        Height = 200,
        ButtonAlign = Alignment.Left //or Alignment.Center
    };
  3. #3
    Ok. Thanks.
  4. #4
    Hi,

    The following css rule fixes the issue
    .x-grid3 .x-panel-fbar TABLE
            {
              table-layout:auto;
            }

Similar Threads

  1. Replies: 15
    Last Post: Sep 19, 2017, 6:15 PM
  2. [CLOSED] RowExpander show mask on expand event to load data
    By bakardi in forum 1.x Legacy Premium Help
    Replies: 1
    Last Post: Apr 02, 2012, 3:02 PM
  3. EventMask doesn't show
    By vadym.f in forum 1.x Help
    Replies: 3
    Last Post: Jan 19, 2012, 5:19 PM
  4. [CLOSED] gridpanel show/ hide header based on toolbar button
    By yobnet in forum 1.x Legacy Premium Help
    Replies: 5
    Last Post: Sep 08, 2010, 12:41 PM
  5. Replies: 1
    Last Post: Nov 25, 2009, 9:09 AM

Posting Permissions