[CLOSED] Export Data To Excel in Remote Paging GridPanel

  1. #1

    [CLOSED] Export Data To Excel in Remote Paging GridPanel

    Hi,

    I Wish to Export Data to Excel in Remote Paging and Sort GridPanel.

    I try to use this sample:

    https://examples1.ext.net/#/GridPane...Data_PostBack/

    But it does not work because of the Remote Paging and Sort:

    Data Source:

      <ext:Store ID="StorePesquisaLinhaCredito" runat="server" OnRefreshData="StorePesquisaLinhaCredito_Refresh"
            RemoteSort="true">
            <Proxy>
                <ext:PageProxy />
            </Proxy>
            <Reader>
                <ext:JsonReader IDProperty="Numero">
                    <Fields>
                        <ext:RecordField Name="Numero" />
                        <ext:RecordField Name="Sigla" />
                        <ext:RecordField Name="Descricao" />
                        <ext:RecordField Name="OrigemRecurso" ServerMapping="OrigemRecurso.DescricaoCompleta" />
                        <ext:RecordField Name="GestaoCredito" ServerMapping="GestaoCredito.DescricaoCompleta" />
                    </Fields>
                </ext:JsonReader>
            </Reader>
            <AutoLoadParams>
                <ext:Parameter Name="start" Value="0" Mode="Raw" />
                <ext:Parameter Name="limit" Value="10" Mode="Raw" />
            </AutoLoadParams>
        </ext:Store>
    GridPanel:

    <ext:GridPanel ID="grdPesquisaLinhaCredito" runat="server" StoreID="StorePesquisaLinhaCredito"
                                                            AutoExpandColumn="Descricao" StripeRows="true">
                                                            <TopBar>
                                                                <pd:BarraComandos runat="server" ID="barraGrid" Height="25" />
                                                            </TopBar>
                                                            <ColumnModel runat="server">
                                                                <Columns>
                                                                    <ext:Column ColumnID="Numero" Header="Número" Width="100" Sortable="true" DataIndex="Numero" />
                                                                    <ext:Column ColumnID="Sigla" Header="Sigla" Width="100" Sortable="true" DataIndex="Sigla" />
                                                                    <ext:Column ColumnID="Descricao" Header="Descrição" Width="300" Sortable="true" DataIndex="Descricao" />
                                                                    <ext:Column ColumnID="GestaoCredito" Header="Gestão de Crédito" Width="200" Sortable="true"
                                                                        DataIndex="GestaoCredito" />
                                                                    <ext:Column ColumnID="OrigemRecurso" Header="Origem do Recurso" Width="250" Sortable="true"
                                                                        DataIndex="OrigemRecurso" />
                                                                </Columns>
                                                            </ColumnModel>
                                                            <SelectionModel>
                                                                <ext:RowSelectionModel runat="server" SingleSelect="true" ID="rsGrdPesquisaLinhaCredito">
                                                                    <DirectEvents>
                                                                        <RowSelect OnEvent="grdPesquisaLinhaCredito_Select">
                                                                            <EventMask ShowMask="true" Target="CustomTarget" CustomTarget="#{grdPesquisaLinhaCredito}" />
                                                                        </RowSelect>
                                                                    </DirectEvents>
                                                                </ext:RowSelectionModel>
                                                            </SelectionModel>
                                                            <LoadMask ShowMask="true" />
                                                            <BottomBar>
                                                                <ext:PagingToolbar ID="pgnGrdPesquisaLinhaCredito" runat="server" PageSize="10"
                                                                    StoreID="StorePesquisaLinhaCredito" />
                                                            </BottomBar>
                                                        </ext:GridPanel>
    Store Refresh Event Handler:

      protected void StorePesquisaLinhaCredito_Refresh(object sender, StoreRefreshDataEventArgs e)
            {
                StorePesquisaLinhaCredito.DataSource = ObterLinhasCredito(e);
            }
    
    
     protected IList<LinhaCredito> ObterLinhasCredito(StoreRefreshDataEventArgs storeArgs = null)
            {
                int pageIndex = pgnGrdPesquisaLinhaCredito.PageIndex;
                PD.Library.Messages.Paging paginacao;
                int DefaultPageSize;
                if (storeArgs != null)
                    paginacao = new Paging()
                    {
                        InitialIndex = storeArgs.Start,
                        OrderByField = storeArgs.Sort == "OrigemRecurso" ? "OrigemRecurso.Codigo" : storeArgs.Sort == "GestaoCredito" ? "GestaoCredito.Codigo" : storeArgs.Sort,
                        PageSize = storeArgs.Limit,
                        DirectionOrder = storeArgs.Dir == Ext.Net.SortDirection.DESC ? Paging.Direction.DESC : Paging.Direction.ASC
                    };
                else
                    paginacao = new Paging()
                    {
                        InitialIndex = 0,
                        PageSize = int.TryParse(PD.Library.Configuration.Manager.GetAppKey("Application.DefaultPageSize"), out DefaultPageSize) ? DefaultPageSize : 10
                    };
    
                //if (string.IsNullOrEmpty(paginacao.OrderByField))
                //    paginacao.OrderByField = "Numero";
    
                decimal? numero = null;
                string codigoOrigem = null;
                string codigoGestaoCredito = null;
    
                if (!string.IsNullOrEmpty(txtFiltroNumero.Text.Trim()))
                    numero = Convert.ToDecimal(txtFiltroNumero.Value);
    
                if (!string.IsNullOrEmpty(cmbFiltroOrigemRecurso.SelectedItem.Value))
                    codigoOrigem = cmbFiltroOrigemRecurso.SelectedItem.Value;
    
    
                if (!string.IsNullOrEmpty(cmbFiltroGestaoCredito.SelectedItem.Value))
                    codigoGestaoCredito = cmbFiltroGestaoCredito.SelectedItem.Value;
    
                MessageCollection<LinhaCredito> msg = Fachada.Repositorio.LinhaCredito.ObterLinhasCreditoPorFiltro(numero, txtFiltroSigla.Text.Trim().ToUpper(),
                    txtFiltroDescricao.Text.Trim().ToUpper(), codigoOrigem, codigoGestaoCredito, paginacao);
    
                if (msg.Result != Message.ResultType.Success)
                    throw msg.Exception;
    
                (this.StorePesquisaLinhaCredito.Proxy[0] as PageProxy).Total = paginacao.ResultCount;
    
                if (paginacao.PageCount == 0) paginacao.PageCount = 1;
    
                if (pageIndex > paginacao.PageCount)
                    pgnGrdPesquisaLinhaCredito.PageIndex = paginacao.PageCount;
    
                return msg.Instances;
            }
    Export Button Click Event Handler:

    protected void ToExcel(object sender, EventArgs e)
        {
            string json = GridData.Value.ToString();
            StoreSubmitDataEventArgs eSubmit = new StoreSubmitDataEventArgs(json, null);
            XmlNode xml = eSubmit.Xml;
    
            this.Response.Clear();
            this.Response.ContentType = "application/vnd.ms-excel";
            this.Response.AddHeader("Content-Disposition", "attachment; filename=submittedData.xls");
            XslCompiledTransform xtExcel = new XslCompiledTransform();
            xtExcel.Load(Server.MapPath("Excel.xsl"));
            xtExcel.Transform(xml, null, this.Response.OutputStream);
            this.Response.End();
        }
    It Works, but only for the first page because i am using remote paging and sort.

    How to solve this problem?
    Last edited by Daniil; Oct 13, 2010 at 12:12 PM. Reason: [CLOSED]
  2. #2
    Hi pdcase,

    In case with remote paging it needs to manually populate this
    string json = GridData.Value.ToString();
    on server side from a date source with correct JSON format - array of objects [{...}, {...}, ...]

    The server side JSON.Serialize() method would help you.
  3. #3

    Can you post a simple example?

    Can you post a simple example?

    Thanks
  4. #4
    Sure, here you are.

    Example
    <%@ Page Language="C#" %>
    
    <%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
    <%@ Import Namespace="System.Collections.Generic" %>
    <%@ Import Namespace="System.Xml" %>
    <%@ Import Namespace="System.Xml.Xsl" %>
    
    <script runat="server">
        public object[] MyData = new object[] { 
                                         new object[] { "test0" },
                                         new object[] { "test1" },
                                         new object[] { "test2" },
                                         new object[] { "test3" },
                                         new object[] { "test4" },
                                         new object[] { "test5" },
                                         new object[] { "test6" },
                                         new object[] { "test7" },
                                         new object[] { "test8" }
                                };
    
        protected void Store_RefreshData(object sender, StoreRefreshDataEventArgs e)
        {
            object[] data = this.MyData;
            var limit = e.Limit;
            if ((e.Start + e.Limit) > data.Length)
            {
                limit = data.Length - e.Start;
            }
            object[] rangeData = (e.Start < 0 || limit < 0) ? data : this.GetRange(data, e.Start, limit);
            e.Total = data.Length;
            this.GridPanel1.GetStore().DataSource = rangeData;
        }
    
        private object[] GetRange(object[] data, int start, int limit)
        {
            object[] result = new object[limit];
            for (int i = 0; i < limit; i++)
            {
                result[i] = data[i + start];
            }
            return result;
        }
    
        protected void ExportToCsv(object sender, DirectEventArgs e)
        {
            string json = JSON.Serialize(this.MyData);
            StoreSubmitDataEventArgs eSubmit = new StoreSubmitDataEventArgs(json, null);
            XmlNode xml = eSubmit.Xml;
    
            this.Response.Clear();
            this.Response.ContentType = "application/octet-stream";
            this.Response.AddHeader("Content-Disposition", "attachment; filename=submittedData.csv");
            XslCompiledTransform xtCsv = new XslCompiledTransform();
            xtCsv.Load(Server.MapPath("Csv.xsl"));
            xtCsv.Transform(xml, null, this.Response.OutputStream);
            this.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 runat="server">
        <title>Ext.Net Example</title>
    </head>
    <body>
        <form runat="server">
        <ext:ResourceManager runat="server" />
        <ext:GridPanel ID="GridPanel1" runat="server" AutoHeight="true">
            <Store>
                <ext:Store runat="server" OnRefreshData="Store_RefreshData">
                    <Proxy>
                        <ext:PageProxy />
                    </Proxy>
                    <Reader>
                        <ext:ArrayReader>
                            <Fields>
                                <ext:RecordField Name="test" />
                            </Fields>
                        </ext:ArrayReader>
                    </Reader>
                    <BaseParams>
                        <ext:Parameter Name="start" Value="0" Mode="Raw" />
                        <ext:Parameter Name="limit" Value="3" Mode="Raw" />
                    </BaseParams>
                </ext:Store>
            </Store>
            <ColumnModel runat="server">
                <Columns>
                    <ext:Column Header="Test" DataIndex="test" />
                </Columns>
            </ColumnModel>
            <BottomBar>
                <ext:PagingToolbar runat="server" PageSize="3" />
            </BottomBar>
        </ext:GridPanel>
        <ext:Button runat="server" Text="Export to csv">
            <DirectEvents>
                <Click OnEvent="ExportToCsv" IsUpload="true" />
            </DirectEvents>
        </ext:Button>
        </form>
    </body>
    </html>

Similar Threads

  1. Export grid panel data to excel
    By sumesh in forum 1.x Help
    Replies: 1
    Last Post: Sep 23, 2013, 9:07 AM
  2. Export to Excel with Remote Proxy
    By ecko in forum 1.x Help
    Replies: 0
    Last Post: Nov 29, 2011, 3:45 PM
  3. [CLOSED] Export store (remote paging)
    By CarWise in forum 1.x Legacy Premium Help
    Replies: 4
    Last Post: Jun 22, 2010, 12:06 PM
  4. Replies: 1
    Last Post: Apr 19, 2010, 2:44 PM
  5. [CLOSED] Export all data from gridpanel if paging
    By Sharon in forum 1.x Legacy Premium Help
    Replies: 2
    Last Post: Jul 28, 2009, 10:01 AM

Posting Permissions