IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

tri d'un objet dans une listview => mélange d'indices


Sujet :

VB.NET

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2004
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 57
    Points : 36
    Points
    36
    Par défaut tri d'un objet dans une listview => mélange d'indices
    Bonjour,

    je suis confronté à un problème de tri sur une listview à cases à cocher.

    Le contexte :

    J'appelle un Webservice qui me renvoie une liste d'Enseignes (j'ai crée une classe Enseigne avec l'id, le nom, et le webservice) que je stock dans une ArrayList()

    Je parcours cette ArrayList et je l'affiche dans une Listview. Lorsqu'on coche une enseigne, cela ramène la liste des établissements liés à cet enseigne.

    Le problème est que lorsque je tri, si je choisis une Enseigne X1, ça me ramène les établissements Y1.

    Comment faire pour maintenir les indices ?

    Voici le code de ma partie métier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    'On récupère la liste des enseignes auxquelles a accès l'utilisateur
    listeEnseignes = service.obtenirListeDesEnseignes(user)
     
    	If  listeEnseignes IsNot Nothing Then
     
    	     'debug.Print ("erreur code : " & listeEnseignes.erreurCode & " - Traitement Ok : " & listeEnseignes.traitementOk)
     
    		If listeEnseignes.traitementOk Then
     
    			If listeEnseignes.enseignes IsNot Nothing Then
     
    			       'pour la liste des enseignes
    			        For i = 0 To listeEnseignes.enseignes.Length - 1
    			        'Création d'un objet Enseigne
    				Dim UneEnseigne = New Enseigne
    				UneEnseigne.id = listeEnseignes.enseignes(i).idEnseigne
    				UneEnseigne.nom = listeEnseignes.enseignes(i).nomEnseigne
    				UneEnseigne.wsenseigne = listeEnseignes.enseignes(i)
    				'Qu'on ajoute à notre liste
    				myAL.Add(UneEnseigne)
     
    				Next
    			End If
    		End If
    	End If
    et voici le code de ma partie affichage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    'On ramène la liste des enseignes dans une array list composée d'objets Enseignes (id, nom, wsenseigne)
    	listeDesEnseignes = obtenirEnseigne (login,mdp)
    	If listeDesEnseignes IsNot Nothing Then
    	         'Pour chaque enseigne typé en Enseigne
     
    		For each enseigne as Enseigne in listeDesEnseignes
     
    			'	debug.print (i & " - " & listeDesEnseignes.Item(i).ToString & " --> " & enseigne.id & " " & enseigne.nom)
     
    			'Affichage ds la listeview
    			Me.listView1.Items.Add(enseigne.nom)
     
     
    		Next
     
    	End If
    pour le tri, j'ai suivi l'aide la MSDN : http://msdn.microsoft.com/fr-fr/libr...43(VS.80).aspx

    Merci

  2. #2
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 442
    Points
    4 442
    Par défaut tri d'un listview
    bonjour
    avec quoi travaille tu vs2005 ou vs2008? car listview a ete relooke en vs2008
    pour faire un tri c'est simple en vs2008.
    A moins qu tu t'est trompe de rubrique car l'onglet affiche vs2005.
    code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    'mets cette propriete.C'est le tri auto sur la colonne Items(pas subitems).
    'elle s'applique meme lorsqu'il y a ajout de nouveaux elements c.à.d que le tri 
    'est rafraichis constamment 
    ' Sort the items in the list in ascending order.
        listView1.Sorting = SortOrder.Ascending
     
    ' Sort the items in the list in descending order.
     listView1.Sorting = SortOrder.Descending
    On peut meme faire mieux ,des tris personnalises sur d'autres colonnes.Voici comment .
    Il suffit de rajouter cette classe qui implemente un tri suivant une colonne clique par l'utilisateur (tri manuel suivant un clic sur colonne choisi par user):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    'classe perso 
    ' Implemente le tri manual personnalise des items par  colonnes.
        Class ListViewItemComparer
            Implements IComparer
     
            Private col As Integer
     
            Public Sub New()
                col = 0
            End Sub
     
            Public Sub New(ByVal column As Integer)
                col = column
            End Sub
     
            Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer _
               Implements IComparer.Compare
                Return [String].Compare(CType(x, ListViewItem).SubItems(col).Text, CType(y, ListViewItem).SubItems(col).Text)
            End Function
        End Class
    'code de la forme qui l'utilise
    Imports System
    Imports System.Windows.Forms
    Imports System.Drawing
    Imports System.Collections
    Public Class ListViewSortForm
            Inherits Form
     
            Private listView1 As ListView
     
            Public Sub New()
                'Initialise le ListView .
                Me.listView1 = New ListView
     
                ' met le type de tri initial à aucun.
                Me.listView1.Sorting = SortOrder.None
                ' Desactive tri automatique pour activer le mode manual (click colonne).
                Me.listView1.View = View.Details
                ' ici remplir le listview.....
     
                ' Connecter le ListView.ColumnClick event à son  event handler  ColumnClick 
                AddHandler Me.listView1.ColumnClick, AddressOf ColumnClic   
         End Sub 'New
     
     
            ' ColumnClick event handler.
            Private Sub ColumnClick(ByVal o As Object, ByVal e As ColumnClickEventArgs)
                ' Set the ListViewItemSorter property to a new ListViewItemComparer 
                ' Setting this property immediately sorts the 
                ' ListView using the ListViewItemComparer object.
                Me.listView1.ListViewItemSorter = New ListViewItemComparer(e.Column)
            End Sub
     
        End Class
    bon code....

Discussions similaires

  1. Tri par ordre croissant dans une listview
    Par megamario dans le forum VB.NET
    Réponses: 26
    Dernier message: 09/07/2010, 10h01
  2. Sélectionner un objet dans une listview
    Par skypi dans le forum VB.NET
    Réponses: 0
    Dernier message: 13/08/2009, 16h23
  3. Tri dans une ListView
    Par essadiki_ista dans le forum VB.NET
    Réponses: 6
    Dernier message: 02/06/2007, 10h56
  4. [C#] Tri d'objet dans une ArrayList
    Par guillaume16 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 14/03/2006, 12h05
  5. [VB.NET] Objet .Tag dans une ListView
    Par Lois dans le forum Windows Forms
    Réponses: 7
    Dernier message: 12/10/2004, 16h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo