[CLOSED] Dynamic GridPanel with Grouping Summary and Sorting

  1. #1

    [CLOSED] Dynamic GridPanel with Grouping Summary and Sorting



    Hi,

    I have a page which contains a GridPanel which is loaded dynamically and has a GroupingSummary plugin attached.

    Does anyone know if it is possible to set the order of data within each group whilst having the grouping columns ordered in descending order?

    I am binding data to the store using "</FONTstrData.SetDataFromJson" and the data passed from to this function is ordered correctly (date descending and then username ascending). However, the date field is not ordered in descending order (see Image1). If I add
    [CODE]
    strData.SortInfo.Field = "DateValue";
    strData.SortInfo.Direction = Ext.Net.SortDirection.DESC;
    strData.RemoteSort = true;
    [CODE]
    to the store then the dates are ordered in descending order but the child data is not ordered by the UserName field (see Image2)


    Any suggestions would be greatly appreciated!

    Thanks

    
    
    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Report.aspx.cs" Inherits="WebApplication1.Report" %>
    
    
    <!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></title>
    
    
    <style type="text/css">
    
    
    </style>
    
    
    </head>
    
    
    <body>
    
    
    <form id="frmMain" runat="server">
    
    
    <ext:ResourceManager ID="rsmMain" runat="server">
    
    
    <Listeners>
    
    
    </Listeners>
    
    
    </ext:ResourceManager>
    
    
    <ext:Store runat="server" ID="strData" AutoLoad="true" AutoDataBind="true">
    
    
    <Listeners>
    
    
    </Listeners>
    
    
    </ext:Store>
    
    
    <ext:Viewport runat="server" ID="ViewPort1">
    
    
    <Content>
    
    
    <ext:FitLayout ID="FitLayout1" runat="server">
    
    
    <Items>
    
    
    <ext:Panel runat="server" ID="pnlReport" Border="false" AutoHeight="false" HideBorders="true">
    
    
    <Content>
    
    
    <ext:FitLayout runat="server" ID="FitLayout2">
    
    
    <Items>
    
    
    <ext:GridPanel runat="server" 
    
    
    ID="grdData" AutoScroll="true"
    
    
    StoreID="strData" AutoWidth="true"
    
    
    ClicksToEdit="1" AutoEncode="true"
    
    
    EnableDragDrop="false"
    
    
    AutoLoad="false" AutoDataBind="true" SerializationMode="Simple"
    
    
    EnableColumnHide="false"
    
    
    EnableColumnMove="false">
    
    
    <ColumnModel>
    
    
    <Columns>
    
    
    </Columns>
    
    
    </ColumnModel>
    
    
    <SelectionModel>
    
    
    <ext:RowSelectionModel ID="RowSelectionModel2" runat="server" SingleSelect="true"> 
    
    
    </ext:RowSelectionModel>
    
    
    </SelectionModel>
    
    
    <LoadMask Msg="Loading" ShowMask="true" />
    
    
    </ext:GridPanel>
    
    
    </Items>
    
    
    </ext:FitLayout>
    
    
    </Content>
    
    
    </ext:Panel>
    
    
    </Items>
    
    
    </ext:FitLayout>
    
    
    </Content>
    
    
    </ext:Viewport>
    
    
    </form>
    
    
    </body>
    
    
    </html>
    
    
    
    using System;
    
    
    using System.Collections.Generic;
    
    
    using System.Linq;
    
    
    using System.Web;
    
    
    using System.Web.UI;
    
    
    using System.Web.UI.WebControls;
    
    
    using Ext.Net;
    
    
    namespace WebApplication1
    
    
    {
    
    
    public partial class Report : System.Web.UI.Page
    
    
    {
    
    
    protected void Page_Load(object sender, EventArgs e)
    
    
    {
    
    
    if (!X.IsAjaxRequest || !Page.IsPostBack)
    
    
    {
    
    
    rsmMain.RegisterClientScriptInclude("GridSummary", "Ext.ux.grid.GridSummary.js");
    
    
    LoadColumns(); //Load store and grid columns
    
    
    LoadData(); //Load data
    
    
    }
    
    
    }
    
    
    private void LoadColumns()
    
    
    {
    
    
    JsonReader opReader;
    
    
    RecordField opField;
    
    
    Column opColumn = new Column();
    
    
    GroupingSummaryColumn opGroupColumn = new GroupingSummaryColumn();
    
    
     
    
    
    //Department view
    
    
    //Create GroupingView and assign to the grid
    
    
    Ext.Net.GroupingView opView = new GroupingView();
    
    
    opView.ID = "GroupingView1";
    
    
    opView.ForceFit = true;
    
    
    opView.EmptyText = "No data available";
    
    
    opView.ShowGroupName = false;
    
    
    opView.HideGroupedColumn = true;
    
    
    opView.StartCollapsed = true;
    
    
    grdData.View.Add(opView);
    
    
    //Set the AutoExpandColumn
    
    
    grdData.AutoExpandColumn = "colDate";
    
    
    //Get the GroupField on the store
    
    
    strData.GroupField = "DateValue";
    
    
    GenericPlugin opGenPlugin = new GenericPlugin();
    
    
    opGenPlugin.InstanceName = "Ext.ux.grid.GridSummary";
    
    
    grdData.Plugins.Add(opGenPlugin);
    
    
    //Add the Grouping Summary plugin - needed for the grouping and summary row functionality
    
    
    GroupingSummary opPlugin = new GroupingSummary();
    
    
    opPlugin.ID = "GroupingSummary1";
    
    
    grdData.Plugins.Add(opPlugin);
    
    
    //Create a new reader as the store is being dynamically
    
    
    opReader = new JsonReader();
    
    
    opReader.IDProperty = "TransactionID";
    
    
    //Date
    
    
    opField = new RecordField("DateValue", RecordFieldType.Date);
    
    
    opReader.Fields.Add(opField); //add recordField to store reader
    
    
    opGroupColumn = new GroupingSummaryColumn();
    
    
    opGroupColumn.ColumnID = "colDate";
    
    
    opGroupColumn.Header = "Date";
    
    
    opGroupColumn.DataIndex = "DateValue";
    
    
    opGroupColumn.Hideable = false;
    
    
    opGroupColumn.Renderer.Handler = "return Ext.util.Format.date(value, 'd/m/Y')";
    
    
    opGroupColumn.SummaryType = SummaryType.Count;
    
    
    opGroupColumn.SummaryRenderer.Handler = "return ((value === 0 || value > 1) ? '(' + value +' Bookings)' : '(1 Booking)');";
    
    
    grdData.ColumnModel.Columns.Add(opGroupColumn);
    
    
    //User
    
    
    opField = new RecordField("UserName");
    
    
    opReader.Fields.Add(opField); //add recordField to store reader
    
    
    opGroupColumn = new GroupingSummaryColumn();
    
    
    opGroupColumn.ColumnID = "colUser";
    
    
    opGroupColumn.Header = "User";
    
    
    opGroupColumn.DataIndex = "UserName";
    
    
    opGroupColumn.Hideable = false;
    
    
    opGroupColumn.Width = Unit.Pixel(100);
    
    
    opGroupColumn.SummaryType = SummaryType.Count;
    
    
    opGroupColumn.Renderer.Handler = "return value";
    
    
    opGroupColumn.SummaryRenderer.Handler = "return ((value === 0 || value > 1) ? '(' + value +' Bookings)' : '(1 Booking)');";
    
    
    grdData.ColumnModel.Columns.Add(opGroupColumn);
    
    
    //Porject Number
    
    
    opField = new RecordField("ProjectNumber");
    
    
    opReader.Fields.Add(opField); //add recordField to store reader
    
    
    opColumn = new Column(); //add column to store
    
    
    opColumn.Header = "Project";
    
    
    opColumn.DataIndex = "ProjectNumber";
    
    
    opColumn.Width = Unit.Pixel(75);
    
    
    grdData.ColumnModel.Columns.Add(opColumn);
    
    
    //Porject title
    
    
    opField = new RecordField("ProjectName");
    
    
    opReader.Fields.Add(opField); //add recordField to store reader
    
    
    opColumn = new Column(); //add column to store
    
    
    opColumn.Header = "Project Title";
    
    
    opColumn.DataIndex = "ProjectName";
    
    
    opColumn.Width = Unit.Pixel(200);
    
    
    grdData.ColumnModel.Columns.Add(opColumn);
    
    
    //Hours
    
    
    opField = new RecordField("Hours");
    
    
    opReader.Fields.Add(opField); //add recordField to store reader
    
    
    opGroupColumn = new GroupingSummaryColumn();
    
    
    opGroupColumn.ColumnID = "colHours";
    
    
    opGroupColumn.Header = "Hours";
    
    
    opGroupColumn.Fixed = true;
    
    
    opGroupColumn.DataIndex = "Hours";
    
    
    opGroupColumn.Width = Unit.Pixel(75);
    
    
    opGroupColumn.SummaryType = SummaryType.Sum;
    
    
    opGroupColumn.Renderer.Handler = "return value;";
    
    
    grdData.ColumnModel.Columns.Add(opGroupColumn);
    
    
    // strData.SortInfo.Field = "DateValue";
    
    
    // strData.SortInfo.Direction = Ext.Net.SortDirection.DESC;
    
    
    // strData.RemoteSort = true;
    
    
    opReader.Root = "data";
    
    
    strData.Reader.Add(opReader);
    
    
    }
    
    
    /// <summary>
    
    
    /// Author: Beth Chubb
    
    
    /// Date: 03/06/2010
    
    
    /// Purpose: gets the department discretionary data loads into store
    
    
    /// </summary>
    
    
    /// <param name="lStartDateID">The start date ID</param>
    
    
    /// <param name="lEndDateID">The end date ID</param>
    
    
    private void LoadData()
    
    
    {
    
    
    IList<Dictionary<string, object>> opData = new List<Dictionary<string, object>>();
    
    
    Dictionary<string, object> opObj;
    
    
    //Populate data
    
    
    opObj = new Dictionary<string, object>();
    
    
    opObj.Add("DateID", 2);
    
    
    opObj.Add("DateValue", new DateTime(2010, 6, 3));
    
    
    opObj.Add("DepartmentName", "Dept1");
    
    
    opObj.Add("ProjectNumber", "Project 2");
    
    
    opObj.Add("ProjectName", "P2");
    
    
    opObj.Add("UserName", "Bob");
    
    
    opObj.Add("TransactionID", 5);
    
    
    opObj.Add("Hours", 1);
    
    
    opData.Add(opObj);
    
    
    opObj = new Dictionary<string, object>();
    
    
    opObj.Add("DateID", 2);
    
    
    opObj.Add("DateValue", new DateTime(2010, 6, 3));
    
    
    opObj.Add("DepartmentName", "Dept1");
    
    
    opObj.Add("ProjectNumber", "Project 1");
    
    
    opObj.Add("ProjectName", "P1");
    
    
    opObj.Add("UserName", "Jane");
    
    
    opObj.Add("TransactionID", 4);
    
    
    opObj.Add("Hours", 1);
    
    
    opData.Add(opObj);
    
    
    opObj = new Dictionary<string, object>();
    
    
    opObj.Add("DateID", 1);
    
    
    opObj.Add("DateValue", new DateTime(2010, 6, 2));
    
    
    opObj.Add("DepartmentName", "Dept1");
    
    
    opObj.Add("ProjectNumber", "Project 2");
    
    
    opObj.Add("ProjectName", "P2");
    
    
    opObj.Add("UserName", "Bob");
    
    
    opObj.Add("TransactionID", 2);
    
    
    opObj.Add("Hours", 4);
    
    
    opData.Add(opObj);
    
    
    opObj = new Dictionary<string, object>();
    
    
    opObj.Add("DateID", 1);
    
    
    opObj.Add("DateValue", new DateTime(2010, 6, 2));
    
    
    opObj.Add("DepartmentName", "Dept1");
    
    
    opObj.Add("ProjectNumber", "Project 1");
    
    
    opObj.Add("ProjectName", "P1");
    
    
    opObj.Add("UserName", "Jane");
    
    
    opObj.Add("TransactionID", 3);
    
    
    opObj.Add("Hours", 1);
    
    
    opData.Add(opObj);
    
    
    opObj = new Dictionary<string, object>();
    
    
    opObj.Add("DateID", 1);
    
    
    opObj.Add("DateValue", new DateTime(2010, 6, 2));
    
    
    opObj.Add("DepartmentName", "Dept1");
    
    
    opObj.Add("ProjectNumber", "Project 3");
    
    
    opObj.Add("ProjectName", "P3");
    
    
    opObj.Add("UserName", "Paul");
    
    
    opObj.Add("TransactionID", 1);
    
    
    opObj.Add("Hours", 9);
    
    
    opData.Add(opObj);
    
    
    strData.SetDataFromJson(String.Format("{{totalCount:{1},'data' : {0}}}", JSON.Serialize(opData), opData.Count));
    
    
    }
    
    
    }
    
    
    }
  2. #2

    RE: [CLOSED] Dynamic GridPanel with Grouping Summary and Sorting

    Hi,

    Try to add the following code
    strData.SortInfo.Field = "UserName";
    strData.SortInfo.Direction = Ext.Net.SortDirection.ASC;
    strData.CustomConfig.Add(new ConfigItem("groupDir", "DESC", ParameterMode.Value));
    We will add GroupDir server side property soon (group field sorting direction)
  3. #3

    RE: [CLOSED] Dynamic GridPanel with Grouping Summary and Sorting



    That's great - thanks.

    Will keep an eye out for the GroupDir field.
  4. #4

    RE: [CLOSED] Dynamic GridPanel with Grouping Summary and Sorting

    Feature Request Ticket for new GroupDir property.

    http://extnet.lighthouseapp.com/proj...perty-to-store


    Geoffrey McGill
    Founder

Similar Threads

  1. [CLOSED] Not editable grouping summary gridpanel
    By Marcelo in forum 1.x Legacy Premium Help
    Replies: 9
    Last Post: Jun 28, 2012, 1:22 PM
  2. [CLOSED] Dynamic grid with Grouping Summary and Editors
    By rthiney in forum 1.x Legacy Premium Help
    Replies: 1
    Last Post: Jul 06, 2011, 4:59 PM
  3. [CLOSED] Dynamic Grid, Sorting and Grouping Issue
    By SymSure in forum 1.x Legacy Premium Help
    Replies: 2
    Last Post: Mar 16, 2010, 1:06 PM
  4. [CLOSED] [1.0] GridPanel summary rows without grouping
    By danielg in forum 1.x Legacy Premium Help
    Replies: 2
    Last Post: Feb 16, 2010, 7:36 AM
  5. [CLOSED] Remote grouping or grouping summary for GridPanel
    By jchau in forum 1.x Legacy Premium Help
    Replies: 1
    Last Post: Nov 08, 2009, 10:23 PM

Posting Permissions