[CLOSED] Export dynamically created Grid/Store

  1. #1

    [CLOSED] Export dynamically created Grid/Store

    Hi,

    I trying to export the data from an dynically created grid/store, but can't figure out how to ..

    This is my (example) code:

    <%@ Page Language="C#" %>
    <%@ Import Namespace="System.Xml" %>
    <%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="System.IO" %>
    <%@ Import Namespace="System.Linq" %>
    <%@ Import Namespace="System.Xml.Xsl" %>
    <%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
    <script runat="server">
        protected void Page_Load(object sender, EventArgs e)
        {
            CreateDataMenu();
        }
      
        private static Store BuildStore(DataTable dt)
        {
            Store store = new Store { ID = "Store1", AutoDestroy = true};
            JsonReader ar = new JsonReader();
            foreach (DataColumn column in dt.Columns)
            {
                ar.Fields.Add(new Ext.Net.RecordField(column.Caption, RecordFieldType.Auto));
            }
            store.Reader.Add(ar);
            store.DataSource = dt;
            store.DataBind();
            store.DirectEventConfig.IsUpload = true;
            return store;
        }
      
        private static GridPanel BuildGridPanel(DataTable dt, String cNaam)
        {
            GridPanel gp = new GridPanel { Border = false, StripeRows = true, TrackMouseOver = true, Title = cNaam, ID = "GridPanel1" };
            gp.Store.Add(BuildStore(dt));
            gp.SelectionModel.Add(new RowSelectionModel {SingleSelect = true});
            foreach (Column col in
               from DataColumn column in dt.Columns
                select new Column {Header = column.Caption, ColumnID = column.Caption, DataIndex = column.Caption})
            {
                gp.ColumnModel.Columns.Add(col);
            }
            return gp;
        }
        public void CreateDataMenu()
        {
            DataSet ds = new DataSet("root");
            ds.ReadXml(new XmlTextReader(new StringReader(getXml())));
            if (ds.Tables[0].Rows.Count > 0)
            {
                System.Data.DataView dv1 = new System.Data.DataView(ds.Tables["Rapport"]) { Sort = "naam asc" };
                // Loop through each row in the view.
                foreach (DataRowView rowView in dv1)
                {
                    String sId = Convert.ToString(rowView["queryid"]);
                    String sNaam = Convert.ToString(rowView["naam"]);
                    Ext.Net.MenuItem mi = new Ext.Net.MenuItem
                    {
                        ID = sId,
                        Text = sNaam,
                        Icon = Icon.ApplicationViewColumns
                    };
                    mi.DirectEvents.Click.ExtraParams.Add(
                    new Ext.Net.Parameter { Name = "queryId", Value = sId, Mode = ParameterMode.Raw });
                    mi.DirectEvents.Click.Event += Click_Event;
                    mi.DirectEvents.Click.Before = @"var grid = Ext.getCmp('GridPanel1'); 
                                     if (grid) { 
                                         grid.destroy(); 
                                     }";
                    Menu1.Items.Add(mi);
                }
            }
        }
       public void Click_Event(object sender, DirectEventArgs e)
        {
           int queryid = Convert.ToInt32(e.ExtraParams["queryId"]);
           DataSet ds = new DataSet("root");
           ds.ReadXml(new XmlTextReader(new StringReader(getXml())));
            if (ds.Tables[0].Rows.Count > 0)
            {
                DataRow[] drs = ds.Tables["Rapport"].Select(string.Format("queryid='{0}'", queryid));
                if (drs.GetLength(0) > 0)
                {
                    string cNaam = Convert.ToString(drs[0]["naam"]);
                    DataTable dt = queryid % 2 == 0 ? GetTable() : GetTable1();
                    BuildGridPanel(dt, cNaam).AddTo(Panel1);
                }
            }
        }
        static DataTable GetTable()
        {
            // Here we create a DataTable with four columns.
            DataTable table = new DataTable();
            table.Columns.Add("Weight", typeof(int));
            table.Columns.Add("Name", typeof(string));
            table.Columns.Add("Breed", typeof(string));
            table.Columns.Add("Date", typeof(DateTime));
            // Here we add five DataRows.
            table.Rows.Add(57, "Koko", "Shar Pei", DateTime.Now);
            table.Rows.Add(130, "Fido", "Bullmastiff", DateTime.Now);
            table.Rows.Add(92, "Alex", "Anatolian Shepherd Dog", DateTime.Now);
            table.Rows.Add(25, "Charles", "Cavalier King Charles Spaniel", DateTime.Now);
            table.Rows.Add(7, "Candy", "Yorkshire Terrier", DateTime.Now);
            return table;
        }
    
        static DataTable GetTable1()
        {
            // Here we create a DataTable with four columns.
            DataTable table = new DataTable();
            table.Columns.Add("Bla", typeof(int));
            table.Columns.Add("Ble", typeof(string));
            table.Columns.Add("Bli", typeof(string));
            table.Columns.Add("Blu", typeof(DateTime));
            // Here we add five DataRows.
            table.Rows.Add(57, "aa", "aaaa", DateTime.Now);
            table.Rows.Add(130, "bb", "bbbbb", DateTime.Now);
            table.Rows.Add(92, "cc", "ccccc", DateTime.Now);
            table.Rows.Add(25, "dd", "ddddd", DateTime.Now);
            table.Rows.Add(7, "ee", "eeee", DateTime.Now);
            return table;
        }
        
        
        static string getXml()
        {
            const string sFile = @"<?xml version=""1.0"" encoding=""utf-8""?>
                    <root>
                        <rapport>
                            <queryid>1</queryid>
                            <naam>Debiteuren</naam>
                            <query><![CDATA[SELECT Volgnummer, cNaamSamengesteld AS Naam, Adres, Huisnummer, Postcode, Plaats FROM Debiteur WHERE volgnummer in (0)]]></query>
                        </rapport>    
                        <rapport>
                            <queryid>2</queryid>
                            <naam>Gebruikers</naam>
                            <query><![CDATA[SELECT DISTINCT [User].cNaam AS Naam, [User].cEmail AS Email, [User].cAfdeling AS Afdeling FROM [User] INNER JOIN  DebiteurUser ON [User].Id = DebiteurUser.nUserId WHERE DebiteurUser.nDebiteurVolgNummer IN (0)]]></query>
                        </rapport>
                    </root>
                    ";
            return sFile;
        }
    
        protected void Store1_Submit(object sender, StoreSubmitDataEventArgs e)
        {
            string format = FormatType.Value.ToString();
            XmlNode xml = e.Xml;
            Response.Clear();
            switch (format)
            {
                case "xml":
                    string strXml = xml.OuterXml;
                    Response.AddHeader("Content-Disposition", "attachment; filename=submittedData.xml");
                    Response.AddHeader("Content-Length", strXml.Length.ToString());
                    Response.ContentType = "application/xml";
                    Response.Write(strXml);
                    break;
    
                case "xls":
                    Response.ContentType = "application/vnd.ms-excel";
                    Response.AddHeader("Content-Disposition", "attachment; filename=submittedData.xls");
                    XslCompiledTransform xtExcel = new XslCompiledTransform();
                    xtExcel.Load(Server.MapPath("~/Excel.xsl"));
                    xtExcel.Transform(xml, null, Response.OutputStream);
    
                    break;
    
                case "csv":
                    Response.ContentType = "application/octet-stream";
                    Response.AddHeader("Content-Disposition", "attachment; filename=submittedData.csv");
                    XslCompiledTransform xtCsv = new XslCompiledTransform();
                    xtCsv.Load(Server.MapPath("~/Csv.xsl"));
                    xtCsv.Transform(xml, null, Response.OutputStream);
    
                    break;
            }
            Response.End();
        }
    </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>Simple Array Grid - Ext.NET Examples</title>
        <link href="../style/examples.css" rel="stylesheet" type="text/css" />
        <script type="text/javascript">
            var submitValue = function (grid, hiddenFormat, format) {
                hiddenFormat.setValue(format);
                grid.submitData(false);
            };
        </script>
    </head>
    <body>
        <ext:ResourceManager ID="ResourceManager1" runat="server" />
        <ext:Hidden ID="FormatType" runat="server" />
        <ext:Panel
            ID="Panel1"
            runat="server"
            Title="Dataexport"
            Layout="fit"
            Height="350"
            Width="600">
            <TopBar>
                <ext:Toolbar ID="Toolbar1" runat="server">
                    <Items>
                        <ext:Button ID="tbContracten" runat="server" Text="Overzichten" Icon="ApplicationViewList">
                            <Menu>
                                <ext:Menu ID="Menu1" Visible="true" runat="server">
                                    <Items>
                                    </Items>
                                </ext:Menu>
                            </Menu>
                        </ext:Button>
                        <ext:ToolbarFill ID="ToolbarFill1" runat="server" />
                            <ext:Button ID="Button2" runat="server" Text="To XML" Icon="PageCode">
                                <Listeners>
                                    <Click Handler="submitValue(#{GridPanel1}, #{FormatType}, 'xml');" />
                                </Listeners>
                            </ext:Button>
                            
                            <ext:Button ID="Button3" runat="server" Text="To Excel" Icon="PageExcel">
                                <Listeners>
                                    <Click Handler="submitValue(#{GridPanel1}, #{FormatType}, 'xls');" />
                                </Listeners>
                            </ext:Button>
                            
                            <ext:Button ID="Button4" runat="server" Text="To CSV" Icon="PageAttach">
                                <Listeners>
                                    <Click Handler="submitValue(#{GridPanel1}, #{FormatType}, 'csv');" />
                                </Listeners>
                            </ext:Button>
                    </Items>
                </ext:Toolbar>
            </TopBar>
        </ext:Panel>
    </body>
    </html>
    Probably need to expand the store with (for example) "OnSubmitData="Store1_Submit"", but trying to figure out how..

    Can you help me achieve my goal ?

    Martin
    Last edited by Daniil; May 06, 2011 at 3:23 PM. Reason: [CLOSED]
  2. #2
    Hi,

    Well, server side handler, I mean Store_Submit, is not appropriate in your case without general refactoring your code. Server side handler of DirectEvent requires a control instance - in your case it's a grid. But you render it dynamically and doesn't recreate during each request to server (in this case - DirectEvent).

    You can use the grid's .getRowsValues() method to achieve your requirement. See the example:
    https://examples1.ext.net/#/GridPane...mit_Two_Grids/

Similar Threads

  1. Replies: 14
    Last Post: Nov 16, 2012, 10:01 AM
  2. [CLOSED] Reload store created dynamically
    By stoque in forum 1.x Legacy Premium Help
    Replies: 5
    Last Post: Aug 18, 2011, 5:07 PM
  3. [CLOSED] MVC Grid/Store Export to .xls/.csv/.xml
    By softmachine2011 in forum 1.x Legacy Premium Help
    Replies: 9
    Last Post: Jun 17, 2011, 1:16 PM
  4. Replies: 2
    Last Post: Jan 03, 2011, 5:34 PM
  5. Replies: 1
    Last Post: Apr 19, 2010, 2:44 PM

Posting Permissions