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

mrhemp
Messages postés
40
Date d'inscription
dimanche 23 février 2003
Dernière intervention
24 février 2009
- 21 août 2006 à 11:08 - Dernière réponse : mrhemp
Messages postés
40
Date d'inscription
dimanche 23 février 2003
Dernière intervention
24 février 2009
- 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 

Votre réponse

12 réponses

Meilleure réponse
mrhemp
Messages postés
40
Date d'inscription
dimanche 23 février 2003
Dernière intervention
24 février 2009
- 8 sept. 2006 à 01:03
3
Merci
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

Merci mrhemp 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de mrhemp
chaibat05
Messages postés
1884
Date d'inscription
samedi 1 avril 2006
Dernière intervention
20 novembre 2007
- 21 août 2006 à 11:34
0
Merci
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
Messages postés
630
Date d'inscription
vendredi 5 mai 2006
Dernière intervention
17 février 2007
- 21 août 2006 à 20:06
0
Merci
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
Messages postés
553
Date d'inscription
jeudi 28 novembre 2002
Dernière intervention
2 octobre 2016
- 21 août 2006 à 23:29
0
Merci
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
Messages postés
1884
Date d'inscription
samedi 1 avril 2006
Dernière intervention
20 novembre 2007
- 22 août 2006 à 00:50
0
Merci
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
Messages postés
40
Date d'inscription
dimanche 23 février 2003
Dernière intervention
24 février 2009
- 28 août 2006 à 13:03
0
Merci
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
Messages postés
553
Date d'inscription
jeudi 28 novembre 2002
Dernière intervention
2 octobre 2016
- 8 sept. 2006 à 14:09
0
Merci
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
Messages postés
40
Date d'inscription
dimanche 23 février 2003
Dernière intervention
24 février 2009
- 8 sept. 2006 à 21:29
0
Merci
Tu le vois ce doigt?
Commenter la réponse de mrhemp
cs_Willi
Messages postés
2381
Date d'inscription
jeudi 12 juillet 2001
Dernière intervention
13 février 2015
- 8 sept. 2006 à 22:52
0
Merci
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
Messages postés
553
Date d'inscription
jeudi 28 novembre 2002
Dernière intervention
2 octobre 2016
- 9 sept. 2006 à 01:01
0
Merci
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
Messages postés
40
Date d'inscription
dimanche 23 février 2003
Dernière intervention
24 février 2009
- 9 sept. 2006 à 02:01
0
Merci
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
Messages postés
40
Date d'inscription
dimanche 23 février 2003
Dernière intervention
24 février 2009
- 9 sept. 2006 à 02:06
0
Merci
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.