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.
Réponses
Trop de publicités?
John Arlen
Points
4317
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 :
- Créer un objet qui contient l'état de la
ListView
. - Sérialisez cet objet en utilisant un formateur pour une série d'octets.
- Persiste cette série d'octets
- Lors de la restauration, utilisez à nouveau le formateur pour gonfler les octets dans votre objet d'état.
- 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.