aspnet-3762-components-grid-view-concepts-use-data-summaries-custom-summary.md
Total summaries and group summaries include five predefined aggregate functions that allow you to calculate:
The ASPxGridBase.CustomSummaryCalculate event allows you to implement a custom summary. For example, custom summaries can calculate summaries against records that meet specific criteria and use multiple data fields in calculations.
Follow the steps below to implement a custom summary:
The ASPxGridBase.CustomSummaryCalculate event fires for grid data rows in the following cases:
When you calculate a total summary value, the grid raises this event for each data row.
When you calculate a group summary value, the grid raises this event for each data row in a group.
Note
Note that the grid raises the ASPxGridBase.CustomSummaryCalculate event before and after a row is processed.
The summary calculation consists of three stages:
Initialization
Calculation
Finalization
<dx:ASPxGridView ID="ASPxGridView1" runat="server" OnCustomCallback="ASPxGridView1_CustomCallback" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" ClientInstanceName="grid" Theme="Office365" KeyFieldName="ProductID" OnCustomSummaryCalculate="ASPxGridView1_CustomSummaryCalculate">
<Columns>
<dx:GridViewCommandColumn SelectAllCheckboxMode="Page" ShowSelectCheckbox="True" VisibleIndex="0">
</dx:GridViewCommandColumn>
<dx:GridViewDataTextColumn FieldName="ProductID" VisibleIndex="1" ReadOnly="True">
<EditFormSettings Visible="False" />
</dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn FieldName="ProductName" VisibleIndex="2">
</dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn FieldName="UnitPrice" VisibleIndex="3">
</dx:GridViewDataTextColumn>
</Columns>
<Settings ShowFooter="true" />
<TotalSummary>
<dx:ASPxSummaryItem SummaryType="Custom" FieldName="UnitPrice" ShowInColumn="UnitPrice" DisplayFormat="Total price for selected products: {0:c}" ValueDisplayFormat="{0}:c" />
</TotalSummary>
</dx:ASPxGridView>
<dx:ASPxButton ID="ASPxButton4" runat="server" Text="Refresh" AutoPostBack="false" Theme="Office365">
<ClientSideEvents Click="OnClick" />
</dx:ASPxButton>
protected void ASPxGridView1_CustomSummaryCalculate(object sender, DevExpress.Data.CustomSummaryEventArgs e)
{
// Initialization.
if (e.SummaryProcess == DevExpress.Data.CustomSummaryProcess.Start)
totalSum = 0;
else
// Calculation.
if (e.SummaryProcess == DevExpress.Data.CustomSummaryProcess.Calculate) {
if (ASPxGridView1.Selection.IsRowSelectedByKey(e.GetValue(ASPxGridView1.KeyFieldName)))
totalSum += Convert.ToInt32(e.FieldValue);
}
else
// Finalization.
if (e.SummaryProcess == DevExpress.Data.CustomSummaryProcess.Finalize)
e.TotalValue = totalSum;
}
protected void ASPxGridView1_CustomCallback(object sender, DevExpress.Web.ASPxGridViewCustomCallbackEventArgs e)
{
if (e.Parameters == "Refresh")
ASPxGridView1.DataBind();
}
function OnClick(s, e) {
grid.PerformCallback('Refresh');
}
Result: