DragDrop sur Datagridview [Résolu]

Zayann 75 Messages postés mardi 22 avril 2008Date d'inscription 15 juillet 2015 Dernière intervention - 30 août 2008 à 14:14 - Dernière réponse : kinneri 51 Messages postés jeudi 14 octobre 2004Date d'inscription 3 septembre 2008 Dernière intervention
- 10 sept. 2008 à 13:49
Bonjour...

Je cherche à faire un glisser/déposer entre deux datagridview.
Avec l'aide j'ai réussi à saisir les données mais je n'arrive pas à les mettre dans mon deuxième datagridview...

   Private Sub datagridview1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DataGridView1.MouseDown
        DataGridView1.DoDragDrop(DataGridView1.Rows, DragDropEffects.Copy Or DragDropEffects.Move)
    End Sub

HELP please...
Afficher la suite 

13 réponses

Répondre au sujet
kinneri 51 Messages postés jeudi 14 octobre 2004Date d'inscription 3 septembre 2008 Dernière intervention - 2 sept. 2008 à 16:13
+3
Utile
ha bon,

c'est bizarre, je n'ai pas ce probleme.
il insere bien, la ligne demandé.
je poste ci dessous toute la source dans le cas ou tu aurais une erreur.
verifie que la zone est bien selectionné. je viens d'avoir le probleme, mais la zone n'etait pas selectionné comme il faut.
il faut faire 1 click avant sur la zone pour le selectionné.

Public

Class Form1

Dim data
As DataGridViewRow, hit

Private clickedCell
As DataGridViewCell 

Private
Sub DataGridView1_MouseDown(
ByVal sender
As
Object,
ByVal e
As System.Windows.Forms.MouseEventArgs)
Handles DataGridView1.MouseDown

If DataGridView1.CurrentCell.Value <>
""
ThenData = DataGridView1.Rows(DataGridView1.CurrentRow.Index).Clone()

' as DataGridViewRow;

Dim a

For i = 0
To Data.Cells.Count - 1a = DataGridView1.CurrentRow.Cells(i).Value

data.Cells(i).Value = a

DataGridView2.DoDragDrop(data, DragDropEffects.Copy)

Next

End
If

End
Sub

Private
Sub DataGridView2_DragDrop(
ByVal sender
As
Object,
ByVal e
As System.Windows.Forms.DragEventArgs)
Handles DataGridView2.DragDrop
'ByVal e As System.Windows.Forms.DragEventArgs

Dim clientPoint
As Point = DataGridView2.PointToClient(
New Point(e.X, e.Y))

Dim hit
As DataGridView.HitTestInfo = DataGridView2.HitTest(clientPoint.X, clientPoint.Y)

If hit.RowIndex <> -1
ThenDataGridView2.Rows.Insert(hit.RowIndex, data)

ElseDataGridView2.Rows.Add(data)

End
If

End
Sub

Private
Sub DataGridView2_DragOver(
ByVal sender
As
Object,
ByVal e
As System.Windows.Forms.DragEventArgs)
Handles DataGridView2.DragOvere.Effect = DragDropEffects.Copy

End
Sub

End

Class

A+
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de kinneri
kinneri 51 Messages postés jeudi 14 octobre 2004Date d'inscription 3 septembre 2008 Dernière intervention - 31 août 2008 à 00:16
0
Utile
bonsoir

voila une façon de faire un drag drop vers un datagrid

A+

Public IndexdInsertion
As
Integer

Private
Sub DataGridView1_MouseDown(
ByVal sender
As
Object,
ByVal e
As System.Windows.Forms.MouseEventArgs)
Handles DataGridView1.MouseDown

If DataGridView1.CurrentCell.Value <>
""
ThenDataGridView1.DoDragDrop(DataGridView1.CurrentCell.Value, DragDropEffects.Copy

Or DragDropEffects.Move)

End
If

End
Sub

Private
Sub DataGridView2_DragOver(
ByVal sender
As
Object,
ByVal e
As System.Windows.Forms.DragEventArgs)
Handles DataGridView2.DragOver

Dim aa =

GetType(System.String)

If
Not (e.Data.GetDataPresent(
GetType(System.String)))
Thene.Effect = DragDropEffects.None

Elsee.Effect = DragDropEffects.Copy

End
If

End
Sub

Private
Sub DataGridView2_DragDrop(
ByVal sender
As
Object,
ByVal e
As System.Windows.Forms.DragEventArgs)
Handles DataGridView2.DragDrop

Dim item
As
Object =
CType(e.Data.GetData(
GetType(System.String)), System.Object)DataGridView2.Rows.Insert(IndexdInsertion, item)

End
Sub
Commenter la réponse de kinneri
Zayann 75 Messages postés mardi 22 avril 2008Date d'inscription 15 juillet 2015 Dernière intervention - 31 août 2008 à 09:17
0
Utile
Merci beaucoup...

Deux petits problèmes...

La copie ne s'effectue que sur une des colonnes... Mes datagridview contiennent deux colonnes, une nom et une nombre.
Seul la colonne du nom se copie...

Autre petit problème il y a un décalage entre la sélection et le copie, je m'explique...
je dragdrop l'item 1, pas de problème.
je dragdrop l'item 2, nouvelle copie de l'item 1
je dragdrop l'item 3, copie de l'item 2
je dragdrop l'item 4, copie de l'item 3

Dans le désordre, l'ordre que je choisi est bien respecté mais le code copie systématiquement l'item 1 en premier...

Merci déja pour le code, c'est plus que ce que j'avais pu faire...
je vais le regarder en détaille

A +
Commenter la réponse de Zayann
kinneri 51 Messages postés jeudi 14 octobre 2004Date d'inscription 3 septembre 2008 Dernière intervention - 1 sept. 2008 à 12:24
0
Utile
Bonjour,

voici une methode pour dragdrop multi colonne

Public

Class Form1

Dim data
As DataGridViewRow

Private
Sub DataGridView1_MouseDown(
ByVal sender
As
Object,
ByVal e
As System.Windows.Forms.MouseEventArgs)
Handles DataGridView1.MouseDown

If DataGridView1.CurrentCell.Value <>
""
ThenData = DataGridView1.Rows(DataGridView1.CurrentRow.Index).Clone()

' as DataGridViewRow;

Dim a

For i = 0
To Data.Cells.Count - 1a = DataGridView1.CurrentRow.Cells(i).Value

data.Cells(i).Value = a

DataGridView2.DoDragDrop(data, DragDropEffects.Copy)

Next

End
If

End
Sub

Private
Sub DataGridView2_DragOver(
ByVal sender
As
Object,
ByVal e
As System.Windows.Forms.DragEventArgs)
Handles DataGridView2.DragOvere.Effect = DragDropEffects.Copy

End
Sub

Private
Sub DataGridView2_DragDrop(
ByVal sender
As
Object,
ByVal e
As System.Windows.Forms.DragEventArgs)
Handles DataGridView2.DragDrop

Dim clientPoint = DataGridView2.PointToClient(
New Point(e.X, e.Y))

Dim hit = DataGridView2.HitTest(e.X, e.Y)

If hit.RowIndex <> -1
ThenDataGridView2.Rows.Insert(hit.RowIndex, data)

ElseDataGridView2.Rows.Add(data)

End
If

End
SubEnd

Class

A+
Commenter la réponse de kinneri
Zayann 75 Messages postés mardi 22 avril 2008Date d'inscription 15 juillet 2015 Dernière intervention - 1 sept. 2008 à 15:11
0
Utile
Merci beaucoup, ça marche nickel, sauf le problème avec l'ordre de sélection...

En debuggant j'ai compris pourquoi...
la cellule par défaut est la cellule 0...
Or la routine de copie :

PrivateSub DataGridView1_MouseDown(
ByVal sender
AsObject,
ByVal e
As System.Windows.Forms.MouseEventArgs)
Handles DataGridView1.MouseDown
If DataGridView1.CurrentCell.Value <>
""ThenData = DataGridView1.Rows(DataGridView1.CurrentRow.Index).Clone()

' as DataGridViewRow;Dim a
For i = 0
To Data.Cells.Count - 1a = DataGridView1.CurrentRow.Cells(i).Value

data.Cells(i).Value = a

DataGridView2.DoDragDrop(data, DragDropEffects.Copy)

NextEndIfEndSub

met la cellule sélectionnée comme active que lors de la sortie de la routine...
Lors de la sélection, la routine active est toujours la précédente, tant que le bouton n'est pas relâché.
Commenter la réponse de Zayann
kinneri 51 Messages postés jeudi 14 octobre 2004Date d'inscription 3 septembre 2008 Dernière intervention - 1 sept. 2008 à 22:13
0
Utile
Bonsoir,

as tu tester la dernier version si dessus.?

car je n'ai pas ce probleme.

A+
Commenter la réponse de kinneri
Zayann 75 Messages postés mardi 22 avril 2008Date d'inscription 15 juillet 2015 Dernière intervention - 1 sept. 2008 à 22:51
0
Utile
Bonsoir...

Oui elle a été testé et fonctionne très bien, encore merci....

C'est vraiment un problème de focus sur la cellule...
la cellule choisie prend le focus mais à la fin de la procédure, le dragdrop se fait donc sur la cellule précédente - qui a encore le focus - ou sur la cellule 0 par défaut.

J'ai essayé de forcé le focus lorsque la souris passe sur une cellule mais cela n,e fonctionne pas...
Je vais refaire des test demain...

A +
Commenter la réponse de Zayann
kinneri 51 Messages postés jeudi 14 octobre 2004Date d'inscription 3 septembre 2008 Dernière intervention - 2 sept. 2008 à 06:14
0
Utile
bonjour,

ok, je vais voir pour qu'il se place a l'endroit ou la souris depose.

A+
Commenter la réponse de kinneri
Zayann 75 Messages postés mardi 22 avril 2008Date d'inscription 15 juillet 2015 Dernière intervention - 2 sept. 2008 à 08:28
0
Utile
Bonjour,
J'ai refait des test ce matin...

Effectivement, le focus devient actif sur la cellule voulue au moment du relâchement du bouton de la souris...
La seul solution que j'entrevoie est donc de donner le focus à la cellule lorsqu'elle est survolée par la souris (sans clic donc), peut être par un évennement : DataGridView1.CellMouseEnter...

Je vais encore essayé cette solution (hier soir c'était pas vraiment une réussite)...

A +
Commenter la réponse de Zayann
kinneri 51 Messages postés jeudi 14 octobre 2004Date d'inscription 3 septembre 2008 Dernière intervention - 2 sept. 2008 à 12:16
0
Utile
Bonjour,

colle ce code


Private
Sub DataGridView2_DragDrop(
ByVal sender
As
Object,
ByVal e
As System.Windows.Forms.DragEventArgs)
Handles DataGridView2.DragDrop
'ByVal e As System.Windows.Forms.DragEventArgs









Dim

clientPoint


As

Point = DataGridView2.PointToClient(


New

Point(e.X, e.Y))



Dim

hit


As

DataGridView.HitTestInfo = DataGridView2.HitTest(clientPoint.X, clientPoint.Y)



If

hit.RowIndex <> -1


Then


DataGridView2.Rows.Insert(hit.RowIndex, data)








Else


DataGridView2.Rows.Add(data)








End





If








End





Sub

cela devrait resoudre ton probleme.

A+
Commenter la réponse de kinneri
Zayann 75 Messages postés mardi 22 avril 2008Date d'inscription 15 juillet 2015 Dernière intervention - 2 sept. 2008 à 12:28
0
Utile
Merci mais, le problème viens de datagridview1, pas de datagridview2...

Je n'ai pas du bien expliquer...

Le problème n'est pas à l'insertion de la ligne mais à la saisie dans le datagridview1,...

Merci quand même pour la réponse rapide, je vais regarder en détail ton code...

A +
Commenter la réponse de Zayann
Zayann 75 Messages postés mardi 22 avril 2008Date d'inscription 15 juillet 2015 Dernière intervention - 10 sept. 2008 à 12:41
0
Utile
Bonjour...

Désolé pour la réponse tardive... Petits problèmes de système...

Effectivement, ça marche bien, j'ai du faire quelques erreurs...
Merci pour tout...

A bientôt peut -être...
Commenter la réponse de Zayann
kinneri 51 Messages postés jeudi 14 octobre 2004Date d'inscription 3 septembre 2008 Dernière intervention - 10 sept. 2008 à 13:49
0
Utile
Bonjour,

il n'y a pas de souci.


A bientot


 
Commenter la réponse de kinneri

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.