Back to Devexpress

PivotGridControl.CustomCellValue Event

windowsforms-devexpress-dot-xtrapivotgrid-dot-pivotgridcontrol-844438f9.md

latest25.5 KB
Original Source

PivotGridControl.CustomCellValue Event

Allows you to replace cell values with values calculated in the event handler.

Namespace : DevExpress.XtraPivotGrid

Assembly : DevExpress.XtraPivotGrid.v25.2.dll

NuGet Package : DevExpress.Win.PivotGrid

Declaration

csharp
public event EventHandler<PivotCellValueEventArgs> CustomCellValue
vb
Public Event CustomCellValue As EventHandler(Of PivotCellValueEventArgs)

Event Data

The CustomCellValue event's data class is PivotCellValueEventArgs. The following properties provide information specific to this event:

PropertyDescription
ColumnCustomTotalGets the column custom total which displays the current cell. Inherited from PivotCellEventArgsBase<TField, TData, TCustomTotal>.
ColumnFieldGets the innermost column field which corresponds to the processed cell. Inherited from PivotCellEventArgsBase<TField, TData, TCustomTotal>.
ColumnFieldIndexFor internal use. Inherited from PivotCellEventArgsBase<TField, TData, TCustomTotal>.
ColumnIndexGets the visual index of the column that contains the processed cell. Inherited from PivotCellEventArgsBase<TField, TData, TCustomTotal>.
ColumnValueTypeGets the type of column which contains the processed cell. Inherited from PivotCellEventArgsBase<TField, TData, TCustomTotal>.
DataFieldGets the data field which identifies the column where the processed cell resides. Inherited from PivotCellEventArgsBase<TField, TData, TCustomTotal>.
RowCustomTotalGets the row custom total which contains the current cell. Inherited from PivotCellEventArgsBase<TField, TData, TCustomTotal>.
RowFieldGets the innermost row field that corresponds to the processed cell. Inherited from PivotCellEventArgsBase<TField, TData, TCustomTotal>.
RowFieldIndexFor internal use. Inherited from PivotCellEventArgsBase<TField, TData, TCustomTotal>.
RowIndexGets the index of the row that contains the processed cell. Inherited from PivotCellEventArgsBase<TField, TData, TCustomTotal>.
RowValueTypeGets the type of row that contains the processed cell. Inherited from PivotCellEventArgsBase<TField, TData, TCustomTotal>.
SummaryTypeGets the summary type of the currently processed value. Inherited from PivotCellEventArgsBase<TField, TData, TCustomTotal>.
SummaryValueGets the summary value currently being processed. Inherited from PivotCellEventArgsBase<TField, TData, TCustomTotal>.
ValueGets or sets the processed cell’s value.

The event data class exposes the following methods:

MethodDescription
CreateDrillDownDataSource()Returns data records used to calculate a summary value for the cell. Inherited from PivotCellEventArgsBase<TField, TData, TCustomTotal>.
CreateDrillDownDataSource(List<String>)Returns data records used to calculate a summary value for the current cell. Allows you to specify the columns to return. Inherited from PivotCellEventArgsBase<TField, TData, TCustomTotal>.
CreateDrillDownDataSource(Int32, List<String>)Returns data records used to calculate a summary value for the current cell. Allows you to specify the columns and limit the number of records to return. Inherited from PivotCellEventArgsBase<TField, TData, TCustomTotal>.
CreateDrillDownDataSource(Int32)Returns data records used to calculate a summary value for the current cell. Allows you to specify the columns and limit the number of records to return. Inherited from PivotCellEventArgsBase<TField, TData, TCustomTotal>.
CreateOLAPDrillDownDataSource(List<String>)Obsolete. In OLAP mode, returns a list of records used to calculate a summary value for the current cell. Allows you to specify the columns to be returned. Inherited from PivotCellEventArgsBase<TField, TData, TCustomTotal>.
CreateOLAPDrillDownDataSource(Int32, List<String>)Obsolete. In OLAP mode, returns a list of records used to calculate a summary value for the current cell. Allows you to specify the columns and limit the number of records to be returned. Inherited from PivotCellEventArgsBase<TField, TData, TCustomTotal>.
CreateServerModeDrillDownDataSource(List<String>)Obsolete. In server mode, returns a list of records used to calculate a summary value for the current cell. Allows you to specify the columns to be returned. Inherited from PivotCellEventArgsBase<TField, TData, TCustomTotal>.
CreateServerModeDrillDownDataSource(Int32, List<String>)Obsolete. In server mode, returns a list of records used to calculate a summary value for the current cell. Allows you to specify the columns and limit the number of records to be returned. Inherited from PivotCellEventArgsBase<TField, TData, TCustomTotal>.
CreateSummaryDataSource()Returns a summary data source. Inherited from PivotCellEventArgsBase<TField, TData, TCustomTotal>.
GetCellValue(TField)Returns a cell value calculated against the specified data field. Inherited from PivotCellEventArgsBase<TField, TData, TCustomTotal>.
GetCellValue(Int32, Int32)Returns a cell value by the column and row indexes. Inherited from PivotCellEventArgsBase<TField, TData, TCustomTotal>.
GetCellValue(Object[], Object[], TField)Returns a cell value calculated for the specified column and row field values, against the specified data field. Inherited from PivotCellEventArgsBase<TField, TData, TCustomTotal>.
GetColumnFields()Returns an array of column fields that correspond to the current cell. Inherited from PivotCellEventArgsBase<TField, TData, TCustomTotal>.
GetColumnGrandTotal(TField)Returns a Column Grand Total value calculated for the current row field values, against the specified data field. Inherited from PivotCellEventArgsBase<TField, TData, TCustomTotal>.
GetColumnGrandTotal(Object[], TField)Returns a Column Grand Total value calculated for the specified row field values, against the specified data field. Inherited from PivotCellEventArgsBase<TField, TData, TCustomTotal>.
GetFieldValue(TField, Int32)Returns the specified column or row field’s value for the cell, addressed by its zero-based index in the data area. Inherited from PivotCellEventArgsBase<TField, TData, TCustomTotal>.
GetFieldValue(TField)Returns the value of the specified column or row field that identifies the column/row in which the processed cell resides. Inherited from PivotCellEventArgsBase<TField, TData, TCustomTotal>.
GetGrandTotal(TField)Gets the Grand Total value for the specified field. Inherited from PivotCellEventArgsBase<TField, TData, TCustomTotal>.
GetNextColumnCellValue(TField)Returns the value of the cell in the same row but in the next column. Inherited from PivotCellEventArgsBase<TField, TData, TCustomTotal>.
GetNextRowCellValue(TField)Returns the value of the cell in the next row. Inherited from PivotCellEventArgsBase<TField, TData, TCustomTotal>.
GetPrevColumnCellValue(TField)Returns the value of the cell in the same row but in the previous column. Inherited from PivotCellEventArgsBase<TField, TData, TCustomTotal>.
GetPrevRowCellValue(TField)Returns the value of the cell in the previous row. Inherited from PivotCellEventArgsBase<TField, TData, TCustomTotal>.
GetRowFields()Returns an array of the row fields that correspond to the current cell. Inherited from PivotCellEventArgsBase<TField, TData, TCustomTotal>.
GetRowGrandTotal(TField)Returns a Row Grand Total value calculated for the current column field values, against the specified data field. Inherited from PivotCellEventArgsBase<TField, TData, TCustomTotal>.
GetRowGrandTotal(Object[], TField)Returns a Row Grand Total value calculated for the specified column field values, against the specified data field. Inherited from PivotCellEventArgsBase<TField, TData, TCustomTotal>.
IsFieldValueExpanded(TField)Indicates whether the specified field’s value that represents the row or column header of the processed cell is expanded. Inherited from PivotCellEventArgsBase<TField, TData, TCustomTotal>.
IsFieldValueRetrievable(TField)Gets whether the value of the specified column or row field can be retrieved for the current cell by the PivotCellEventArgsBase<TField, TData, TCustomTotal>.GetFieldValue method. Inherited from PivotCellEventArgsBase<TField, TData, TCustomTotal>.
IsOthersFieldValue(TField)Indicates whether the processed data cell resides within the “Others” row/column when the Top X Value feature is enabled. Inherited from PivotCellEventArgsBase<TField, TData, TCustomTotal>.

Remarks

The CustomCellValue event fires after all pivot calculations, when cell values are filtered, grouped, and sorted. The PivotGridControl raises the CustomCellValue event for each cell and you can modify cell values at the final stage before display.

When this event occurs, all cell positions are determined. An event handler can perform custom calculations based on a cell with a known position. The cell position is specified by row and column indices or relative to the current cell (next or previous row or column).

You can perform custom calculations and assign the result to the PivotCellValueEventArgs.Value property.

The PivotCellValueEventArgs class contains event data and provides properties and methods to obtain all data and summatries related to the current cell, the cell position and values of the adjacent cells.

The CustomCellValue event cannot be used to sort rows or columns by custom values. Sorting by custom summary values in the event handler may cause an infinite loop because a value change may change the cell order and trigger the event. Handle the CustomSummary event instead. It allows you to access cells unrelated to their visual position and use the result to sort rows and columns.

For more information on summary values (totals) refer to the Summarization - Totals and UI Elements - Totals articles.

To format a displayed value, handle the PivotGridControl.CustomCellDisplayText event that raises after the CustomCellValue event.

Important

Do not change cell values, modify the control’s layout, or change the control’s object model in the events used for custom control painting. Actions that update the layout can cause the control to malfunction.

Example

This example demonstrates how to handle the CustomCellValue event to hide field row totals and grand totals. The total values remain hidden when you expand or collapse field values.

View Example: Pivot Grid for WinForms - Hide Row Totals

cs
using DevExpress.XtraEditors;
using DevExpress.XtraPivotGrid;
using System.ComponentModel;
using System.Linq;

namespace HideTotalsCustomCellValueExample {
    public partial class Form1 : XtraForm {
        public Form1() {
            InitializeComponent();
            pivotGridControl1.CustomCellValue += pivotGridControl1_CustomCellValue;
            BindingList<PivotData> data = new BindingList<PivotData>();
            for (int i = 0; i < 100; i++)
                data.Add(new PivotData() { Group = "Group " + i % 4, Row = "Row " + i % 5, 
                    Column = "Column" + i % 3, Value = i });
            pivotGridControl1.DataSource = data;
            pivotGridControl1.BestFitDataHeaders(true);
        }

        private void pivotGridControl1_CustomCellValue(object sender, PivotCellValueEventArgs e) {
            if (e.DataField == fieldLowLevel) {
                PivotGridField lastLevelField = 
                    pivotGridControl1.GetFieldsByArea(PivotArea.RowArea).Last();
                if(e.RowValueType == PivotGridValueType.Total 
                    || e.RowValueType == PivotGridValueType.GrandTotal 
                    || e.RowField != lastLevelField)
                    e.Value = null;
            } 
        }
    }
    class PivotData {
        public string Group { get; set; }
        public string Row { get; set; }
        public string Column { get; set; }
        public decimal Value { get; set; }
    }
}
vb
Imports DevExpress.XtraEditors
Imports DevExpress.XtraPivotGrid
Imports System.ComponentModel
Imports System.Linq

Namespace HideTotalsCustomCellValueExample
    Partial Public Class Form1
        Inherits XtraForm

        Public Sub New()
            InitializeComponent()
            AddHandler pivotGridControl1.CustomCellValue, AddressOf pivotGridControl1_CustomCellValue
            Dim data As New BindingList(Of PivotData)()
            For i As Integer = 0 To 99
                data.Add(New PivotData() With {.Group = "Group " & i Mod 4, .Row = "Row " & i Mod 5, .Column = "Column" & i Mod 3, .Value = i})
            Next i
            pivotGridControl1.DataSource = data
            pivotGridControl1.BestFitDataHeaders(True)
        End Sub

        Private Sub pivotGridControl1_CustomCellValue(ByVal sender As Object, ByVal e As PivotCellValueEventArgs) Handles pivotGridControl1.CustomCellValue
            If e.DataField Is fieldLowLevel Then
                Dim lastLevelField As PivotGridField = pivotGridControl1.GetFieldsByArea(PivotArea.RowArea).Last()
                If e.RowValueType = PivotGridValueType.Total OrElse e.RowValueType = PivotGridValueType.GrandTotal OrElse e.RowField IsNot lastLevelField Then
                    e.Value = Nothing
                End If
            End If
        End Sub

    End Class
    Friend Class PivotData
        Public Property Group() As String
        Public Property Row() As String
        Public Property Column() As String
        Public Property Value() As Decimal
    End Class
End Namespace

More Examples

View Example: How to Use the Other Cell's Values in the Current Cell Value Calculation

The following code snippets (auto-collected from DevExpress Examples) contain references to the CustomCellValue event.

Note

The algorithm used to collect these code examples remains a work in progress. Accordingly, the links and snippets below may produce inaccurate results. If you encounter an issue with code examples below, please use the feedback form on this page to report the issue.

winforms-dashboard-access-api-of-underlying-controls/CS/Dashboard_ControlAccess/Form1.cs#L19

csharp
PivotGridControl pivotGridControl = e.PivotGridControl;
    pivotGridControl.CustomCellValue += pivotGridControl_CustomCellValue;
}

winforms-pivotgrid-hide-totals-customcellvalue/CS/HideTotalsCustomCellValueExample/Form1.cs#L10

csharp
InitializeComponent();
pivotGridControl1.CustomCellValue += pivotGridControl1_CustomCellValue;
BindingList<PivotData> data = new BindingList<PivotData>();

winforms-pivotgrid-how-to-edit-and-save-cell-values/CS/HowToEditAndSavePivotCellValues/Form1.cs#L10

csharp
InitializeComponent();
pivotGridControl1.CustomCellValue += PivotGridControl1_CustomCellValue;
pivotGridControl1.EditValueChanged += PivotGridControl1_EditValueChanged;

winforms-dashboard-access-api-of-underlying-controls/VB/Dashboard_ControlAccess/Form1.vb#L20

vb
Dim pivotGridControl As PivotGridControl = e.PivotGridControl
    AddHandler pivotGridControl.CustomCellValue, AddressOf pivotGridControl_CustomCellValue
End If

winforms-pivotgrid-hide-totals-customcellvalue/VB/HideTotalsCustomCellValueExample/Form1.vb#L12

vb
InitializeComponent()
AddHandler pivotGridControl1.CustomCellValue, AddressOf pivotGridControl1_CustomCellValue
Dim data As New BindingList(Of PivotData)()

winforms-pivotgrid-how-to-edit-and-save-cell-values/VB/HowToEditAndSavePivotCellValues/Form1.vb#L12

vb
AddHandler pivotGridControl1.CustomCellValue, AddressOf PivotGridControl1_CustomCellValue
AddHandler pivotGridControl1.EditValueChanged, AddressOf PivotGridControl1_EditValueChanged

See Also

CustomCellDisplayText

CustomCellEdit

Totals

Totals

PivotGridControl Class

PivotGridControl Members

DevExpress.XtraPivotGrid Namespace