I'm facing an issue with RadGrid control. I have a dataset grouped by a "level" field, and RadGrid shows subtotals per level. RadGrid allows to reorder columns. The issue is that, when reordering a column, its subtotal is not reordered alongside the column data and header; so, if a text column is reordered between numeric columns, the subtotal of the previous column appears on the group footer for that column. Please refer to attachments 1 and 2, to see an example.
Thanks
Regards
Julio MX
Thanks
Regards
Julio MX
6 Answers, 1 is accepted
0

Princy
Top achievements
Rank 2
answered on 31 May 2013, 05:53 AM
Hi Julio,
Please try this,this is an example which i tried and it works fine at my end,if further issues persist please post your code.
ASPX:
Thanks
Princy
Please try this,this is an example which i tried and it works fine at my end,if further issues persist please post your code.
ASPX:
<
telerik:RadGrid
ID
=
"RadGrid1"
runat
=
"server"
AutoGenerateColumns
=
"False"
AllowPaging
=
"True"
AllowSorting
=
"true"
>
<
ClientSettings
AllowColumnsReorder
=
"true"
>
</
ClientSettings
>
<
MasterTableView
ShowFooter
=
"true"
>
<
GroupByExpressions
>
<
telerik:GridGroupByExpression
>
<
SelectFields
>
<
telerik:GridGroupByField
FieldName
=
"OrderID"
Aggregate
=
"Count"
/>
</
SelectFields
>
<
GroupByFields
>
<
telerik:GridGroupByField
FieldName
=
"OrderDate"
SortOrder
=
"Descending"
/>
</
GroupByFields
>
</
telerik:GridGroupByExpression
>
</
GroupByExpressions
>
<
Columns
>
<
telerik:GridBoundColumn
SortExpression
=
"OrderID"
HeaderText
=
"OrderID"
DataField
=
"OrderID"
Aggregate
=
"Count"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
SortExpression
=
"OrderDate"
HeaderText
=
"Date Ordered"
DataField
=
"OrderDate"
UniqueName
=
"OrderDate"
DataFormatString
=
"{0:D}"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"ShipPostalCode"
HeaderText
=
"ShipPostalCode"
Aggregate
=
"CountDistinct"
UniqueName
=
"ShipPostalCode"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
SortExpression
=
"Freight"
HeaderText
=
"Freight"
DataField
=
"Freight"
UniqueName
=
"Freight"
Aggregate
=
"Sum"
>
</
telerik:GridBoundColumn
>
</
Columns
>
</
MasterTableView
>
</
telerik:RadGrid
>
Thanks
Princy
0

Jules
Top achievements
Rank 1
answered on 31 May 2013, 06:10 PM
Hi Princy; I tried your code but unfortunately it didn't work. Here is the code of the RadGrid:
Columns are dynamically created on DataBind, and the Aggregate Function is set on:
This method is called on RadGrid_NeedDataSource Event. So I wonder if the fact oo adding columns on run time instead of declaratively could affect group footers.
Thanks
Regards
Julio MX
<
telerik:RadGrid
ID
=
"ReportGrid"
runat
=
"server"
AllowMultiRowSelection
=
"False"
EnableEmbeddedSkins
=
"False"
AutoGenerateColumns
=
"False"
AllowSorting
=
"True"
ShowFooter
=
"True"
GridLines
=
"None"
EnableLinqExpressions
=
"False"
OnItemDataBound
=
"MyDownlineGridControlBase_ItemDataBound"
OnColumnCreated
=
"MyDownlineGridControlBase_ColumnCreated"
OnNeedDataSource
=
"MyDownlineGridControlBase_NeedDataSource"
OnPreRender
=
"MyDownlineGridControlBase_PreRender"
OnInit
=
"MyDownlineGridControlBase_Init"
Width
=
"100%"
meta:resourcekey
=
"ReportGrid"
CssClass
=
"ReportGrid SupVolGrid"
>
<
HeaderContextMenu
EnableEmbeddedSkins
=
"False"
/>
<
GroupingSettings
RetainGroupFootersVisibility
=
"true"
/>
<
MasterTableView
GroupLoadMode
=
"Client"
ShowGroupFooter
=
"true"
TableLayout
=
"Fixed"
ClientDataKeyNames
=
"DistributorID,PrimaryEmail,SponsorID"
Width
=
"100%"
AllowSorting
=
"true"
CssClass
=
""
GroupsDefaultExpanded
=
"false"
>
<
Columns
/>
<
RowIndicatorColumn
Visible
=
"True"
/>
<
GroupByExpressions
>
<
telerik:GridGroupByExpression
>
<
GroupByFields
>
<
telerik:GridGroupByField
FieldName
=
"SPLevelMakeTop"
/>
</
GroupByFields
>
<
SelectFields
>
<
telerik:GridGroupByField
FieldName
=
"SPLevelMakeTop"
/>
</
SelectFields
>
</
telerik:GridGroupByExpression
>
</
GroupByExpressions
>
</
MasterTableView
>
<
ClientSettings
Scrolling-UseStaticHeaders
=
"false"
AllowColumnsReorder
=
"true"
ReorderColumnsOnClient
=
"true"
AllowExpandCollapse
=
"true"
ClientEvents-OnGridCreated
=
"GridCreated"
>
<
Selecting
AllowRowSelect
=
"false"
/>
<
Resizing
AllowRowResize
=
"False"
EnableRealTimeResize
=
"True"
ResizeGridOnColumnResize
=
"True"
AllowColumnResize
=
"True"
/>
</
ClientSettings
>
<
FilterMenu
EnableEmbeddedSkins
=
"False"
/>
</
telerik:RadGrid
>
Columns are dynamically created on DataBind, and the Aggregate Function is set on:
private
void
AddColumn(GridTableView tableView, GridColumnDefinition columnDef,
string
headerText)
{
GridBoundColumn boundCol =
new
GridBoundColumn();
tableView.Columns.Add(boundCol);
boundCol.DataField = columnDef.DataField;
boundCol.DataFormatString = columnDef.DataFormatString;
boundCol.UniqueName = columnDef.UniqueName;
boundCol.HeaderText = headerText;
boundCol.DataType = columnDef.DataType;
if
(columnDef.Aggregate == GridColumnDefinition.SUM)
{
boundCol.FooterAggregateFormatString =
"{0:F2}"
;
boundCol.Aggregate = GridAggregateFunction.Sum;
}
}
This method is called on RadGrid_NeedDataSource Event. So I wonder if the fact oo adding columns on run time instead of declaratively could affect group footers.
Thanks
Regards
Julio MX
0

Princy
Top achievements
Rank 2
answered on 03 Jun 2013, 07:11 AM
Hi Julio,
Below is the entire code,where i added columns dynamically.This works fine for me. Please add the columns into Page_Init event.
ASPX:
C#:
Thanks
Princy
Below is the entire code,where i added columns dynamically.This works fine for me. Please add the columns into Page_Init event.
ASPX:
<
telerik:RadGrid
ID
=
"RadGrid1"
runat
=
"server"
AutoGenerateColumns
=
"false"
>
<
GroupingSettings
RetainGroupFootersVisibility
=
"true"
/>
<
MasterTableView
ShowFooter
=
"true"
>
<
GroupByExpressions
>
<
telerik:GridGroupByExpression
>
<
GroupByFields
>
<
telerik:GridGroupByField
FieldName
=
"ContactName"
/>
</
GroupByFields
>
<
SelectFields
>
<
telerik:GridGroupByField
FieldName
=
"CustomerID"
/>
</
SelectFields
>
</
telerik:GridGroupByExpression
>
</
GroupByExpressions
>
</
MasterTableView
>
<
ClientSettings
Scrolling-UseStaticHeaders
=
"false"
AllowColumnsReorder
=
"true"
ReorderColumnsOnClient
=
"true"
AllowExpandCollapse
=
"false"
>
<
Selecting
AllowRowSelect
=
"false"
/>
<
Resizing
AllowRowResize
=
"False"
EnableRealTimeResize
=
"True"
ResizeGridOnColumnResize
=
"True"
AllowColumnResize
=
"True"
/>
</
ClientSettings
>
</
telerik:RadGrid
>
C#:
protected
void
Page_Init(
object
source, System.EventArgs e)
{
RadGrid1.DataSourceID =
"SqlDataSource1"
;
GridBoundColumn boundColumn;
boundColumn =
new
GridBoundColumn();
boundColumn.DataField =
"CustomerID"
;
boundColumn.HeaderText =
"CustomerID"
;
boundColumn.Aggregate = GridAggregateFunction.Count;
RadGrid1.MasterTableView.Columns.Add(boundColumn);
boundColumn =
new
GridBoundColumn();
boundColumn.DataField =
"ContactName"
;
boundColumn.HeaderText =
"Contact Name"
;
boundColumn.FooterAggregateFormatString =
"{0:F2}"
;
boundColumn.Aggregate = GridAggregateFunction.First;
RadGrid1.MasterTableView.Columns.Add(boundColumn);
}
Thanks
Princy
1

Jules
Top achievements
Rank 1
answered on 03 Jun 2013, 11:22 PM
Hi Princy:
Please review this sample project. The issue is that the totals by group are not reordered with its corresponding column. It consists on a simple radgrid:
And test data:
You can create a ASP.NET Web forms project, add the Telerik.Web.UI reference, and paste this code on Default.aspx.
So, when you pick a numeric column and place it between alphanumeric columns, the group subtotals are not updated; if you reorder numeric columns, the corresponding group subtotals are not reordered.
Thanks,
Regards
Julio MX
Please review this sample project. The issue is that the totals by group are not reordered with its corresponding column. It consists on a simple radgrid:
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik"%>
<
asp:Content
runat
=
"server"
ID
=
"FeaturedContent"
ContentPlaceHolderID
=
"FeaturedContent"
>
<
style
type
=
"text/css"
>
.clientData
{
font-weight:bold;
}
</
style
>
<
telerik:RadGrid
ID
=
"RadGrid1"
runat
=
"server"
AutoGenerateColumns
=
"false"
>
<
GroupingSettings
RetainGroupFootersVisibility
=
"true"
/>
<
MasterTableView
GroupLoadMode
=
"Client"
ShowGroupFooter
=
"true"
TableLayout
=
"Fixed"
>
<
GroupByExpressions
>
<
telerik:GridGroupByExpression
>
<
GroupByFields
>
<
telerik:GridGroupByField
FieldName
=
"Country"
/>
</
GroupByFields
>
<
SelectFields
>
<
telerik:GridGroupByField
FieldName
=
"Country"
/>
</
SelectFields
>
</
telerik:GridGroupByExpression
>
</
GroupByExpressions
>
</
MasterTableView
>
<
ClientSettings
Scrolling-UseStaticHeaders
=
"false"
AllowColumnsReorder
=
"true"
ReorderColumnsOnClient
=
"true"
ColumnsReorderMethod
=
"Reorder"
AllowExpandCollapse
=
"false"
>
<
Selecting
AllowRowSelect
=
"false"
/>
<
Resizing
AllowRowResize
=
"False"
EnableRealTimeResize
=
"True"
ResizeGridOnColumnResize
=
"True"
AllowColumnResize
=
"True"
/>
</
ClientSettings
>
</
telerik:RadGrid
>
</
asp:Content
>
And test data:
using
System;
using
System.Data;
using
System.Collections.Generic;
using
System.Linq;
using
System.Web;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
Telerik.Web.UI;
public
partial
class
_Default : Page
{
DataTable data;
protected
void
Page_Init(
object
sender, EventArgs e)
{
createData();
}
protected
void
Page_Load(
object
sender, EventArgs e)
{
setGridColumns();
RadGrid1.DataSource = data;
RadGrid1.DataBind();
}
private
void
createData()
{
setDataColumns();
setData();
}
private
void
setDataColumns()
{
data =
new
DataTable();
data.Columns.Add(
"Country"
,
typeof
(
string
));
data.Columns.Add(
"ClientID"
,
typeof
(
string
));
data.Columns.Add(
"Income"
,
typeof
(
double
));
data.Columns.Add(
"Cost"
,
typeof
(
double
));
data.Columns.Add(
"Profit"
,
typeof
(
double
));
}
private
void
setData()
{
data.Rows.Add(
"US"
,
"A001"
, 3222, 213, 3009);
data.Rows.Add(
"US"
,
"A002"
, 3766, 207, 3559);
data.Rows.Add(
"US"
,
"A003"
, 4257, 223, 4034);
data.Rows.Add(
"US"
,
"A004"
, 2104, 242, 1862);
data.Rows.Add(
"MX"
,
"A005"
, 3056, 248, 2808);
data.Rows.Add(
"MX"
,
"A006"
, 4956, 270, 4686);
data.Rows.Add(
"MX"
,
"A007"
, 3642, 259, 3383);
data.Rows.Add(
"MX"
,
"A008"
, 2838, 213, 2625);
data.Rows.Add(
"MX"
,
"A009"
, 2401, 256, 2145);
data.Rows.Add(
"MX"
,
"A010"
, 2246, 283, 1963);
data.Rows.Add(
"MX"
,
"A011"
, 3045, 268, 2777);
data.Rows.Add(
"MX"
,
"A012"
, 3952, 224, 3728);
data.Rows.Add(
"MX"
,
"A013"
, 3772, 219, 3553);
data.Rows.Add(
"CA"
,
"A014"
, 2255, 249, 2006);
data.Rows.Add(
"CA"
,
"A015"
, 2796, 235, 2561);
data.Rows.Add(
"CA"
,
"A016"
, 3356, 270, 3086);
data.Rows.Add(
"CA"
,
"A017"
, 3567, 218, 3349);
data.Rows.Add(
"CA"
,
"A018"
, 4454, 222, 4232);
data.Rows.Add(
"CA"
,
"A019"
, 4725, 294, 4431);
data.Rows.Add(
"CA"
,
"A020"
, 2747, 248, 2499);
data.Rows.Add(
"CA"
,
"A021"
, 2820, 271, 2549);
data.Rows.Add(
"BR"
,
"A022"
, 2271, 271, 2000);
data.Rows.Add(
"BR"
,
"A023"
, 4707, 245, 4462);
data.Rows.Add(
"BR"
,
"A024"
, 3482, 273, 3209);
data.Rows.Add(
"BR"
,
"A025"
, 4713, 239, 4474);
data.Rows.Add(
"BR"
,
"A026"
, 2256, 292, 1964);
data.Rows.Add(
"BR"
,
"A027"
, 2514, 283, 2231);
data.Rows.Add(
"BR"
,
"A028"
, 2799, 225, 2574);
data.Rows.Add(
"BR"
,
"A029"
, 4360, 295, 4065);
data.Rows.Add(
"BR"
,
"A030"
, 4072, 274, 3798);
data.Rows.Add(
"BR"
,
"A031"
, 2866, 268, 2598);
data.Rows.Add(
"BR"
,
"A032"
, 4243, 202, 4041);
}
private
void
setGridColumns()
{
foreach
(DataColumn column
in
data.Columns)
{
createGridColumn(column);
}
}
private
void
createGridColumn(DataColumn column)
{
GridBoundColumn gColumn =
new
GridBoundColumn();
gColumn.DataField = column.ColumnName;
gColumn.DataType = column.DataType;
gColumn.HeaderText = column.ColumnName;
if
(column.DataType ==
typeof
(
double
))
{
gColumn.DataFormatString =
"{0:F2}"
;
gColumn.FooterAggregateFormatString =
"{0:F2}"
;
gColumn.Aggregate = GridAggregateFunction.Sum;
}
else
{
gColumn.ItemStyle.CssClass =
"clientData"
;
}
RadGrid1.MasterTableView.Columns.Add(gColumn);
}
}
You can create a ASP.NET Web forms project, add the Telerik.Web.UI reference, and paste this code on Default.aspx.
So, when you pick a numeric column and place it between alphanumeric columns, the group subtotals are not updated; if you reorder numeric columns, the corresponding group subtotals are not reordered.
Thanks,
Regards
Julio MX
0

Princy
Top achievements
Rank 2
answered on 04 Jun 2013, 09:03 AM
Hi,
Please take a look into the following code snippet I tried which worked as expected.
ASPX:
C#:
Please remove the ClientSetting ReorderColumnsOnClient.
Thanks,
Princy.
Please take a look into the following code snippet I tried which worked as expected.
ASPX:
<
telerik:RadGrid
ID
=
"RadGrid1"
runat
=
"server"
AutoGenerateColumns
=
"false"
>
<
MasterTableView
ShowGroupFooter
=
"true"
TableLayout
=
"Auto"
>
<
GroupByExpressions
>
<
telerik:GridGroupByExpression
>
<
GroupByFields
>
<
telerik:GridGroupByField
FieldName
=
"Country"
/>
</
GroupByFields
>
<
SelectFields
>
<
telerik:GridGroupByField
FieldName
=
"Country"
/>
</
SelectFields
>
</
telerik:GridGroupByExpression
>
</
GroupByExpressions
>
</
MasterTableView
>
<
ClientSettings
Scrolling-UseStaticHeaders
=
"false"
AllowColumnsReorder
=
"true"
ColumnsReorderMethod
=
"Reorder"
AllowExpandCollapse
=
"false"
>
<
Selecting
AllowRowSelect
=
"false"
/>
<
Resizing
AllowRowResize
=
"False"
EnableRealTimeResize
=
"True"
ResizeGridOnColumnResize
=
"True"
AllowColumnResize
=
"True"
/>
</
ClientSettings
>
</
telerik:RadGrid
>
C#:
DataTable data;
protected
void
Page_Load(
object
sender, EventArgs e)
{
createData();
if
(!IsPostBack)
{
RadGrid1.DataSource = data;
setGridColumns();
}
}
private
void
createData()
{
setDataColumns();
setData();
}
private
void
setDataColumns()
{
data =
new
DataTable();
data.Columns.Add(
"Country"
,
typeof
(
string
));
data.Columns.Add(
"ClientID"
,
typeof
(
string
));
data.Columns.Add(
"Income"
,
typeof
(
double
));
data.Columns.Add(
"Cost"
,
typeof
(
double
));
data.Columns.Add(
"Profit"
,
typeof
(
double
));
}
private
void
setData()
{
data.Rows.Add(
"US"
,
"A001"
, 3222, 213, 3009);
data.Rows.Add(
"US"
,
"A002"
, 3766, 207, 3559);
data.Rows.Add(
"US"
,
"A003"
, 4257, 223, 4034);
data.Rows.Add(
"US"
,
"A004"
, 2104, 242, 1862);
data.Rows.Add(
"MX"
,
"A005"
, 3056, 248, 2808);
data.Rows.Add(
"MX"
,
"A006"
, 4956, 270, 4686);
data.Rows.Add(
"MX"
,
"A007"
, 3642, 259, 3383);
data.Rows.Add(
"MX"
,
"A008"
, 2838, 213, 2625);
data.Rows.Add(
"MX"
,
"A009"
, 2401, 256, 2145);
data.Rows.Add(
"MX"
,
"A010"
, 2246, 283, 1963);
data.Rows.Add(
"MX"
,
"A011"
, 3045, 268, 2777);
data.Rows.Add(
"MX"
,
"A012"
, 3952, 224, 3728);
data.Rows.Add(
"MX"
,
"A013"
, 3772, 219, 3553);
data.Rows.Add(
"CA"
,
"A014"
, 2255, 249, 2006);
data.Rows.Add(
"CA"
,
"A015"
, 2796, 235, 2561);
data.Rows.Add(
"CA"
,
"A016"
, 3356, 270, 3086);
data.Rows.Add(
"CA"
,
"A017"
, 3567, 218, 3349);
data.Rows.Add(
"CA"
,
"A018"
, 4454, 222, 4232);
data.Rows.Add(
"CA"
,
"A019"
, 4725, 294, 4431);
data.Rows.Add(
"CA"
,
"A020"
, 2747, 248, 2499);
data.Rows.Add(
"CA"
,
"A021"
, 2820, 271, 2549);
data.Rows.Add(
"BR"
,
"A022"
, 2271, 271, 2000);
data.Rows.Add(
"BR"
,
"A023"
, 4707, 245, 4462);
data.Rows.Add(
"BR"
,
"A024"
, 3482, 273, 3209);
data.Rows.Add(
"BR"
,
"A025"
, 4713, 239, 4474);
data.Rows.Add(
"BR"
,
"A026"
, 2256, 292, 1964);
data.Rows.Add(
"BR"
,
"A027"
, 2514, 283, 2231);
data.Rows.Add(
"BR"
,
"A028"
, 2799, 225, 2574);
data.Rows.Add(
"BR"
,
"A029"
, 4360, 295, 4065);
data.Rows.Add(
"BR"
,
"A030"
, 4072, 274, 3798);
data.Rows.Add(
"BR"
,
"A031"
, 2866, 268, 2598);
data.Rows.Add(
"BR"
,
"A032"
, 4243, 202, 4041);
}
private
void
setGridColumns()
{
GridBoundColumn boundColumn;
boundColumn =
new
GridBoundColumn();
RadGrid1.MasterTableView.Columns.Add(boundColumn);
boundColumn.DataField =
"Country"
;
boundColumn.HeaderText =
"Country"
;
boundColumn.Aggregate = GridAggregateFunction.Count;
boundColumn =
new
GridBoundColumn();
RadGrid1.MasterTableView.Columns.Add(boundColumn);
boundColumn.DataField =
"ClientID"
;
boundColumn.HeaderText =
"ClientID"
;
boundColumn.Aggregate = GridAggregateFunction.Count;
boundColumn =
new
GridBoundColumn();
RadGrid1.MasterTableView.Columns.Add(boundColumn);
boundColumn.DataField =
"Income"
;
boundColumn.HeaderText =
"Income"
;
boundColumn.Aggregate = GridAggregateFunction.Sum;
boundColumn =
new
GridBoundColumn();
RadGrid1.MasterTableView.Columns.Add(boundColumn);
boundColumn.DataField =
"Cost"
;
boundColumn.HeaderText =
"Cost"
;
boundColumn.Aggregate = GridAggregateFunction.Sum;
boundColumn =
new
GridBoundColumn();
RadGrid1.MasterTableView.Columns.Add(boundColumn);
boundColumn.DataField =
"Profit"
;
boundColumn.HeaderText =
"Profit"
;
boundColumn.Aggregate = GridAggregateFunction.Sum;
}
Please remove the ClientSetting ReorderColumnsOnClient.
Thanks,
Princy.
0

Jules
Top achievements
Rank 1
answered on 04 Jun 2013, 09:27 PM
Hi Princy:
I tried an approach with Javascript, and appears to work:
On ClientEvents-OnColumnSwapped="GridColumnSwapped"
Thanks for your help.
Regards,
Julio MX
I tried an approach with Javascript, and appears to work:
On ClientEvents-OnColumnSwapped="GridColumnSwapped"
function
GridColumnSwapped(sender, eventArgs) {
var
sourceColumn = eventArgs.get_gridSourceColumn();
var
targetColumn = eventArgs.get_gridTargetColumn();
var
sourceHeader = sourceColumn.get_element();
var
targetHeader = targetColumn.get_element();
var
sourceIndex = sourceHeader.cellIndex;
var
targetIndex = targetHeader.cellIndex;
var
subTotalRows = $(
"tr.rgFooter"
);
subTotalRows.each(
function
() {
var
sourceCell =
this
.cells[sourceIndex];
var
targetCell =
this
.cells[targetIndex];
var
temp = targetCell.innerHTML;
targetCell.innerHTML = sourceCell.innerHTML;
sourceCell.innerHTML = temp;
});
}
Thanks for your help.
Regards,
Julio MX