I have a customer that is looking for a custom aggregate in the footer using a GridCalculatedColumn. As you can see from the attached image I am trying to take the following cells
(0.0732 * 61997914 / 111,335,022) = 0.0408
(0.0681 * 28971917 / 111,335,022) = 0.0177
(0.0719 * 20365191 / 111,335,022) = 0.0132
-----------
0.0716
How can I access the 111,335,022 if it is in the footer of a grouped column while performing this calculation at runtime and come up with the 0.0716 instead of the 0.0711 which is a straight average?
Is it possible to get these values in the ItemDataBound, if so I would have to distinguish them by the grouped columns.
(0.0732 * 61997914 / 111,335,022) = 0.0408
(0.0681 * 28971917 / 111,335,022) = 0.0177
(0.0719 * 20365191 / 111,335,022) = 0.0132
-----------
0.0716
How can I access the 111,335,022 if it is in the footer of a grouped column while performing this calculation at runtime and come up with the 0.0716 instead of the 0.0711 which is a straight average?
Is it possible to get these values in the ItemDataBound, if so I would have to distinguish them by the grouped columns.
4 Answers, 1 is accepted
0

Princy
Top achievements
Rank 2
answered on 17 Mar 2010, 08:39 AM
Hi,
Try the code snippet below to access the childitems and the group footer total to calculate the required amount. I have made use of a GridTemplateColumn instead of GridNumericColumn
ASPX:
C#
Hope this helps.
Princy
Try the code snippet below to access the childitems and the group footer total to calculate the required amount. I have made use of a GridTemplateColumn instead of GridNumericColumn
ASPX:
<Columns> |
<telerik:GridBoundColumn HeaderText="Name" DataField="Name"> |
</telerik:GridBoundColumn> |
<telerik:GridBoundColumn HeaderText="Value1" DataField="Value1"> |
</telerik:GridBoundColumn> |
<telerik:GridBoundColumn Aggregate="Sum" FooterAggregateFormatString="{0}" HeaderText="Value2" |
DataField="Value2"> |
</telerik:GridBoundColumn> |
<telerik:GridTemplateColumn UniqueName="CalculatedTotal" HeaderText="Total"> |
<ItemTemplate> |
<asp:Label ID="lblTotal"runat="server" Text=""></asp:Label> |
</ItemTemplate> |
</telerik:GridTemplateColumn> |
</Columns> |
C#
protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e) |
{ |
if (e.Item is GridGroupFooterItem) |
{ |
GridGroupFooterItem groupFooterItem = (GridGroupFooterItem)e.Item; |
int totalValue2=Convert.ToInt32(groupFooterItem["Value2"].Text); |
foreach(GridDataItem dataItem in groupFooterItem.OwnerTableView.Items) |
{ |
Label lbl=(Label) dataItem["CalculatedTotal"].FindControl("lblTotal"); |
lbl.Text = Convert.ToString(Convert.ToDecimal(dataItem["Value1"].Text) * Convert.ToInt32(dataItem["Value2"].Text) / totalValue2); |
} |
} |
} |
Hope this helps.
Princy
0

Mike
Top achievements
Rank 1
answered on 17 Mar 2010, 01:37 PM
Thanks for getting back to me, I like ths approach however it's throwing this error.
Compiler Error Message: CS0021: Cannot apply indexing with [] to an expression of type 'Telerik.Web.UI.GridGroupFooterItem'
Source Error:
Compiler Error Message: CS0021: Cannot apply indexing with [] to an expression of type 'Telerik.Web.UI.GridGroupFooterItem'
Source Error:
|
0
Hi Mike,
The indexed property of the GridGroupFooterItem object is added in the 2009.Q2 release of Telerik.Web.UI. If the compiler complains of no indexed property, you are probably using an older version of RadGrid?
Regards,
Veli
the Telerik team
Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items.
The indexed property of the GridGroupFooterItem object is added in the 2009.Q2 release of Telerik.Web.UI. If the compiler complains of no indexed property, you are probably using an older version of RadGrid?
Regards,
Veli
the Telerik team
Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items.
0

Mike
Top achievements
Rank 1
answered on 19 Mar 2010, 01:54 PM
Thanks for the update, looks like we need an upgrade. Until then, I took some code from another post and made a custom aggregate which works great until we upgrade. It's important to remember using the code below to make sure the columns are in order from left to right and use OnCustomAggregate="RadGrid1_CustomAggregate"
protected void RadGrid1_CustomAggregate(object sender, GridCustomAggregateEventArgs e) |
{ |
if (e.Item is GridGroupFooterItem && e.Column.UniqueName == "TotalkWh" || |
e.Item is GridGroupFooterItem && e.Column.UniqueName == "RunningPrice") |
{ |
// Response.Write("<br>Start <br>"); |
int totalkWh = 0; |
// Get the Total kWh for a grouping |
if (e.Item is GridGroupFooterItem && e.Column.UniqueName == "TotalkWh") |
{ |
if (RadGrid1.MasterTableView.GroupByExpressions.Count != 0) |
{ |
int gIndex = Convert.ToInt32(e.Item.GroupIndex) / 2; |
GridGroupHeaderItem hItem = (GridGroupHeaderItem)RadGrid1.MasterTableView.GetItems(GridItemType.GroupHeader)[gIndex]; |
GridItem[] items = hItem.GetChildItems(); |
foreach (GridDataItem item in items) |
{ |
if (!String.IsNullOrEmpty(Convert.ToString(item["TotalkWh"].Text))) |
{ |
string stripCommas = item["TotalkWh"].Text; |
stripCommasstripCommas = stripCommas.Replace(",", ""); |
totalkWh = Convert.ToInt32(stripCommas) + totalkWh; |
} |
} |
e.Result = totalkWh.ToString("N0"); |
ViewState["totalkWh"] = totalkWh; //Response.Write("<br>Middle " + totalkWh + "<br>"); |
} |
} |
decimal avgPrice = 0; |
decimal avgPriceFinal = 0; |
if (e.Item is GridGroupFooterItem && e.Column.UniqueName == "RunningPrice") |
{ |
// Response.Write("<br>ViewState " + ViewState["totalkWh"] + "<br>"); |
if (RadGrid1.MasterTableView.GroupByExpressions.Count != 0) |
{ |
int gIndex = Convert.ToInt32(e.Item.GroupIndex) / 2; |
GridGroupHeaderItem hItem = (GridGroupHeaderItem)RadGrid1.MasterTableView.GetItems(GridItemType.GroupHeader)[gIndex]; |
GridItem[] items = hItem.GetChildItems(); |
avgPrice = 0; |
avgPriceFinal = 0; |
foreach (GridDataItem item in items) |
{ |
if (!String.IsNullOrEmpty(Convert.ToString(item["RunningPrice"].Text))) |
{ |
avgPrice = Convert.ToDecimal(Convert.ToString(item["RunningPrice"].Text)) / Convert.ToInt32(Convert.ToString(ViewState["totalkWh"])); |
avgPriceFinalavgPriceFinal = avgPriceFinal + avgPrice; |
} |
// Response.Write(Convert.ToString(item["RunningPrice"].Text) + " / " + Convert.ToString(ViewState["totalkWh"]) + " = " + avgPrice.ToString("N4") + "<br>"); |
} |
// / Convert.ToInt32(Convert.ToString(item["TotalkWh"].Text)) |
e.Result = avgPriceFinal.ToString("N4"); |
ViewState["avgPrice"] = avgPriceFinal.ToString("N4"); |
} |
} |
// Response.Write("<br>End "); |
} |
if (e.Item is GridGroupFooterItem && e.Column.UniqueName == "AvgPrice") |
{ |
decimal returnAvgPrice = Convert.ToDecimal(Convert.ToString(ViewState["avgPrice"])); |
e.Result = returnAvgPrice.ToString("C4"); |
} |
} |