mrhemp
Messages postés40Date d'inscriptiondimanche 23 février 2003StatutMembreDernière intervention24 février 2009
-
21 août 2006 à 11:08
mrhemp
Messages postés40Date d'inscriptiondimanche 23 février 2003StatutMembreDernière intervention24 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
mrhemp
Messages postés40Date d'inscriptiondimanche 23 février 2003StatutMembreDernière intervention24 février 2009 8 sept. 2006 à 01:03
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
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 21 août 2006 à 11:34
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.
Dolphin Boy
Messages postés630Date d'inscriptionvendredi 5 mai 2006StatutMembreDernière intervention17 février 2007 21 août 2006 à 20:06
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
troxsa
Messages postés553Date d'inscriptionjeudi 28 novembre 2002StatutMembreDernière intervention 2 octobre 20161 21 août 2006 à 23:29
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 22 août 2006 à 00:50
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 !
cs_Willi
Messages postés2375Date d'inscriptionjeudi 12 juillet 2001StatutModérateurDernière intervention15 décembre 201822 8 sept. 2006 à 22:52
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).
troxsa
Messages postés553Date d'inscriptionjeudi 28 novembre 2002StatutMembreDernière intervention 2 octobre 20161 9 sept. 2006 à 01:01
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 !!!!
mrhemp
Messages postés40Date d'inscriptiondimanche 23 février 2003StatutMembreDernière intervention24 février 2009 9 sept. 2006 à 02:01
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
mrhemp
Messages postés40Date d'inscriptiondimanche 23 février 2003StatutMembreDernière intervention24 février 2009 9 sept. 2006 à 02:06
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...