Field values' collapsed states can be restored only in the same layout they have been saved in. This example shows how to save and load a control's layout together with collapsed states to ensure that the states are loaded in the appropriate layout.
using System;
using System.IO;
using System.Web.UI;
using DevExpress.Utils;
using DevExpress.Web.ASPxPivotGrid;
namespace ASPxPivotGrid_SaveLoadCollapsedState {
public partial class _Default : Page {
protected void btnSave_Click(object sender, EventArgs e) {
Session["Layout"] = ASPxPivotGrid1.SaveLayoutToString( PivotGridWebOptionsLayout.DefaultLayout );
MemoryStream collapseStateStream = (MemoryStream)(Session["CollapseStateStream"]);
if (collapseStateStream != null) {
collapseStateStream.Dispose();
}
collapseStateStream = new MemoryStream();
ASPxPivotGrid1.SaveCollapsedStateToStream(collapseStateStream);
Session["CollapseStateStream"] = collapseStateStream;
}
protected void btnLoad_Click(object sender, EventArgs e) {
MemoryStream collapseStateStream = (MemoryStream)(Session["CollapseStateStream"]);
string layout = (string)(Session["Layout"]);
if (layout == null ||
collapseStateStream == null) {
return;
}
ASPxPivotGrid1.LoadLayoutFromString(layout, PivotGridWebOptionsLayout.DefaultLayout );
collapseStateStream.Seek(0, SeekOrigin.Begin);
ASPxPivotGrid1.LoadCollapsedStateFromStream(collapseStateStream);
}
protected void btnClear_Click(object sender, EventArgs e) {
ASPxPivotGrid1.Fields.Clear();
}
}
}
<%@ Page Language="C#" AutoEventWireup="true" Codebehind="Default.aspx.cs"
Inherits="ASPxPivotGrid_SaveLoadCollapsedState._Default" %>
<%@ Register Assembly="DevExpress.Web.v13.1, Version=13.1.8.0,
Culture=neutral, PublicKeyToken=b88d1754d700e49a"
Namespace="DevExpress.Web.ASPxEditors"
TagPrefix="dx" %>
<%@ Register Assembly="DevExpress.Web.ASPxPivotGrid.v13.1, Version=13.1.8.0,
Culture=neutral, PublicKeyToken=b88d1754d700e49a"
Namespace="DevExpress.Web.ASPxPivotGrid"
TagPrefix="dx" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<table>
<tbody>
<tr>
<td>
<dx:ASPxButton ID="btnSave" runat="server" Text="Save"
OnClick="btnSave_Click" />
</td>
<td>
<dx:ASPxButton ID="btnLoad" runat="server" Text="Load"
OnClick="btnLoad_Click" />
</td>
<td>
<dx:ASPxButton ID="btnClear" runat="server" Text="Clear"
OnClick="btnClear_Click" />
</td>
</tr>
</tbody>
</table>
<dx:ASPxPivotGrid ID="ASPxPivotGrid1" runat="server" DataSourceID="AccessDataSource1"
Width="677px" OptionsView-ShowHorizontalScrollBar="true">
<Fields>
<dx:PivotGridField ID="fieldProductName" Area="RowArea" AreaIndex="0"
Caption="Product Name" FieldName="ProductName">
</dx:PivotGridField>
<dx:PivotGridField ID="fieldYear" Area="ColumnArea" AreaIndex="0" Caption="Year"
FieldName="OrderDate" GroupIndex="0" GroupInterval="DateYear"
InnerGroupIndex="0" UnboundFieldName="fieldYear">
</dx:PivotGridField>
<dx:PivotGridField ID="fieldExtendedPrice" Area="DataArea" AreaIndex="0"
Caption="Extended Price" FieldName="ExtendedPrice">
</dx:PivotGridField>
<dx:PivotGridField ID="fieldQuantity" Area="DataArea" AreaIndex="1"
Caption="Quantity" FieldName="Quantity">
</dx:PivotGridField>
<dx:PivotGridField ID="fieldMonth" Area="ColumnArea" AreaIndex="2" Caption="Month"
FieldName="OrderDate" GroupIndex="0" InnerGroupIndex="2"
GroupInterval="DateMonth" UnboundFieldName="fieldMonth">
</dx:PivotGridField>
<dx:PivotGridField ID="fieldQuarter" Area="ColumnArea" AreaIndex="1"
Caption="Quarter" FieldName="OrderDate" GroupIndex="0"
GroupInterval="DateQuarter" InnerGroupIndex="1"
UnboundFieldName="fieldQuarter">
</dx:PivotGridField>
</Fields>
<Groups>
<dx:PivotGridWebGroup />
</Groups>
</dx:ASPxPivotGrid>
<asp:AccessDataSource ID="AccessDataSource1" runat="server" DataFile="~/nwind.mdb"
SelectCommand="SELECT [ProductName], [ExtendedPrice], [Quantity],
[OrderDate] FROM [Invoices]">
</asp:AccessDataSource>
</div>
</form>
</body>
</html>
<%@ Page Language="vb" AutoEventWireup="true" Codebehind="Default.aspx.vb"
Inherits="ASPxPivotGrid_SaveLoadCollapsedState._Default" %>
<%@ Register Assembly="DevExpress.Web.v13.1, Version=13.1.8.0,
Culture=neutral, PublicKeyToken=b88d1754d700e49a"
Namespace="DevExpress.Web.ASPxEditors"
TagPrefix="dx" %>
<%@ Register Assembly="DevExpress.Web.ASPxPivotGrid.v13.1, Version=13.1.8.0,
Culture=neutral, PublicKeyToken=b88d1754d700e49a"
Namespace="DevExpress.Web.ASPxPivotGrid"
TagPrefix="dx" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<table>
<tbody>
<tr>
<td>
<dx:ASPxButton ID="btnSave" runat="server" Text="Save"
OnClick="btnSave_Click" />
</td>
<td>
<dx:ASPxButton ID="btnLoad" runat="server" Text="Load"
OnClick="btnLoad_Click" />
</td>
<td>
<dx:ASPxButton ID="btnClear" runat="server" Text="Clear"
OnClick="btnClear_Click" />
</td>
</tr>
</tbody>
</table>
<dx:ASPxPivotGrid ID="ASPxPivotGrid1" runat="server" DataSourceID="AccessDataSource1"
Width="677px" OptionsView-ShowHorizontalScrollBar="true">
<Fields>
<dx:PivotGridField ID="fieldProductName" Area="RowArea" AreaIndex="0"
Caption="Product Name" FieldName="ProductName">
</dx:PivotGridField>
<dx:PivotGridField ID="fieldYear" Area="ColumnArea" AreaIndex="0" Caption="Year"
FieldName="OrderDate" GroupIndex="0" GroupInterval="DateYear"
InnerGroupIndex="0" UnboundFieldName="fieldYear">
</dx:PivotGridField>
<dx:PivotGridField ID="fieldExtendedPrice" Area="DataArea" AreaIndex="0"
Caption="Extended Price" FieldName="ExtendedPrice">
</dx:PivotGridField>
<dx:PivotGridField ID="fieldQuantity" Area="DataArea" AreaIndex="1"
Caption="Quantity" FieldName="Quantity">
</dx:PivotGridField>
<dx:PivotGridField ID="fieldMonth" Area="ColumnArea" AreaIndex="2" Caption="Month"
FieldName="OrderDate" GroupIndex="0" InnerGroupIndex="2"
GroupInterval="DateMonth" UnboundFieldName="fieldMonth">
</dx:PivotGridField>
<dx:PivotGridField ID="fieldQuarter" Area="ColumnArea" AreaIndex="1"
Caption="Quarter" FieldName="OrderDate" GroupIndex="0"
GroupInterval="DateQuarter" InnerGroupIndex="1"
UnboundFieldName="fieldQuarter">
</dx:PivotGridField>
</Fields>
<Groups>
<dx:PivotGridWebGroup />
</Groups>
</dx:ASPxPivotGrid>
<asp:AccessDataSource ID="AccessDataSource1" runat="server" DataFile="~/nwind.mdb"
SelectCommand="SELECT [ProductName], [ExtendedPrice], [Quantity],
[OrderDate] FROM [Invoices]">
</asp:AccessDataSource>
</div>
</form>
</body>
</html>
Imports Microsoft.VisualBasic
Imports System
Imports System.IO
Imports System.Web.UI
Imports DevExpress.Utils
Imports DevExpress.Web.ASPxPivotGrid
Namespace ASPxPivotGrid_SaveLoadCollapsedState
Partial Public Class _Default
Inherits Page
Protected Sub btnSave_Click(ByVal sender As Object, ByVal e As EventArgs)
Session("Layout") = ASPxPivotGrid1.SaveLayoutToString(PivotGridWebOptionsLayout.DefaultLayout)
Dim collapseStateStream As MemoryStream = CType(Session("CollapseStateStream"), MemoryStream)
If collapseStateStream IsNot Nothing Then
collapseStateStream.Dispose()
End If
collapseStateStream = New MemoryStream()
ASPxPivotGrid1.SaveCollapsedStateToStream(collapseStateStream)
Session("CollapseStateStream") = collapseStateStream
End Sub
Protected Sub btnLoad_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim collapseStateStream As MemoryStream = CType(Session("CollapseStateStream"), MemoryStream)
Dim layout As String = CStr(Session("Layout"))
If layout Is Nothing OrElse collapseStateStream Is Nothing Then
Return
End If
ASPxPivotGrid1.LoadLayoutFromString(layout, PivotGridWebOptionsLayout.DefaultLayout)
collapseStateStream.Seek(0, SeekOrigin.Begin)
ASPxPivotGrid1.LoadCollapsedStateFromStream(collapseStateStream)
End Sub
Protected Sub btnClear_Click(ByVal sender As Object, ByVal e As EventArgs)
ASPxPivotGrid1.Fields.Clear()
End Sub
End Class
End Namespace