Our What's New in v24.2 webpage includes product-specific surveys. Your response to our survey questions will help us measure product satisfaction for features released in this major update and help us refine our plans for our next major release.
ImportsMicrosoft.VisualBasicImportsSystemImportsSystem.WindowsImportsSystem.Windows.MediaImports CustomAppearance.DataSet1TableAdapters
ImportsDevExpress.Xpf.PivotGridNamespace CustomAppearance
PartialPublicClass MainWindow
Inherits Window
Private salesPersonDataTable AsNew DataSet1.SalesPersonDataTable()
Private salesPersonDataAdapter AsNew SalesPersonTableAdapter()
Private minValue, maxValue, minTotalValue, maxTotalValue AsDecimalPrivate maxMinCalculated AsBooleanPublicSubNew()
InitializeComponent()
pivotGridControl1.DataSource = salesPersonDataTable
EndSubPrivateSub Window_Loaded(ByVal sender AsObject, ByVal e As RoutedEventArgs)
salesPersonDataAdapter.Fill(salesPersonDataTable)
pivotGridControl1.CollapseAll()
EndSub' Handles the CustomCellAppearance event. Sets the current cell's foreground color' to a color generated in a custom manner.PrivateSub OnCustomAppearance(ByVal sender AsObject, ByVal e As PivotCustomCellAppearanceEventArgs)
IfNot(TypeOf e.Value IsDecimal) ThenReturnEndIfDim value AsDecimal = CDec(e.Value)
Dim isGrandTotal AsBoolean = Me.IsGrandTotal(e)
If IsValueNotFit(value, isGrandTotal) Then
ResetMaxMin()
EndIf
EnsureMaxMin()
If IsValueNotFit(value, isGrandTotal) ThenReturnEndIf
e.Foreground = New SolidColorBrush(GetColorByValue(value, Me.IsGrandTotal(e)))
EndSubPrivateFunction IsValueNotFit(ByVal value AsDecimal, ByVal isGrandToatl AsBoolean) AsBooleanIf isGrandToatl ThenReturn value < minTotalValue OrElse value > maxTotalValue
ElseReturn value < minValue OrElse value > maxValue
EndIfEndFunctionPrivateSub OnGridLayout(ByVal sender AsObject, ByVal e As RoutedEventArgs)
ResetMaxMin()
EndSub' Generates a custom color for a cell based on the cell value's share ' in the maximum summary or total value (for summary and total cells),' or in the maximum Grand Total value (for Grand Total cells).PrivateFunction GetColorByValue(ByVal value AsDecimal, ByVal isGrandTotal AsBoolean) As Color
Dim variation AsIntegerIf isGrandTotal Then
variation = Convert.ToInt32(510 * (value - minTotalValue) / (maxTotalValue - minTotalValue))
Else
variation = Convert.ToInt32(510 * (value - minValue) / (maxValue - minValue))
EndIfDim r, b AsByteIf variation >= 255Then
r = Convert.ToByte(510 - variation)
b = 255Else
r = 255
b = Convert.ToByte(variation)
EndIfReturn Color.FromRgb(r, 0, b)
EndFunctionPrivateFunction IsGrandTotal(ByVal e As PivotCustomSummaryEventArgs) AsBooleanReturn e.RowField IsNothingOrElse e.ColumnField IsNothingEndFunctionPrivateFunction IsGrandTotal(ByVal e As PivotCellBaseEventArgs) AsBooleanReturn e.RowValueType = FieldValueType.GrandTotal OrElse e.ColumnValueType = FieldValueType.GrandTotal
EndFunction' Calculates the maximum and minimum summary and Grand Total values.PrivateSub EnsureMaxMin()
If maxMinCalculated ThenReturnEndIfFor i AsInteger = 0To pivotGridControl1.RowCount - 1For j AsInteger = 0To pivotGridControl1.ColumnCount - 1Dim val AsObject = pivotGridControl1.GetCellValue(j, i)
IfNot(TypeOf val IsDecimal) ThenContinueForEndIfDim value AsDecimal = CDec(val)
Dim isGrandTotal AsBoolean = pivotGridControl1.GetFieldValueType(True, j) = FieldValueType.GrandTotal OrElse pivotGridControl1.GetFieldValueType(False, i) = FieldValueType.GrandTotal
If isGrandTotal ThenIf value > maxTotalValue Then
maxTotalValue = value
EndIfIf value < minTotalValue Then
minTotalValue = value
EndIfElseIf value > maxValue Then
maxValue = value
EndIfIf value < minValue Then
minValue = value
EndIfEndIfNext j
Next i
If minTotalValue = maxTotalValue Then
maxTotalValue += 1EndIfIf minValue = maxValue Then
maxValue += 1EndIf
maxMinCalculated = TrueEndSub' Resets the maximum and minimum summary and Grand Total values.PrivateSub ResetMaxMin()
minValue = Decimal.MaxValue
maxValue = Decimal.MinValue
minTotalValue = Decimal.MaxValue
maxTotalValue = Decimal.MinValue
maxMinCalculated = FalseEndSubEndClassEndNamespace
usingSystem;
usingSystem.Windows;
usingSystem.Windows.Media;
using CustomAppearance.DataSet1TableAdapters;
usingDevExpress.Xpf.PivotGrid;
namespaceCustomAppearance {
publicpartialclassMainWindow : Window {
DataSet1.SalesPersonDataTable salesPersonDataTable = new DataSet1.SalesPersonDataTable();
SalesPersonTableAdapter salesPersonDataAdapter = new SalesPersonTableAdapter();
decimal minValue, maxValue, minTotalValue, maxTotalValue;
bool maxMinCalculated;
publicMainWindow() {
InitializeComponent();
pivotGridControl1.DataSource = salesPersonDataTable;
}
voidWindow_Loaded(object sender, RoutedEventArgs e) {
salesPersonDataAdapter.Fill(salesPersonDataTable);
pivotGridControl1.CollapseAll();
}
// Handles the CustomCellAppearance event. Sets the current cell's foreground color// to a color generated in a custom manner.voidOnCustomAppearance(object sender, PivotCustomCellAppearanceEventArgs e) {
if(!(e.Value isdecimal)) return;
decimalvalue = (decimal)e.Value;
bool isGrandTotal = IsGrandTotal(e);
if(IsValueNotFit(value, isGrandTotal))
ResetMaxMin();
EnsureMaxMin();
if(IsValueNotFit(value, isGrandTotal))
return;
e.Foreground =
new SolidColorBrush(GetColorByValue(value, IsGrandTotal(e)));
}
boolIsValueNotFit(decimalvalue, bool isGrandToatl) {
if(isGrandToatl)
returnvalue < minTotalValue || value > maxTotalValue;
elsereturnvalue < minValue || value > maxValue;
}
voidOnGridLayout(object sender, RoutedEventArgs e) {
ResetMaxMin();
}
// Generates a custom color for a cell based on the cell value's share // in the maximum summary or total value (for summary and total cells),// or in the maximum Grand Total value (for Grand Total cells).Color GetColorByValue(decimalvalue, bool isGrandTotal) {
int variation;
if(isGrandTotal) {
variation =
Convert.ToInt32(510 * (value - minTotalValue) / (maxTotalValue - minTotalValue));
} else {
variation =
Convert.ToInt32(510 * (value - minValue) / (maxValue - minValue));
}
byte r, b;
if(variation >= 255) {
r = Convert.ToByte(510 - variation);
b = 255;
} else {
r = 255;
b = Convert.ToByte(variation);
}
return Color.FromRgb(r, 0, b);
}
boolIsGrandTotal(PivotCustomSummaryEventArgs e) {
return e.RowField == null || e.ColumnField == null;
}
boolIsGrandTotal(PivotCellBaseEventArgs e) {
return e.RowValueType == FieldValueType.GrandTotal ||
e.ColumnValueType == FieldValueType.GrandTotal;
}
// Calculates the maximum and minimum summary and Grand Total values.voidEnsureMaxMin() {
if(maxMinCalculated) return;
for(int i = 0; i < pivotGridControl1.RowCount; i++)
for(int j = 0; j < pivotGridControl1.ColumnCount; j++) {
object val = pivotGridControl1.GetCellValue(j, i);
if(!(val isdecimal)) continue;
decimalvalue = (decimal)val;
bool isGrandTotal =
pivotGridControl1.GetFieldValueType(true, j) == FieldValueType.GrandTotal ||
pivotGridControl1.GetFieldValueType(false, i) == FieldValueType.GrandTotal;
if(isGrandTotal) {
if(value > maxTotalValue)
maxTotalValue = value;
if(value < minTotalValue)
minTotalValue = value;
} else {
if(value > maxValue)
maxValue = value;
if(value < minValue)
minValue = value;
}
}
if(minTotalValue == maxTotalValue)
maxTotalValue++;
if(minValue == maxValue)
maxValue++;
maxMinCalculated = true;
}
// Resets the maximum and minimum summary and Grand Total values.voidResetMaxMin() {
minValue = decimal.MaxValue;
maxValue = decimal.MinValue;
minTotalValue = decimal.MaxValue;
maxTotalValue = decimal.MinValue;
maxMinCalculated = false;
}
}
}
Was this page helpful?
Thanks for your feedback!
How can we improve this help topic?
Additional comments/thoughts:
If you have any questions, submit a ticket to our Support Center.