Silverlight隔离存储和DevExpress网格

时间:2011-07-20 15:16:20

标签: silverlight settings devexpress isolatedstorage

DevExpress产品始终为坚持用户的喜好提供了良好的支持。我的DevExpress体验从早期的Delphi版本到现在的.Net版本,我已经看到了将设置保存到Windows注册表,XML和其他版本的选项。

我现在正在使用Silverlight DXGrid(2011年第1卷),将用户的自定义网格设置存储在独立存储中似乎很自然,因此它在会话之间保留。实现这一目标的最佳方法是什么?有内置的方式吗?如果我必须自己做,至少有一个对象代表我可以序列化的设置,还是我必须编写自己的序列化方案?

我查看了GridControlTableView类的文档,但没有找到实现此方法的内置方法(如WriteSettingsToIsolatedStorage()方法)。

1 个答案:

答案 0 :(得分:0)

在DevExpress的支持人员的帮助下,我发现this article描述了如何做我想做的事。

我使用下面的扩展方法将它带到了下一个级别,它使用网格名称来保存和恢复其布局。我可以拨打我想要的电话:

gridControl.SaveLayoutToIsolatedStorage();
gridControl.RestoreLayoutFromIsolatedStorage();

以下是代码:

public static class GridSettingsExtension
{
    private const string layoutFolderName = "dxGridLayout";
    private static readonly Func<GridControl, string> gridLayoutFile = g => g.Name + ".xml";

    public static bool IsLayoutSaved( this GridControl gridControl ) {
        var file = IsolatedStorageFile.GetUserStoreForApplication();
        var fullPath = Path.Combine( layoutFolderName, gridLayoutFile( gridControl ) );
        return file.FileExists( fullPath );
    }

    public static void SaveLayoutToIsolatedStorage( this GridControl gridControl ) {
        var file = IsolatedStorageFile.GetUserStoreForApplication();

        if( !file.DirectoryExists( layoutFolderName ) ) {
            file.CreateDirectory( layoutFolderName );
        }

        string fullPath = Path.Combine( layoutFolderName, gridLayoutFile( gridControl ) );
        using( var fs = file.CreateFile( fullPath ) ) {
            gridControl.SaveLayoutToStream( fs );
        }
    }

    public static void RestoreLayoutFromIsolatedStorage( this GridControl gridControl ) {
        var file = IsolatedStorageFile.GetUserStoreForApplication();
        var fullPath = Path.Combine( layoutFolderName, gridLayoutFile( gridControl ) );
        using( var fs = file.OpenFile( fullPath, FileMode.Open, FileAccess.Read ) ) {
            gridControl.RestoreLayoutFromStream( fs );
        }
    }
}