private SummaryCell CreateCustomSummaryCell()
{
SummaryCell summaryCell = new SummaryCell();
// Custom calculation logic.
summaryCell.Calculation = new PercentageCalculation();
summaryCell.Style.Format = "#0.00%";
summaryCell.Style.BackColor = Color.Wheat;
return summaryCell;
}
class PercentageCalculation : ICalculation
{
public object Calculate(CalculationContext context)
{
// calculate the percentage base on current section's sub-total in total.
object subTotalValue = context.GcMultiRow[context.SectionIndex, "SubTotal"].Value;
object totalValue = context.GcMultiRow.ColumnFooters[0]["Total"].Value;
if (object.Equals(totalValue, 0m))
{
// context.ErrorInfo = "Total is 0.";
return "Total is 0";
}
return (decimal)subTotalValue / (decimal)totalValue;
}
public object Clone()
{
// If you and new property in the calculation, make sure the property is cloned in this method.
return new PercentageCalculation();
}
}
Private Function CreateCustomSummaryCell() As SummaryCell
Dim summaryCell As New SummaryCell()
' Custom calculation logic.
summaryCell.Calculation = New PercentageCalculation()
summaryCell.Style.Format = "#0.00%"
summaryCell.Style.BackColor = Color.Wheat
Return summaryCell
End Function
Private Class PercentageCalculation
Implements ICalculation
Public Function Calculate(ByVal context As CalculationContext) As Object Implements ICalculation.Calculate
' calculate the percentage base on current section's sub-total in total.
Dim subTotalValue As Object = context.GcMultiRow(context.SectionIndex, "SubTotal").Value
Dim totalValue As Object = context.GcMultiRow.ColumnFooters(0)("Total").Value
If Object.Equals(totalValue, 0D) Then
' context.ErrorInfo = "Total is 0.";
Return "Total is 0"
End If
Return DirectCast(subTotalValue, Decimal) / DirectCast(totalValue, Decimal)
End Function
Public Function Clone() As Object Implements ICloneable.Clone
' If you and new property in the calculation, make sure the property is cloned in this method.
Return New PercentageCalculation()
End Function
End Class