wpf-devexpress-dot-xpf-dot-pivotgrid-dot-pivotserializationoptions-2a1d260e.md
Gets or sets whether the groups that currently exist in the PivotGrid, but do not exist in a layout when it’s restored, should be retained. This is an attached property.
Namespace : DevExpress.Xpf.PivotGrid
Assembly : DevExpress.Xpf.PivotGrid.v25.2.dll
NuGet Package : DevExpress.Wpf.PivotGrid
See GetAddNewGroups(DependencyObject) and SetAddNewGroups(DependencyObject, Boolean).
| Type | Description |
|---|---|
| Boolean |
true to retain the groups that currently exist in the PivotGrid but don’t exist in the layout being restored; false to destroy these groups.
|
This option affects how the PivotGrid’s layout is restored. If the AddNewGroups property is set to true , the groups that exist in the current layout but do not exist in the layout being restored, will be retained. Otherwise, these groups will be destroyed.
To learn more, see Save and Restore Layout.
The example below shows how to manage the layout when you restore the Pivot Grid.
The example contains two Pivot Grid controls with the following fields:
The SaveLayout button uses the PivotGridControl.SaveLayoutToStream method to save the pivotGridControlOld layout to memory streams.
The RestoreLayout button uses the PivotGridControl.RestoreLayoutFromStream method to restore the saved layout to pivotGridControlNew.
The following options allows you to combine fields from different Pivot Grid controls on restore:
PivotSerializationOptions.AddNewFields set to true keeps the field in the pivotGridControlNew control when you restore the layout.
PivotSerializationOptions.RemoveOldFields set to false adds fields from pivotGridControlOld to pivotGridControlNew.
PivotSerializationOptions.AddNewGroups set to true keeps the Year-Quarter group of the pivotGridControlNew when you restore the layout.
PivotGridControl.LayoutUpgradeEvent event adds the Quantity field to pivotGridControlNew‘s data area when you restore the layout.
The following image shows the resulting layout when you save the pivotGridControlOld layout and restore it to pivotGridControlNew:
using DevExpress.Xpf.PivotGrid;
using System.IO;
using System.Windows;
namespace HowToSaveAndRestoreLayoutFromStream {
public partial class MainWindow : Window {
// Create a MemoryStream instance.
System.IO.Stream LayoutStream = new System.IO.MemoryStream();
public MainWindow() {
InitializeComponent();
PivotGridGroup group = pivotGridControlNew.Groups.Add(fieldYear, fieldMonth);
}
private void buttonSave_Click(object sender, RoutedEventArgs e) {
// Save the layout to a stream.
pivotGridControlOld.SaveLayoutToStream(LayoutStream);
}
private void buttonLoad_Click(object sender, RoutedEventArgs e) {
LayoutStream.Position = 0;
LayoutStream.Seek(0, SeekOrigin.Begin);
// Load the layout from the stream.
pivotGridControlNew.RestoreLayoutFromStream(LayoutStream);
}
private void pivotGridControlNew_LayoutUpgrade(object sender, PivotLayoutUpgradeEventArgs e) {
if (e.PreviousVersion == "1.0") {
var newField = new PivotGridField() {
DataBinding = new DataSourceColumnBinding("Quantity"),
Caption = "Quantity",
Name = "fieldQuantity",
Area = FieldArea.DataArea
};
pivotGridControlNew.Fields.Add(newField);
};
}
}
}
Imports DevExpress.Xpf.PivotGrid
Imports System.IO
Imports System.Windows
Namespace HowToSaveAndRestoreLayoutFromStream
Public Partial Class MainWindow
Inherits Window
' Create a MemoryStream instance.
Private LayoutStream As Stream = New MemoryStream()
Public Sub New()
Me.InitializeComponent()
Dim group As PivotGridGroup = Me.pivotGridControlNew.Groups.Add(Me.fieldYear, Me.fieldMonth)
End Sub
Private Sub buttonSave_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
' Save the layout to a stream.
Me.pivotGridControlOld.SaveLayoutToStream(LayoutStream)
End Sub
Private Sub buttonLoad_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
LayoutStream.Position = 0
LayoutStream.Seek(0, SeekOrigin.Begin)
' Load the layout from the stream.
Me.pivotGridControlNew.RestoreLayoutFromStream(LayoutStream)
End Sub
Private Sub pivotGridControlNew_LayoutUpgrade(ByVal sender As Object, ByVal e As PivotLayoutUpgradeEventArgs)
If Equals(e.PreviousVersion, "1.0") Then
Dim newField = New PivotGridField() With {.DataBinding = New DataSourceColumnBinding("Quantity"), .Caption = "Quantity", .Name = "fieldQuantity", .Area = FieldArea.DataArea}
Me.pivotGridControlNew.Fields.Add(newField)
End If
End Sub
End Class
End Namespace
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<dxpg:PivotGridControl Name="pivotGridControlOld"
DataSource="{Binding Path=Data, Source={StaticResource TypedSimpleSource}}"
DataProcessingEngine="Optimized"
dx:DXSerializer.LayoutVersion="1.0">
<dxpg:PivotGridControl.Fields>
<dxpg:PivotGridField Name="fieldCategory" Caption="Category" Area="RowArea">
<dxpg:PivotGridField.DataBinding>
<dxpg:DataSourceColumnBinding ColumnName="CategoryName"/>
</dxpg:PivotGridField.DataBinding>
</dxpg:PivotGridField>
<dxpg:PivotGridField Name="fieldExtendedPrice" Area="DataArea" CellFormat="c0">
<dxpg:PivotGridField.DataBinding>
<dxpg:DataSourceColumnBinding ColumnName="Extended Price"/>
</dxpg:PivotGridField.DataBinding>
</dxpg:PivotGridField>
</dxpg:PivotGridControl.Fields>
</dxpg:PivotGridControl>
<dxpg:PivotGridControl Grid.Row="1" Name="pivotGridControlNew"
DataSource="{Binding Path=Data, Source={StaticResource TypedSimpleSource}}"
DataProcessingEngine="Optimized"
dx:DXSerializer.LayoutVersion="2.0"
dxpg:PivotSerializationOptions.AddNewGroups="True"
dxpg:PivotSerializationOptions.AddNewFields="True"
dxpg:PivotSerializationOptions.RemoveOldFields="False"
LayoutUpgrade="pivotGridControlNew_LayoutUpgrade">
<dxpg:PivotGridControl.Fields>
<dxpg:PivotGridField Name="fieldYear" Area="ColumnArea" Caption="Year"
Group="{Binding ElementName=group}">
<dxpg:PivotGridField.DataBinding>
<dxpg:DataSourceColumnBinding ColumnName="OrderDate" GroupInterval="DateYear"/>
</dxpg:PivotGridField.DataBinding>
</dxpg:PivotGridField>
<dxpg:PivotGridField Name="fieldMonth" Area="ColumnArea" Caption="Month"
Group="{Binding ElementName=group}">
<dxpg:PivotGridField.DataBinding>
<dxpg:DataSourceColumnBinding ColumnName="OrderDate" GroupInterval="DateMonth"/>
</dxpg:PivotGridField.DataBinding>
</dxpg:PivotGridField>
</dxpg:PivotGridControl.Fields>
</dxpg:PivotGridControl>
<StackPanel Grid.Row="2" Orientation="Horizontal" >
<Button Name="buttonSave" Content="Save" Padding="8, 4, 8, 4"
Margin="4" Click="buttonSave_Click" ></Button>
<Button Name="buttonLoad" Content="Load" Padding="8, 4, 8, 4"
Margin="4" Click="buttonLoad_Click"></Button>
</StackPanel>
</Grid>
See Also
PivotSerializationOptions Class