2012-09-06 28 views
11

He hecho la agrupación de la cuadrícula dando groupindex a una columna particular en aspxgridview.Clasificación de resumen de grupo ASPxGridView: ordena el contenido dentro, no el resumen fuera de

Por ejemplo, si estoy agrupando por nombre de personas y los detalles de las órdenes hechas por esa persona en particular aparecerán en el contenido detallado cuando se haga clic en la flecha para ver el contenido.

Cuando hago clic en los campos de la cabecera para ordenar, se está clasificando los datos dentro del groupContent pero no se utiliza para clasificar los datos de groupsummary

estoy mostrando todas las totales como parte del resumen del grupo además del nombre de la persona.

Por ejemplo, si usted ve en el siguiente enlace:

https://demos.devexpress.com/ASPxGridViewDemos/Summary/GroupSortBySummary.aspx

Si ordena por nombre de empresa, el contenido sería solucionado, pero el resumen que muestra el país y la suma no tiene medios en solucionarse en el nivel exterior.

Por favor sugiérame opciones para resolver este problema.

Gracias.

+0

Tal vez estos artículos pueden ayudarle a: [ASPxGridView - Cómo ordenar grupos] (http://www.devexpress.com/Support/Center/kb/p/K18508 .aspx) y [ASPxGridView - Cómo ordenar grupos a través de la clase GroupSummarySortInfo] (http://www.devexpress.com/Support/Center/e/E3180.aspx). – Filip

Respuesta

0

Cuando agrupa por una columna devexpress utiliza automáticamente esa columna para ordenar. Sin ordenar los datos, la agrupación no es posible. Para superar este problema, hemos ordenado la fuente de datos en sí y luego aplicamos ese origen de datos a la cuadrícula.

1

Aquí hay una solución, basada en el ejemplo this.
La idea principal es crear un artículo de resumen que muestre el valor mínimo o máximo de la columna Country dentro del grupo City y ordene el grupo City con estos valores de resumen. Para este evento BeforeColumnSortingGrouping se usa para cambiar el comportamiento de clasificación. Aquí es
ejemplo:

<dx:ASPxGridView ... 
    OnBeforeColumnSortingGrouping="gridCustomers_BeforeColumnSortingGrouping"> 
private void SortByCountry() 
{ 
    gridCustomers.GroupSummary.Clear(); 
    gridCustomers.GroupSummarySortInfo.Clear(); 

    var sortOrder = gridCustomers.DataColumns["Country"].SortOrder; 

    SummaryItemType summaryType = SummaryItemType.None; 

    switch (sortOrder) 
    { 
     case ColumnSortOrder.None: 
      return; 
      break; 
     case ColumnSortOrder.Ascending: 
      summaryType = SummaryItemType.Min; 
      break; 
     case ColumnSortOrder.Descending: 
      summaryType = SummaryItemType.Max; 
      break; 
    } 

    var groupSummary = new ASPxSummaryItem("Country", summaryType); 
    gridCustomers.GroupSummary.Add(groupSummary); 

    var sortInfo = new ASPxGroupSummarySortInfo(); 
    sortInfo.SortOrder = sortOrder; 
    sortInfo.SummaryItem = groupSummary; 
    sortInfo.GroupColumn = "City"; 

    gridCustomers.GroupSummarySortInfo.AddRange(sortInfo); 
} 

protected void Page_Load(object sender, EventArgs e) 
{ 
    SortByCountry(); 
} 

protected void gridCustomers_BeforeColumnSortingGrouping(object sender, ASPxGridViewBeforeColumnGroupingSortingEventArgs e) 
{ 
    SortByCountry(); 
} 
Cuestiones relacionadas