2011-04-08 7 views
2

저장/ListView 컨트롤의 열 상태로드에 관한 모범 사례가 있습니까? 열 순서와 크기를 기억하여 사용자가 사용자 정의한대로 ListView가 항상 유지되도록하고 싶습니다. ListView 열 너비와 순서를 serialize/deserialize하는 몇 가지 기본 제공 방법이 있습니까? Google에서 답을 찾는 데 문제가 있습니다.Persisting ListView 열 순서

답변

0

ObjectListView - 닷넷 윈폼의 ListView 주위에 오픈 소스 래퍼 - ListView에의 상태를 유지하는 방법이있다. SaveState()RestoreState() 방법을 살펴보십시오.

일반적인 전략은 다음과 같습니다

  1. ListView의 상태를 유지하는 객체를 생성합니다.
  2. 바이트
  3. 의 시리즈에 포매터를 사용하여 객체
  4. 직렬화 바이트
  5. 복원의 시리즈는, 당신의 상태 객체로 바이트를 팽창 다시 포맷을 사용하는 것이 지속.

    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 
    } 
    
    : 당신의 상태를 복원하려면

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

    : 당신의 상태 개체를 직렬화하기 위해이 같은 일을해야합니다

  • 은 상태 개체에서 ListView의 상태를 복원

    유일한 까다로운 비트는 열의 순서를 복원하는 것입니다. DisplayIndex은 악명이 높습니다.