2 votes

Persistance de l'ordre des colonnes du ListView

Existe-t-il une meilleure pratique concernant la sauvegarde/le chargement de l'état des colonnes d'un contrôle ListView ? Je voudrais me souvenir de l'ordre et de la taille des colonnes afin que le ListView reste toujours tel que l'utilisateur l'a personnalisé. Existe-t-il un moyen intégré de sérialiser/désérialiser la largeur et l'ordre des colonnes de ListView ? J'ai du mal à trouver la réponse sur Google.

1voto

John Arlen Points 4317

Il n'y a pas de moyen intégré. Extrayez les données et faites-les persister de la manière qui convient le mieux à votre application.

Les paramètres de configuration sont généralement les plus simples.

Meilleure pratique pour sauvegarder les paramètres de l'application dans une application Windows Forms

0voto

Grammarian Points 4085

ObjectListView -- une enveloppe open source autour d'une ListView WinForms .NET -- possède des méthodes pour faire persister l'état de la ListView. Jetez un coup d'œil à SaveState() y RestoreState() méthodes.

La stratégie générale est la suivante :

  1. Créer un objet qui contient l'état de la ListView .
  2. Sérialisez cet objet en utilisant un formateur pour une série d'octets.
  3. Persiste cette série d'octets
  4. Lors de la restauration, utilisez à nouveau le formateur pour gonfler les octets dans votre objet d'état.
  5. Rétablir l'état de la ListView de votre objet d'état

Pour sérialiser votre objet d'état, vous aurez besoin de quelque chose comme ceci :

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

Pour restaurer votre état :

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
}

Le seul point délicat est de rétablir l'ordre des colonnes. DisplayIndex est notoirement difficile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X