This is a migrated thread and some comments may be shown as answers.

How do you persist between launching's of a WPF app?

8 Answers 302 Views
PersistenceFramework
This is a migrated thread and some comments may be shown as answers.
Toffer
Top achievements
Rank 2
Toffer asked on 25 Feb 2016, 11:27 PM
We meet again!  I've been figuring stuff out on my own pretty well for a few weeks without having to make any posts, but I'm stuck again...doh!

 

So I've seen the WPF demo app that shows how to use a PersistenceManager to save and load using a Stream.  The demo works well, I have no issues with it...however I modified it to do the saving and loading during the Loaded and Unloaded events, and when this line of code is executed, it throws a NullReferenceException...

this.stream.Position = 0L;

Which isn't shocking since I do not see anywhere that the Stream object is instantiated except when executing the line...

this.stream = manager.Save(this.gridView);

So...I'm getting the feeling that a PersistenceManger object wasn't intended to be used between launches of an app...or am I just not understanding something here?

 

 

 

 

 

 

adfad

8 Answers, 1 is accepted

Sort by
0
Toffer
Top achievements
Rank 2
answered on 26 Feb 2016, 05:26 PM

I found that I can get persisting between app launches working in the GridView demo if I use IsolatedStorageProvider instead of PersistenceManager and a Stream...however when I applied this to my own app, I'm getting odd results when trying to restore the column order.

If I reorder any of the columns, during the Load event where I'm using LoadFromStorage it loads up to the point where the first reordered column comes up then the grid stops being made and only the columns that came before the reordered column are displayed.

Here's the xaml and code behind for my control

001.<UserControl    x:Class="ThirdPartyOptic.QualificationListUserControl"
002.                xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
003.                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
004.                xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
005.                xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
006.                xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
007.                xmlns:local="clr-namespace:ThirdPartyOptic"
008.                mc:Ignorable="d"
009.                d:DesignHeight="300"
010.                d:DesignWidth="300">
011.    <telerik:RadBusyIndicator   IsIndeterminate="True"
012.                                x:Name="QualificationListRadBusyIndicator">
013.        <Grid Background="Transparent">
014.            <Grid.ColumnDefinitions>
015.                <ColumnDefinition Width="175" />
016.                <ColumnDefinition />
017.            </Grid.ColumnDefinitions>
018.            <Grid.RowDefinitions>
019.                <RowDefinition Height="50" />
020.                <RowDefinition />
021.                <RowDefinition Height="Auto" />
022.            </Grid.RowDefinitions>
023.            <TextBlock  FontSize="20"
024.                        FontWeight="Bold"
025.                        Grid.Column="1"
026.                        Grid.Row="0"
027.                        HorizontalAlignment="Left"
028.                        Margin="10"
029.                        Text="Qualification List"
030.                        VerticalAlignment="Center" />
031.            <telerik:RadButton  Click="ExportToExcelButton_Click"
032.                                Content="Export to Excel"
033.                                Grid.Column="1"
034.                                Grid.Row="0"
035.                                Height="30"
036.                                HorizontalAlignment="Right" Margin="5, 5, 5, 5"
037.                                VerticalAlignment="Center"
038.                                x:Name="ExportToExcelButton" />
039.            <Grid Background="Transparent"
040.                  Grid.Column="0"
041.                  Grid.Row="1">
042.                <Grid.RowDefinitions>
043.                    <RowDefinition Height="Auto" />
044.                    <RowDefinition Height="Auto" />
045.                </Grid.RowDefinitions>
046.                <TextBlock  FontWeight="Bold"
047.                            Grid.Row="0"
048.                            HorizontalAlignment="Center"
049.                            Text="Show / Hide Columns" />
050.                <ListBox    BorderBrush="Transparent"
051.                            Grid.Row="1"
052.                            ItemsSource="{Binding Columns, ElementName=QualificationListRadGridView}">
053.                    <ListBox.ItemTemplate>
054.                        <DataTemplate>
055.                            <CheckBox   Background="{Binding Header.Background}"
056.                                        IsChecked="{Binding IsVisible, Mode=TwoWay}">
057.                                <TextBlock  Background="{Binding Header.Background}"
058.                                            Text="{Binding Header.Text}"
059.                                            Width="140"/>
060.                            </CheckBox>
061.                        </DataTemplate>
062.                    </ListBox.ItemTemplate>
063.                </ListBox>
064.            </Grid>
065.            <telerik:RadGridView    AutoGenerateColumns="False"
066.                                    CanUserInsertRows="False"
067.                                    CanUserReorderColumns="True"
068.                                    CanUserResizeColumns="True"
069.                                    CanUserResizeRows="True"
070.                                    CanUserSelect="True"
071.                                    ColumnWidth="*"
072.                                    Filtered="QualificationListRadGridView_Filtered"
073.                                    Grid.Column="1"
074.                                    Grid.Row="1"
075.                                    RowEditEnded="QualificationListRadGridView_RowEditEnded"
076.                                    SelectionMode="Single"
077.                                    SelectionUnit="Cell"
078.                                    x:Name="QualificationListRadGridView" Loaded="QualificationListRadGridView_Loaded" telerik:PersistenceManager.StorageId="QualificationListRadGridView" Unloaded="QualificationListRadGridView_Unloaded">
079.                <telerik:RadGridView.Columns>
080.                    <telerik:GridViewComboBoxColumn DataMemberBinding="{Binding TestStatusName}">
081.                        <telerik:GridViewComboBoxColumn.Header>
082.                            <TextBlock Text="Status" />
083.                        </telerik:GridViewComboBoxColumn.Header>
084.                        <telerik:GridViewComboBoxColumn.Resources>
085.                            <Style TargetType="telerik:GridViewComboBoxColumn">
086.                                <Setter Property="IsComboBoxEditable"
087.                                        Value="True" />
088.                            </Style>
089.                        </telerik:GridViewComboBoxColumn.Resources>
090.                    </telerik:GridViewComboBoxColumn>
091.                    <telerik:GridViewDataColumn DataMemberBinding="{Binding TransceiverCompatibilityName}"
092.                                                IsReadOnly="True">
093.                        <telerik:GridViewDataColumn.Header>
094.                            <TextBlock  Background="Orange"
095.                                        Text="Compat" />
096.                        </telerik:GridViewDataColumn.Header>
097.                    </telerik:GridViewDataColumn>
098.                    <telerik:GridViewDataColumn DataMemberBinding="{Binding TransceiverFormFactorName}"
099.                                                IsReadOnly="True">
100.                        <telerik:GridViewDataColumn.Header>
101.                            <TextBlock  Background="Orange"
102.                                        Text="Form Factor" />
103.                        </telerik:GridViewDataColumn.Header>
104.                    </telerik:GridViewDataColumn>
105.                    <telerik:GridViewDataColumn DataMemberBinding="{Binding TransceiverSupplierName}"
106.                                                IsReadOnly="True">
107.                        <telerik:GridViewDataColumn.Header>
108.                            <TextBlock  Background="Orange"
109.                                        Text="Sup" />
110.                        </telerik:GridViewDataColumn.Header>
111.                    </telerik:GridViewDataColumn>
112.                    <telerik:GridViewDataColumn DataMemberBinding="{Binding TransceiverPartNumber}"
113.                                                IsReadOnly="True">
114.                        <telerik:GridViewDataColumn.Header>
115.                            <TextBlock  Background="Orange"
116.                                        Text="Part #" />
117.                        </telerik:GridViewDataColumn.Header>
118.                    </telerik:GridViewDataColumn>
119.                    <telerik:GridViewDataColumn DataMemberBinding="{Binding TransceiverRevision}"
120.                                                IsReadOnly="True">
121.                        <telerik:GridViewDataColumn.Header>
122.                            <TextBlock  Background="Orange"
123.                                        Text="Rev" />
124.                        </telerik:GridViewDataColumn.Header>
125.                    </telerik:GridViewDataColumn>
126.                    <telerik:GridViewDataColumn DataMemberBinding="{Binding TransceiverBreakoutMode}"
127.                                                IsReadOnly="True">
128.                        <telerik:GridViewDataColumn.Header>
129.                            <TextBlock  Background="Orange"
130.                                        Text="Breakout" />
131.                        </telerik:GridViewDataColumn.Header>
132.                    </telerik:GridViewDataColumn>
133.                    <telerik:GridViewDataColumn DataMemberBinding="{Binding SwitchModel}"
134.                                                IsReadOnly="True">
135.                        <telerik:GridViewDataColumn.Header>
136.                            <TextBlock  Background="Beige"
137.                                        Text="Model" />
138.                        </telerik:GridViewDataColumn.Header>
139.                    </telerik:GridViewDataColumn>
140.                    <telerik:GridViewDataColumn DataMemberBinding="{Binding SwitchSupplierName}"
141.                                                IsReadOnly="True">
142.                        <telerik:GridViewDataColumn.Header>
143.                            <TextBlock  Background="Beige"
144.                                        Text="Sup" />
145.                        </telerik:GridViewDataColumn.Header>
146.                    </telerik:GridViewDataColumn>
147.                    <telerik:GridViewComboBoxColumn DataMemberBinding="{Binding SwitchOSName}">
148.                        <telerik:GridViewComboBoxColumn.Header>
149.                            <TextBlock  Background="Beige"
150.                                        Text="Sup" />
151.                        </telerik:GridViewComboBoxColumn.Header>
152.                        <telerik:GridViewComboBoxColumn.Resources>
153.                            <Style TargetType="telerik:GridViewComboBoxColumn">
154.                                <Setter Property="IsComboBoxEditable"
155.                                        Value="True" />
156.                            </Style>
157.                        </telerik:GridViewComboBoxColumn.Resources>
158.                    </telerik:GridViewComboBoxColumn>
159.                    <telerik:GridViewDataColumn DataMemberBinding="{Binding ServerNetworkDeviceDisplayName}"
160.                                                IsReadOnly="True">
161.                        <telerik:GridViewDataColumn.Header>
162.                            <TextBlock  Background="Olive"
163.                                        Text="NIC/FPGA" />
164.                        </telerik:GridViewDataColumn.Header>
165.                    </telerik:GridViewDataColumn>
166.                    <telerik:GridViewDataColumn DataMemberBinding="{Binding ServerRecipe}"
167.                                                IsReadOnly="True">
168.                        <telerik:GridViewDataColumn.Header>
169.                            <TextBlock  Background="Olive"
170.                                        Text="Recipe" />
171.                        </telerik:GridViewDataColumn.Header>
172.                    </telerik:GridViewDataColumn>
173.                    <telerik:GridViewDataColumn DataMemberBinding="{Binding ServerSupplierName}"
174.                                                IsReadOnly="True">
175.                        <telerik:GridViewDataColumn.Header>
176.                            <TextBlock  Background="Olive"
177.                                        Text="Sup" />
178.                        </telerik:GridViewDataColumn.Header>
179.                    </telerik:GridViewDataColumn>
180.                    <telerik:GridViewComboBoxColumn DataMemberBinding="{Binding AssignedTo}">
181.                        <telerik:GridViewComboBoxColumn.Header>
182.                            <TextBlock Text="Assigned To" />
183.                        </telerik:GridViewComboBoxColumn.Header>
184.                        <telerik:GridViewComboBoxColumn.Resources>
185.                            <Style TargetType="telerik:GridViewComboBoxColumn">
186.                                <Setter Property="IsComboBoxEditable" Value="True" />
187.                            </Style>
188.                        </telerik:GridViewComboBoxColumn.Resources>
189.                    </telerik:GridViewComboBoxColumn>
190.                    <telerik:GridViewDataColumn DataMemberBinding="{Binding CertificationNumber}">
191.                        <telerik:GridViewDataColumn.Header>
192.                            <TextBlock Text="Cert #" />
193.                        </telerik:GridViewDataColumn.Header>
194.                    </telerik:GridViewDataColumn>
195.                    <telerik:GridViewDataColumn DataMemberBinding="{Binding Comments}">
196.                        <telerik:GridViewDataColumn.Header>
197.                            <TextBlock Text="Comments" />
198.                        </telerik:GridViewDataColumn.Header>
199.                    </telerik:GridViewDataColumn>
200.                    <telerik:GridViewHyperlinkColumn DataMemberBinding="{Binding TestResultLink}">
201.                        <telerik:GridViewHyperlinkColumn.Header>
202.                            <TextBlock Text="TR Link" />
203.                        </telerik:GridViewHyperlinkColumn.Header>
204.                    </telerik:GridViewHyperlinkColumn>
205.                    <telerik:GridViewDataColumn DataMemberBinding="{Binding LastUpdate}"
206.                                                IsReadOnly="True">
207.                        <telerik:GridViewDataColumn.Header>
208.                            <TextBlock Text="Last Update" />
209.                        </telerik:GridViewDataColumn.Header>
210.                    </telerik:GridViewDataColumn>
211.                    <telerik:GridViewDataColumn>
212.                        <telerik:GridViewDataColumn.Header>
213.                            <TextBlock Text="Row Cmds" />
214.                        </telerik:GridViewDataColumn.Header>
215.                        <telerik:GridViewDataColumn.CellTemplate>
216.                            <DataTemplate>
217.                                <telerik:RadButton  Click="DeleteRadButton_Click"
218.                                                    Content="Delete" />
219.                            </DataTemplate>
220.                        </telerik:GridViewDataColumn.CellTemplate>
221.                    </telerik:GridViewDataColumn>
222.                </telerik:RadGridView.Columns>
223.            </telerik:RadGridView>
224.            <telerik:RadDataPager   AutoEllipsisMode="Both"
225.                                    DisplayMode="All"
226.                                    Grid.Column="1"
227.                                    Grid.Row="2"                                   
228.                                    NumericButtonCount="10"
229.                                    PageSize="40"
230.                                    Source="{Binding Items, ElementName=QualificationListRadGridView}"
231.                                    VerticalAlignment="Bottom"
232.                                    x:Name="QualificationListRadDataPager" />
233.        </Grid>
234.    </telerik:RadBusyIndicator>
235.</UserControl>

 

001.namespace ThirdPartyOptic
002.{
003.    using Microsoft.Win32;
004.    using PhynetReporting;
005.    using System;
006.    using System.Collections.ObjectModel;
007.    using System.ComponentModel;
008.    using System.Configuration;
009.    using System.IO;
010.    using System.Linq;
011.    using System.Windows.Controls;
012.    using Telerik.Windows.Controls;
013.    using Telerik.Windows.Persistence;
014.    using Telerik.Windows.Persistence.Services;
015.    using Telerik.Windows.Persistence.Storage;
016.    using Telerik.Windows.PersistenceFramework;
017. 
018.    /// <summary>
019.    /// Interaction logic for QualificationListUserControl.xaml
020.    /// </summary>
021.    public partial class QualificationListUserControl : UserControl
022.    {
023.        public QualificationListUserControl()
024.        {
025.            InitializeComponent();
026. 
027.            if (DesignerProperties.GetIsInDesignMode(this))
028.                return;
029. 
030.            DataMaintenance = new DataMaintenance(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString);
031.            TransceiverToSwitchReporting = new TransceiverToSwitchReporting(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString);
032. 
033.            BackgroundWorker = new BackgroundWorker();
034.            BackgroundWorker.DoWork += BackgroundWorkerDoWork;
035.            BackgroundWorker.RunWorkerCompleted += BackgroundWorkerCompleted;
036.        }
037. 
038.        private Collection<string> AssignedToCollection { get; set; }
039. 
040.        /// <summary>
041.        /// background working thread
042.        /// </summary>
043.        private BackgroundWorker BackgroundWorker { get; set; }
044. 
045.        private DataMaintenance DataMaintenance { get; set; }
046. 
047.        private DateTime LastUpdate { get; set; }
048. 
049.        private Collection<string> SwitchOSNameCollection { get; set; }
050. 
051.        private Collection<string> TestStatusCollection { get; set; }
052. 
053.        private TransceiverToSwitchReporting TransceiverToSwitchReporting { get; set; }
054. 
055.        /// <summary>
056.        /// runs the background worker thread to which refreshes the data source
057.        /// for the control
058.        /// </summary>
059.        public void RefreshData()
060.        {
061.            if (!BackgroundWorker.IsBusy)
062.            {
063.                DateTime currentLastUpdate = DateTime.MinValue;
064.                var currentLastUpdateTimeResult = TransceiverToSwitchReporting.GetTransceiverSwitchQualificationListLastUpdateTime();
065. 
066.                if(!currentLastUpdateTimeResult.Result)
067.                {
068.                    Logging.LogMessage(currentLastUpdateTimeResult.Message, true);
069.                }
070.                else
071.                {
072.                    currentLastUpdate = currentLastUpdateTimeResult.Payload;
073.                }
074. 
075.                if (currentLastUpdate > LastUpdate)
076.                {
077.                    QualificationListRadBusyIndicator.IsBusy = true;
078.                    BackgroundWorker.RunWorkerAsync();
079.                }
080.            }
081.        }
082. 
083.        private void BackgroundWorkerDoWork(object sender, DoWorkEventArgs e)
084.        {
085.            var assignedToCollectionResult = TransceiverToSwitchReporting.GetTransceiverSwitchQualificationListAssignedToValues();
086. 
087.            if(!assignedToCollectionResult.Result)
088.            {
089.                string formattedMessage = string.Format(
090.                    "There was an error while communicating with the database.  Error from the Database: [{0}]",
091.                    assignedToCollectionResult.Message);
092.                Logging.LogMessage(formattedMessage, true);
093.            }
094.            else
095.            {
096.                AssignedToCollection = assignedToCollectionResult.Payload;
097.            }
098. 
099.            var switchOSNameCollectionResult = DataMaintenance.GetSwitchOSNames();
100. 
101.            if(!switchOSNameCollectionResult.Result)
102.            {
103.                string formattedMessage = string.Format(
104.                    "There was an error while communicating with the database.  Error from the Database: [{0}]",
105.                    switchOSNameCollectionResult.Message);
106.                Logging.LogMessage(formattedMessage, true);
107.            }
108.            else
109.            {
110.                SwitchOSNameCollection = switchOSNameCollectionResult.Payload;
111.            }
112. 
113.            var testStatusCollectionResult = TransceiverToSwitchReporting.GetTransceiverSwitchQualificationListTestStatusNames();
114. 
115.            if(!testStatusCollectionResult.Result)
116.            {
117.                string formattedMessage = string.Format(
118.                    "There was an error while communicating with the database.  Error from the Database: [{0}]",
119.                    testStatusCollectionResult.Message);
120.                Logging.LogMessage(formattedMessage, true);
121.            }
122.            else
123.            {
124.                TestStatusCollection = testStatusCollectionResult.Payload;
125.            }
126. 
127.            var qualificationListResult = TransceiverToSwitchReporting.GetTransceiverSwitchQualificationList();
128. 
129.            if (!qualificationListResult.Result)
130.            {
131.                string formattedMessage = string.Format(
132.                    "There was an error while communicating with the database.  Error from the Database: [{0}]",
133.                    qualificationListResult.Message);
134.                Logging.LogMessage(formattedMessage, true);
135.            }
136.            else
137.            {
138.                e.Result = qualificationListResult.Payload;
139.            }
140.        }
141. 
142.        private void BackgroundWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
143.        {
144.            Dispatcher.BeginInvoke(new Action<Collection<TransceiverSwitchQualificationListModel>>(RefreshQualificationListRadGridView), e.Result);
145.        }
146. 
147.        private void DeleteRadButton_Click(object sender, System.Windows.RoutedEventArgs e)
148.        {
149.            // delete it from the database
150.            TransceiverSwitchQualificationListModel selectedItem = (TransceiverSwitchQualificationListModel)((RadButton)e.Source).DataContext;
151.            TransceiverToSwitchReporting.RemoveTransceiverSwitchQualificationListItem(selectedItem);
152. 
153.            // delete it in the local cache
154.            ((ObservableCollection<TransceiverSwitchQualificationListModel>)QualificationListRadGridView.ItemsSource).Remove(selectedItem);
155.        }
156. 
157.        private void ExportToExcelButton_Click(object sender, System.Windows.RoutedEventArgs e)
158.        {
159.            var dialog = new SaveFileDialog()
160.            {
161.                DefaultExt = "xlsx",
162.                Filter = String.Format("(*.{0})|*.{1}", "xlsx", "xlsx")
163.            };
164. 
165.            if (dialog.ShowDialog() == true)
166.            {
167.                using (var stream = dialog.OpenFile())
168.                {
169.                    QualificationListRadGridView.ExportToXlsx(stream);
170.                }
171.            }
172.        }
173. 
174.        private void QualificationListRadGridView_Filtered(object sender, Telerik.Windows.Controls.GridView.GridViewFilteredEventArgs e)
175.        {
176.            if (e.ColumnFilterDescriptor.Column.UniqueName == "SwitchSupplierName")
177.            {
178.                Telerik.Windows.Controls.GridViewColumn switchOSColumn = QualificationListRadGridView.Columns["Switch.SwitchOS"];
179.                Telerik.Windows.Controls.GridView.IColumnFilterDescriptor switchOSFilterDescriptor = switchOSColumn.ColumnFilterDescriptor;
180. 
181.                switchOSFilterDescriptor.SuspendNotifications();
182.                switchOSFilterDescriptor.DistinctFilter.Clear();
183. 
184.                if (e.Added.Count<Telerik.Windows.Data.IFilterDescriptor>() > 0 || !string.IsNullOrEmpty((string)e.ColumnFilterDescriptor.FieldFilter.Filter1.Value))
185.                {
186.                    Collection<string> suppliersToFilter = new Collection<string>();
187. 
188.                    foreach(Telerik.Windows.Data.OperatorValueFilterDescriptorBase addedItem in e.Added)
189.                    {
190.                        suppliersToFilter.Add((string)addedItem.Value);
191.                    }
192. 
193.                    if(!string.IsNullOrEmpty((string)e.ColumnFilterDescriptor.FieldFilter.Filter1.Value.ToString()))
194.                    {
195.                        suppliersToFilter.Add((string)e.ColumnFilterDescriptor.FieldFilter.Filter1.Value);
196.                    }
197. 
198.                    foreach (var qualificationListItem in (Collection<TransceiverSwitchQualificationListModel>)switchOSColumn.DataControl.ItemsSource)
199.                    {
200.                        string switchOSSupplierName = ((TransceiverSwitchQualificationListModel)qualificationListItem).SwitchOSSupplierName;
201. 
202.                        if (suppliersToFilter.Contains(switchOSSupplierName))// == (string)e.ColumnFilterDescriptor.FieldFilter.Filter1.Value)
203.                        {
204.                            switchOSFilterDescriptor.DistinctFilter.AddDistinctValue(((TransceiverSwitchQualificationListModel)qualificationListItem).SwitchOSName);
205.                        }
206.                    }
207.                }
208. 
209.                switchOSFilterDescriptor.ResumeNotifications();
210.            }
211.        }
212. 
213.        private void QualificationListRadGridView_RowEditEnded(object sender, GridViewRowEditEndedEventArgs e)
214.        {
215.            // update it in the database
216.            TransceiverSwitchQualificationListModel selectedItem = (TransceiverSwitchQualificationListModel)e.NewData;
217.            TransceiverToSwitchReporting.UpdateTransceiverSwitchQualificationListItem(selectedItem);
218.        }
219. 
220.        private void RefreshQualificationListRadGridView(Collection<TransceiverSwitchQualificationListModel> qualificationList)
221.        {
222.            if (qualificationList != null)
223.            {
224.                LastUpdate = qualificationList.Select(ql => ql.LastUpdate).Max(ql => ql);
225.                QualificationListRadGridView.ItemsSource = new ObservableCollection<TransceiverSwitchQualificationListModel>(qualificationList);
226.                ((GridViewComboBoxColumn)QualificationListRadGridView.Columns["AssignedTo"]).ItemsSource = AssignedToCollection;
227.                ((GridViewComboBoxColumn)QualificationListRadGridView.Columns["SwitchOSName"]).ItemsSource = SwitchOSNameCollection;
228.                ((GridViewComboBoxColumn)QualificationListRadGridView.Columns["TestStatusName"]).ItemsSource = TestStatusCollection;
229.            }
230. 
231.            QualificationListRadBusyIndicator.IsBusy = false;
232.        }
233. 
234.        private void QualificationListRadGridView_Loaded(object sender, System.Windows.RoutedEventArgs e)
235.        {
236.            IsolatedStorageProvider storage = new IsolatedStorageProvider();
237.            storage.LoadFromStorage(new string[] { "QualificationListRadGridView" });
238.        }
239. 
240.        private void QualificationListRadGridView_Unloaded(object sender, System.Windows.RoutedEventArgs e)
241.        {
242.            IsolatedStorageProvider storage = new IsolatedStorageProvider();
243.            storage.SaveToStorage(new string[] { "QualificationListRadGridView" });
244.        }
245.    }
246.}

 

Any ideas on what could be going wrong?  I attached some pictures to give a better idea of what I'm talking about...  In the Before picture you can see I went to the Tab "Transceiver Switch Qualification List" and let it load.  Then I re-ordered the orange Part # and Sup columns as shown in the ColumnReorder.png file...then I switched tabs away, then back to the Qualification List to find what you see in the After picture.

0
Toffer
Top achievements
Rank 2
answered on 26 Feb 2016, 05:40 PM

a little more info...persisting the resizing of columns seems to work just fine...just re-ordering them messes things up.

Also...the "Delete" buttons at the end disappear after being restored.  Probably not directly related to the re-order issue...more than likely because it's a custom template and the IsolatedStorageProvider didn't know how to restore it...not that I know how to fix that, but that's my guess to what's going wrong.  :)

0
Toffer
Top achievements
Rank 2
answered on 01 Mar 2016, 06:48 AM
any thoughts on this from anyone?
0
Dinko | Tech Support Engineer
Telerik team
answered on 01 Mar 2016, 04:23 PM
Hi ,

We need more time to better check your scenario. We are going to contact you with more information about the case on the next business day.

Regards,
Dinko
Telerik
Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Feedback Portal and vote to affect the priority of the items
0
Accepted
Dinko | Tech Support Engineer
Telerik team
answered on 02 Mar 2016, 12:27 PM
Hello ,

Please, excuse us for the delayed answer.

We are not sure what is the reason causing the GridView not to load his columns and the Delete button no to restore because some of the classes in the provided code snippets are missing. You can send us an isolated project from you application so we can further test it on our side.

Keep in mind that the order of the columns is not preserved out of the box by the PersistenceManager. In order to save the ordering, you will need to implement a CustomPropertyProvider for the . You can find such implementation in the GridViewSerialization SDK example.

Regards,
Dinko
Telerik
Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Feedback Portal and vote to affect the priority of the items
0
Toffer
Top achievements
Rank 2
answered on 08 Mar 2016, 06:43 PM
I wasn't aware of the PersistenceManager not preserving column order.  I'll check out the SDK sample.  Thanks.  :)
0
Toffer
Top achievements
Rank 2
answered on 10 Mar 2016, 08:10 AM

You were totally right.  Once I created my own CustomPropertyProvider and pointed the PersistenceManager at it, the column order was preserved.  Thanks for that.

I typed up the experience on my blog which points out where I was getting confused from the documentation.  Please take a look to see if there's anything I misunderstood.

IsolatedStorageProvider v PersistenceManager: Dawn of Persistence

0
Dinko | Tech Support Engineer
Telerik team
answered on 14 Mar 2016, 04:33 PM
Hi Toffer,

We are glad to see that you explained the PersistenceFramework basics in your blog. As we can see the information is convenient and it will be useful for the developers that read your blog. As a token of gratitude for the time spent for creating this blog post, we have updated your Telerik points.

Regards,
Dinko
Telerik
Do you need help with upgrading your AJAX, WPF or WinForms project? Check the Telerik API Analyzer and share your thoughts.
Tags
PersistenceFramework
Asked by
Toffer
Top achievements
Rank 2
Answers by
Toffer
Top achievements
Rank 2
Dinko | Tech Support Engineer
Telerik team
Share this question
or