Déplacer les item d'un listview [Résolu]

mrhemp 40 Messages postés dimanche 23 février 2003Date d'inscription 24 février 2009 Dernière intervention - 21 août 2006 à 11:08 - Dernière réponse : mrhemp 40 Messages postés dimanche 23 février 2003Date d'inscription 24 février 2009 Dernière intervention
- 9 sept. 2006 à 02:06
Bonjours

J'ai une ListView dans mon programme avec une dizaine de colonne et la même quantité de lignes et j'aimerai pouvoir déplacer les lignes, les intervertir.

Je suis sur un programme de commande de marchandise et c'est afin de remettre les lignes de la commande dans le même ordre que sur la souche papier.

Merci à quiconque qui saurait comment faire la manipulation

Salutations
Afficher la suite 

12 réponses

Répondre au sujet
mrhemp 40 Messages postés dimanche 23 février 2003Date d'inscription 24 février 2009 Dernière intervention - 8 sept. 2006 à 01:03
+3
Utile
Voila, j y suis parvenu. Ca n'a pas été compliqué, mais je suis de plus en plus décu par l'ergonomie à chier des termes et des méthodes d'acces de vb.net, le soi disant language d'avnir qui procure de sacré retours en arrière...

A part ca ne regardez pas l'orthographe... j'espere que ca fera gagner du temps a certains!

'****************************************************************************

' BougerLignes [ Private Sub ]
'----------------------------------------
' Auteur : mrhemp
'
' Date : 05.08.2006
'
' Description : Cette fonction permet de monter ou descendre une ligne dans un
'                         listview.
'
' Paramètres : ByVal intDeplacement As Integer -> on donne -1 pour monter
'                                                                                                            1 pour descendre
'
' Retours : -
'
'
'******************************************************************
'----------------------------------------------------------------------------------------------
Private
Sub BougerLignes(
ByVal intDeplacement
As
Integer)

'Tableau qui stock temporairement les valeurs
Dim arr_Ligne(9)

'Récupère l'index de la ligne sélectionnée
Dim intPositionLigne
As
Integer

'variable de boucle
Dim intCpt
As
Integer

'Récupère localement le N° de ligne car une fois la ligne bougée,
'la valeurs sera de -1 et on ne pourra pas sélectionnel la ligne -1
intPositionLigne = m_indexLigneSelectionnee

With lswCommande

      'Parcours les 9 colones du listview
      For intCpt = 0
To 9

         'Récupère les valeurs des ncolonnes de la ligne sélectionnée
         arr_Ligne(intCpt) = .Items(intPositionLigne).SubItems(intCpt).Text

      Next

      'Parcours les 9 colones de la ligne "vidée"
      For intCpt = 0
To 9

         'Remplacement des données par celle de la ligne à intervertir
         .Items(intPositionLigne).SubItems(intCpt).Text = _
         .Items(intPositionLigne + intDeplacement).SubItems(intCpt).Text

      Next

      'Parcour les colonnes de la ligne de desination
      For intCpt = 0
To 9

         'Recopie les valeurs de la ligne que l'on voulait déplacer dans
         'sa nouvelle colonne
         .Items(intPositionLigne + intDeplacement).SubItems(intCpt).Text = arr_Ligne(intCpt)

      Next

      'Sélectionne la ligne que l'on vien de déplacer
      lswCommande.Items(intPositionLigne + intDeplacement).Selected =
True

      'Récupère l'index de la ligne selectionnée
      m_indexLigneSelectionnee = intPositionLigne + intDeplacement
      'ATTENTION: Entre les deux ligne précédente l'évenement 
      'lswCommande_SelectedIndexChanged s'execute et la variable globale de la
      'ligne sélectionnée est remise à zéro pour nouvelle écriture.
      'Or ici on la resélectionne. Donc on réassigne la valeur de la ligne.
End
With

End
Sub
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de mrhemp
chaibat05 1884 Messages postés samedi 1 avril 2006Date d'inscription 20 novembre 2007 Dernière intervention - 21 août 2006 à 11:34
0
Utile
Bonjour,
Je n' ai jamais envisagé cette possibilité, mais c' est en lisant
ta question qu' il m' est venue une idée.
Je te la soumet telle qu' elle et de manière brute.A toi de la develloper.


Elle se résume à un Coipier/Coller et se présenteraoit sous forme
d' une fonction dont les paramètres serait
 FirstRow= L' index de la ligne d' ou tu copies
 LastRow = L' index de la ligne d' ou tu colles


Dans le corps de la fonction
  -Tu sauvegardes les données de la FirstRow (dans un tableau par exemple)
  -Tu transfères les données de la LastRow vers la FirstRow
  -Tu transfères les données sauvées vers la LastRow


Pour les actions Copier et Coller tu définies une touche de fonction pour
chacune d' elle.
Exemple F5=Copier  .
                 F10=Coller.

-Tu sélectionnes une ligne
-Tu presses F5
-Tu vas vers l' autre ligne
-Tu presses F10

Bien sûr après F10 il faut tester si F5 a été pressée précédement.


Bon c' est une idée qui mérite peut être d' être étudiée.


chaibat
Commenter la réponse de chaibat05
Dolphin Boy 630 Messages postés vendredi 5 mai 2006Date d'inscription 17 février 2007 Dernière intervention - 21 août 2006 à 20:06
0
Utile
Salut, petit exemple d'échange entre la 1ère et la 2ème ligne d'une listview à 1 colonne :

Private Sub Command1_Click()
Dim save_nom As String
  save_nom = ListView1.ListItems(1).Text
  ListView1.ListItems(1).Text = ListView1.ListItems(2).Text
  ListView1.ListItems(2).Text = save_nom
End Sub

Je te laisse faire le reste.
Commenter la réponse de Dolphin Boy
troxsa 553 Messages postés jeudi 28 novembre 2002Date d'inscription 2 octobre 2016 Dernière intervention - 21 août 2006 à 23:29
0
Utile
Bonjour,


Dolphin Boy c'est bien quand tu as que 2 items mais quand tu en a 500 ça devien chaud a faire  non ?
Voila le code que j'aurais fait ! (attention il n'est pas obtimiser)


<hr />
For i As Integer = 0 To LV.Items.Count - 1
If LV.Items.Item(i).Selected = True Then
LV.Items.Insert(i + 2, LV.Items.Item(i).Text)
LV.Items.Item(i).Remove()
LV.Items.Item(i + 1).Selected = True
LV.Focus()
Return
End If
Next


<hr />
La listView1 que j'ai renomé Lv
La form que j'ai fait comporte qu'un bouton et une ListView (LV) et 5 Items

Cordialement,
http://www.troxsa.info/
Le site qui ne parle qu'un seul langage, visual basic 2005
Commenter la réponse de troxsa
chaibat05 1884 Messages postés samedi 1 avril 2006Date d'inscription 20 novembre 2007 Dernière intervention - 22 août 2006 à 00:50
0
Utile
Bonsoir tout le monde,
Cher Troxsa,
Il adit intervertir : Pour moi ça veut dire
  - Sélectionner une ligne
  - Aller vers une autre ligne 
  - L' insérer.
  Est- ce quand dans une boucle tu peux savoir quelle ligne va être
  intervertit avec quelle autre ? Je ne le penses pas.
  
   Quand au nombre de lignes, s' il trouve que c' est
   beaucoup, à moins d' inventer une boucle intelligente,
   je ne vois pas comment on peut faire ça d' un seul coup.

   Et combien même il pourrait le faire, comment il peut sauvegarder
   ce qu' il a fait. Si sa liste venait à se rafraichir il aura tout perdu.
   A mois de laisser sa liste ouverte tout le long de l' exécution de son prog,
   ou de sauvegarder le tri.Et ça c' est une autre pair de manche !
      

   chaibat
   
   
  
 
 
Commenter la réponse de chaibat05
mrhemp 40 Messages postés dimanche 23 février 2003Date d'inscription 24 février 2009 Dernière intervention - 28 août 2006 à 13:03
0
Utile
haa oki!Je vois l principe!
J sais pas pourquois j cherche des méthodes toutes faites...

Alors les 2 méthodes proposées sont à mélanger!

J'ai 10item par ligne j vais donc utiliser la boucle

Pour connaitre la ligne, simplement -->

lswCommande.Item(lswCommande.selectedItem).subitem(0).text

et en fait on sélectionne la ligne et avec un bouton updown on la déplace vers le haut ou vers le bas!

Merci a tous pour vos idées!
Commenter la réponse de mrhemp
troxsa 553 Messages postés jeudi 28 novembre 2002Date d'inscription 2 octobre 2016 Dernière intervention - 8 sept. 2006 à 14:09
0
Utile
C'est pas ce que fesais mon code ?
(il etait facilement adaptable a ce que tu voulais faire)
@+












http://www.troxsa.info/

Le site qui ne parle qu'un seul langage, visual basic 2005
Commenter la réponse de troxsa
mrhemp 40 Messages postés dimanche 23 février 2003Date d'inscription 24 février 2009 Dernière intervention - 8 sept. 2006 à 21:29
0
Utile
Tu le vois ce doigt?
Commenter la réponse de mrhemp
cs_Willi 2381 Messages postés jeudi 12 juillet 2001Date d'inscription 13 février 2015 Dernière intervention - 8 sept. 2006 à 22:52
0
Utile
Utilise un DataGridView sa sera beaucoup plus simple, tu peux déplacer des colonnes et des lignes (Par défaut il me semble que les propriétés répondant à ces 2 fonctions sont activées).
Commenter la réponse de cs_Willi
troxsa 553 Messages postés jeudi 28 novembre 2002Date d'inscription 2 octobre 2016 Dernière intervention - 9 sept. 2006 à 01:01
0
Utile
Doit le prendre plutot mal ce que tu viens de dire là ? "Tu le vois ce doigt? "
La prochaine fois tu sais ou te le foute le doigt quand tu auras besoin d'aide, j'te donne un indice c'est deriere toi au niveau du cul OK !!!!

http://www.troxsa.info/
Le site qui ne parle qu'un seul langage, visual basic 2005
Commenter la réponse de troxsa
mrhemp 40 Messages postés dimanche 23 février 2003Date d'inscription 24 février 2009 Dernière intervention - 9 sept. 2006 à 02:01
0
Utile
Vexouille, je ne me suis pas approproé ton idée merveilleuse que je salue d'ailleurs, mais je ne faisait que contribuer en offrant mes 30 minutes de recherche, de test de commentage et de finition qu'a nécécité la fonction... au cas ou quelqun en aurait besoin,

Alors merci de l'idée mais sur un ton moin audieux ça passe tout de suite mieux

Voila, et soit zen!
Commenter la réponse de mrhemp
mrhemp 40 Messages postés dimanche 23 février 2003Date d'inscription 24 février 2009 Dernière intervention - 9 sept. 2006 à 02:06
0
Utile
Et pour réponse à Willi, mon application fonctionne, pour certains formulaires avec des dataview datagrid dataAdapter etc, et l'autre avec les recodset et des listview classic.

Quand j'ai vu la merde que ca a été (avec vb.net2003) pour mettre en place tout cela, j'ai préferé prendre un listview pour la partie "centrale du programme".

Normalement avec un listview dans VB6 on pouvait faire des drag and drop facielemt d'après ce que j'ai lu, mais cela a disparu avec .net... d'ou le progès...

Merci quand meme pour ta suggestion!
Commenter la réponse de mrhemp

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.