需求:显示的数据列表1、可以正常的拖拽显示每列的位置,2、对不同用户记录最后拖拽后的位置进行保存,下次登录时展示出来;
方案1、unload 时记录列的位置,存储到本地数据库中,再次登录时做相应的处理;
方案2、做独立存储,缓存最后的数据列顺序;再次登录时反射对应的文件,做列展示
独立存储是针对用户进行的,其将所需存储的数据存储于当前用户Documents目录下一个隐藏的文件夹中。独立存储主要进行两种操作,很明显一个是读取,另一个是写入,且两个操作分别应该在程序初始化与程序退出时进行。独立存储的操作由位于System.IO.IsolatedStorage命名空间的IsolatedStorageFile与IsolatedStorageFileStream来支持。
下面是相应代码:
/// <summary>
/// 缓存当前列顺序,做独立存储 IsolatedStorageFileStream 创建文件规则“用户名+当前界面枚举值”
/// </summary>
/// <param name="dataGrid">当前页面的列表控件 限DataGrid</param>
/// <param name="pagename">当前界面名称</param>
public static void CacheDisplayOrder(DataGrid dataGrid,string pagename)
{
IsolatedStorageFile isoFile = IsolatedStorageFile.GetUserStoreForAssembly();
using (IsolatedStorageFileStream isoStream = new
IsolatedStorageFileStream((UserHelper.CurrentUser.AccountName + pagename), FileMode.Create, isoFile))
{
int[] displayIndices = new int[dataGrid.Columns.Count];
for (int i = 0; i < dataGrid.Columns.Count; i++)
{
displayIndices[i] = dataGrid.Columns[i].DisplayIndex;
}
XmlSerializer ser = new XmlSerializer(typeof(int[]));
ser.Serialize(isoStream, displayIndices);
}
}
/// <summary>
/// 设置默认列顺序
/// </summary>
/// <param name="dataGrid">当前页面的列表控件 限DataGrid</param>
/// <param name="pagename">当前界面名称</param>
public static void SetDisplayOrder(DataGrid dataGrid, string pagename)
{
IsolatedStorageFile isoFile = IsolatedStorageFile.GetUserStoreForAssembly();
string[] fileNames = isoFile.GetFileNames("*");
bool found = false;
if (fileNames.Contains(UserHelper.CurrentUser.AccountName + pagename))
found = true;
if (!found) return;
using (IsolatedStorageFileStream isoStream = new
IsolatedStorageFileStream((UserHelper.CurrentUser.AccountName + pagename), FileMode.Open,
isoFile))
{
try
{
XmlSerializer ser = new XmlSerializer(typeof(int[]));
int[] displayIndicies =
(int[])ser.Deserialize(isoStream);
for (int i = 0; i < displayIndicies.Length; i++)
{
dataGrid.Columns[i].DisplayIndex = displayIndicies[i];
}
}
catch { }
}
}