Hi,
In Samples for Silverlight DV, for XamPivotGrid, there is a nice sample showing how to save and load views.
How do I save the settings class (SavedPivotGridView) to the database ?
I tried to serialize it as Xml, but it does't work (classes inside are not serializable). I also tried using PersistenceManager, but it didn't store the collections' content (Rows, Columns, Filters, Measures).
Thanks,
Alex
Dear Alex,
I'm in the middle of writing an article that extends the sample in question. It will also feature saving the data in a database. It is going to be ready in a few days. I'll post the link to the article here when it is done.
I hope that is not too late for you.
All the best,
Atanas Dyulgerov
Application developer in Product Guidance
Infragistics
Thanks Atanas, I'm waiting for your updated sample
Best regards :)
The article I mentioned is not yet ready, but the Silverlight sample that shows how to persist the data in the PivotGrid is ready.
I am attaching a solution that demonstrates how to save and load the states:
In the third case the only thing that you need to do in order to save the states in a database is to upload the byte array called savedBinaryData with the serialized result to the database. One way to do that is to use a WCF service. More on that in the coming article.
I hope that this is helpful. If you have any questions feel free to ask me!
P.S.
The solution comes with sample data generator, FlatDataSource that uses the generator and prepares a nice sample initial view, a custom class that represents each saved view (this is majorly different than the same class from the SamplesBrowser). This last class is also the one that we serialize. In the main page we have a number of buttons that trigger the different serializations and deserializations. The GroupBox class and the contents of the Themes folder implement a helper control to make the UI a bit more useful.
The two files that will help you most are MainPage.xaml.cs and SavedPivotGridView.cs
One more thing, the sample will look for the following assemblies:
The default location for those after you install the Silverlight NetAdvantage trial package is:
C:\Program Files (x86)\Infragistics\NetAdvantage 2010.2\Silverlight DV\Bin
If you have chosen a different location you have to update the references.
Thanks a lot Atanas
Hi Achim,
The problem is solved. The issue was in the save algorithm of the sample. I'm attaching the corrected version of the SavedPivotGridView class. After you extract the file just replace it in the original solution.
Nasko
Hi Atanas,
I am working with PivotGrid and in my application I save / load grid layout in / from xml file in the local folder. All looks good and I am using your example to save and load. There is one issue though. If columns, rows or measures on the grid on save in the specific order, this order is not perseved on load. As an example. If columns order on save is Distance, Km Per Liter, Usage, CO2, CO2e. After load from the file the order is CO2, CO2e, Km Per Liter, Distance, Usage. The same issue for rows and measures. Is ther any way to keep the order on load? Or any grid settings can help with this?
Thank you.
Irina
Actually, I have figure it out. In the Fill method:
// Preseving the order for Measures
foreach(string ms in this.Measures)
{
var f = pivotGrid.DataSource.Cube.Measures.Where(p => p.Name == ms.ToString());
if(f.Count() > 0)
IMeasure meas = f.First();
IMeasureViewModel mvm = pivotGrid.DataSource.CreateMeasureViewModel(meas);
pivotGrid.DataSource.Measures.Add(mvm);
}
//rows
foreach (string st in this.RowHierarchies)
foreach (IDimension dim in pivotGrid.DataSource.Cube.Dimensions)
var rows = dim.Hierarchies.Where(r => r.UniqueName == st);
if (rows.Count() > 0)
IFilterViewModel fvm = pivotGrid.DataSource.CreateFilterViewModel(rows.First());
pivotGrid.DataSource.Rows.Add(fvm);
//columns order
foreach (string st in this.ColumnHierarchies)
var colmns = dim.Hierarchies.Where(r => r.UniqueName == st);
if (colmns.Count() > 0)
IFilterViewModel fvm = pivotGrid.DataSource.CreateFilterViewModel(colmns.First());
pivotGrid.DataSource.Columns.Add(fvm);
Regards.