保持ListView列顺序

时间:2011-04-08 17:22:17

标签: c# winforms listview

是否有关于保存/加载ListView控件列状态的最佳实践?我想记住列的顺序和大小,以便ListView始终保持为用户自定义它。是否有一些内置的方法来序列化/反序列化ListView列的宽度和顺序?我无法在Google上找到答案。

2 个答案:

答案 0 :(得分:1)

没有内置方式。提取数据并以对您的应用程序有意义的方式保留它。

配置设置通常最简单。

Best practice to save application settings in a Windows Forms Application

答案 1 :(得分:0)

ObjectListView - 围绕.NET WinForms ListView的开源包装器 - 具有持久保存ListView状态的方法。请查看SaveState()RestoreState()方法。

总体战略是:

  1. 创建一个包含ListView
  2. 状态的对象
  3. 使用格式化程序将该对象序列化为一系列字节
  4. 坚持那一系列字节
  5. 恢复时,再次使用格式化程序将字节膨胀到状态对象中。
  6. 从州对象
  7. 恢复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众所周知地挑剔。