Skip to main content

PivotCellEventArgsBase<TField, TData, TCustomTotal>.GetColumnFields() Method

Returns an array of column fields that correspond to the current cell.

Namespace: DevExpress.XtraPivotGrid

Assembly: DevExpress.PivotGrid.v23.2.Core.dll

NuGet Packages: DevExpress.PivotGrid.Core, DevExpress.Win.Navigation

Declaration

public TField[] GetColumnFields()

Returns

Type Description
TField[]

An array of column fields.

Remarks

The PivotGrid control supports multiple column fields. Use the GetColumnFields method to get column fields that correspond to the processed cell. If the cell belongs to a Column Grand Total, the GetColumnFields method returns an empty array (the array’s length is 0).

Use the e.ColumnField property to get the innermost column field that corresponds to the current cell. This property’s value matches the value of the last element in the array returned by the GetColumnFields method.

Use the e.GetFieldValue method to get any field’s value for the processed cell.

Example

This example calculates percentage based on the Beverages row value for each column. The Pivot Grid handles the PivotGridControl.CustomCellValue event to display a calculated percentage value in the cell that belongs to the % of Beverages Sales column. The grand total values are hidden.

Percent of beverages Sales

View Example

private void pivotGridControl1_CustomCellValue(object sender, PivotCellValueEventArgs e) {
    // Calculates the 'Percent' field values.
    if (e.DataField.Name == "PercentOfBeverages") {
        // Hides grand total values.
        if (e.RowValueType == PivotGridValueType.GrandTotal) {
            e.Value = null;
            return;
        }
        var rowValues = e.GetRowFields().Select(f => 
            f == fieldCategoryName ? "Beverages" : e.GetFieldValue(f)).ToArray();
        var columnValues = e.GetColumnFields().Select(f => 
            f == fieldCategoryName ? "Beverages" : e.GetFieldValue(f)).ToArray();
        decimal beveragesValue = Convert.ToDecimal(e.GetCellValue(columnValues, rowValues, e.DataField));
        if (beveragesValue == 0)
            e.Value = null;
        else
            e.Value = Convert.ToDecimal(e.Value) / beveragesValue;
    }
    else return;
}
See Also