2011-04-08 72 views
2

有關於保存/加載ListView控件的列狀態的最佳做法嗎?我想記住列的順序和大小,以便ListView始終保持爲用戶定製它的狀態。是否有一些內置的方式來序列化/反序列化ListView列的寬度和順序?我無法在Google上找到答案。堅持列表視圖列順序

回答

0

ObjectListView - 圍繞.NET的WinForms ListView的一個開放源代碼的包裝 - 有方法,堅持ListView控件的狀態。看看SaveState()RestoreState()方法。

一般的策略是:

  1. 創建包含ListView的狀態的對象。
  2. 序列化對象使用格式化,以一系列字節
  3. 的持久化的字節序列
  4. 恢復的時候,再次使用格式化的字節膨脹到你的狀態對象。
  5. 從狀態對象恢復ListView的狀態

要序列化的狀態對象,你需要這樣的事:

using (MemoryStream ms = new MemoryStream()) { 
    BinaryFormatter serializer = new BinaryFormatter(); 
    serializer.AssemblyFormat = FormatterAssemblyStyle.Simple; 
    serializer.Serialize(ms, listViewState); 
    return ms.ToArray(); 
} 

要恢復狀態:

using (MemoryStream ms = new MemoryStream(state)) { 
    BinaryFormatter deserializer = new BinaryFormatter(); 
    ListViewState listViewState; 
    try { 
     listViewState = deserializer.Deserialize(ms) as ListViewState; 
    } catch (System.Runtime.Serialization.SerializationException) { 
     return false; 
    } 
    // Restore state here 
} 

唯一棘手的問題是恢復列的順序。 DisplayIndex是臭名昭着的挑剔。