Transfert des données de datagridvew vers une autre datagridview [Résolu]

bouchrot 346 Messages postés mercredi 12 octobre 2011Date d'inscription 18 janvier 2017 Dernière intervention - 12 janv. 2017 à 10:31 - Dernière réponse : bouchrot 346 Messages postés mercredi 12 octobre 2011Date d'inscription 18 janvier 2017 Dernière intervention
- 13 janv. 2017 à 16:11
salut j'ai réussi a faire passer des lignes de datagridview vers une autre , le problème est que chaque ligne transféré se supprime de la premiere datagridview , je veux avaoir des checkbox sur ma premiere datagridview est pendans le transfert je veux que la les données reste aussi sur la preimere datagridview

merci
Afficher la suite 

33 réponses

Répondre au sujet
cs_Le Pivert 4770 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 14 décembre 2017 Dernière intervention - 12 janv. 2017 à 11:31
Commenter la réponse de cs_Le Pivert
bouchrot 346 Messages postés mercredi 12 octobre 2011Date d'inscription 18 janvier 2017 Dernière intervention - Modifié par bouchrot le 12/01/2017 à 11:55
0
Utile
ce transfert est automatique , moi je veux choisir quelles lignes a transferer , en plus je chercher une solution en vb.net pas en c# merci
Commenter la réponse de bouchrot
cs_Le Pivert 4770 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 14 décembre 2017 Dernière intervention - 12 janv. 2017 à 12:00
0
Utile
C'est du VB.NET
Montre nous le code que tu as fait
Commenter la réponse de cs_Le Pivert
bouchrot 346 Messages postés mercredi 12 octobre 2011Date d'inscription 18 janvier 2017 Dernière intervention - 12 janv. 2017 à 12:38
0
Utile
Dim i As Integer = DataGridView1.CurrentRow.Index

DataGridView2.Rows.Add(DataGridView1.Item(0, i).Value, DataGridView1.Item(1, i).Value, DataGridView1.Item(2, i).Value, DataGridView1.Item(3, i).Value, DataGridView1Item(4, i).Value)
Commenter la réponse de bouchrot
cs_Le Pivert 4770 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 14 décembre 2017 Dernière intervention - Modifié par cs_Le Pivert le 12/01/2017 à 13:04
0
Utile
Ce code fonctionne très bien, il faut juste le mettre sur une seule ligne comme ceci:

        Dim i As Integer = DataGridView1.CurrentRow.Index
        DataGridView2.Rows.Add(DataGridView1.Item(0, i).Value, DataGridView1.Item(1, i).Value, DataGridView1.Item(2, i).Value, DataGridView1.Item(3, i).Value, DataGridView1.Item(4, i).Value)

@+ Le Pivert
Commenter la réponse de cs_Le Pivert
bouchrot 346 Messages postés mercredi 12 octobre 2011Date d'inscription 18 janvier 2017 Dernière intervention - 12 janv. 2017 à 13:05
0
Utile
1
oui il fonctionne , mais moi je veux des checkbox sur la premiere datagridview , par exemple je suis 3 ou 4 ligne et les transferer dan s la 2 eme datagrid , merci
cs_Le Pivert 4770 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 14 décembre 2017 Dernière intervention - 12 janv. 2017 à 13:08
comme tu l'avais mis il ne fonctionnait pas!
Pour faire ce que tu veux, il faut faire une boucle sur les lignes sélectionnées.
Commenter la réponse de bouchrot
bouchrot 346 Messages postés mercredi 12 octobre 2011Date d'inscription 18 janvier 2017 Dernière intervention - 12 janv. 2017 à 13:19
0
Utile
je vous est écrit que j'ai réussi , je ne sais po comment la faire avec des checkbox , et j'en ai besoin
Commenter la réponse de bouchrot
cs_Le Pivert 4770 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 14 décembre 2017 Dernière intervention - 12 janv. 2017 à 13:55
0
Utile
Voici la boucle, je te laisse l'adapter, car tu as le numéro de ligne, c'est enfantin:

    For i As Integer = 0 To DataGridView1.RowCount - 1
            If DataGridView1.Item(5, i).Value = True Then  '5 colonne où se trouve le checkbox
                MsgBox(i) 'ligne
                '  ''' ici le code pour le traitement des ligne cochées
            End If
        Next

Commenter la réponse de cs_Le Pivert
bouchrot 346 Messages postés mercredi 12 octobre 2011Date d'inscription 18 janvier 2017 Dernière intervention - 12 janv. 2017 à 14:09
0
Utile


j'ai reçu ce problème
Commenter la réponse de bouchrot
bouchrot 346 Messages postés mercredi 12 octobre 2011Date d'inscription 18 janvier 2017 Dernière intervention - 12 janv. 2017 à 14:12
0
Utile


voila le form
Commenter la réponse de bouchrot
cs_Le Pivert 4770 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 14 décembre 2017 Dernière intervention - 12 janv. 2017 à 14:39
0
Utile
Tu mets ceci, si ce n'est pas opérationnel:


DataGridView1.MultiSelect = True



Ensuite ce code:


  For i As Integer = 0 To DataGridView1.RowCount - 1
            If DataGridView1.Item(0, i).Selected = True Then  '5 colonne où se trouve le checkbox
                MsgBox(i) 'ligne
                DataGridView2.Rows.Add(DataGridView1.Item(0, i).Value, DataGridView1.Item(1, i).Value, DataGridView1.Item(2, i).Value, DataGridView1.Item(3, i).Value, DataGridView1.Item(4, i).Value)
            End If
        Next


Et pour multisélectionner tu appuies sur la touche Ctrl de ton clavier

Voilà
Commenter la réponse de cs_Le Pivert
bouchrot 346 Messages postés mercredi 12 octobre 2011Date d'inscription 18 janvier 2017 Dernière intervention - 12 janv. 2017 à 14:54
0
Utile
je reçus toujours le meme message
Commenter la réponse de bouchrot
cs_Le Pivert 4770 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 14 décembre 2017 Dernière intervention - 12 janv. 2017 à 15:13
0
Utile
Chez moi le dernier code fonctionne très bien!

Mets en Haut en 1ère ligne :Option Strict Off

avec ce code:

  For i As Integer = 0 To DataGridView1.RowCount - 1
            If DataGridView1.Item(5, i).Value = True Then  '5 colonne où se trouve le checkbox
                MsgBox(i) 'ligne
                '  ''' ici le code pour le traitement des ligne cochées
            End If
        Next
Commenter la réponse de cs_Le Pivert
bouchrot 346 Messages postés mercredi 12 octobre 2011Date d'inscription 18 janvier 2017 Dernière intervention - 12 janv. 2017 à 16:38
0
Utile
5
je reçois tourjours la m erreur
vb95 1387 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 14 décembre 2017 Dernière intervention - 12 janv. 2017 à 17:49
bonjour
Dans quelle colonne de ta DataGridview1 se trouvent les checkbox ?
Montre nous la ligne de code où se produit l'erreur et quelle erreur exactement ?
Si l'erreur est identique à celle signalée au message n° 10
If DataGridView1.Item(5, i).Value = True Then
c'est que ce n'est pas la bonne colonne où se trouvent les checkbox ( il faut remplacer le 5 par le bon numéro de colonne : attention les colonnes commencent à 0 en VB net )
cs_Le Pivert 4770 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 14 décembre 2017 Dernière intervention > vb95 1387 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 14 décembre 2017 Dernière intervention - 12 janv. 2017 à 18:07
Bonjour VB95, dans le code que je lui est fourni et qui fonctionne

If DataGridView1.Item(0, i).Selected = True Then  


La colonne n'a aucune importance!

contrairement à celui-ci:

If DataGridView1.Item(5, i).Value = True Then  '5 colonne où se trouve le checkbox


où il est necessaire d'avoir la bonne colonne

@+ Le Pivert
vb95 1387 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 14 décembre 2017 Dernière intervention > cs_Le Pivert 4770 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 14 décembre 2017 Dernière intervention - 12 janv. 2017 à 18:19
exact cs_Le Pivert je n'avais pas fait attention
Bien le bonjour à toi et tous mes voeux pour 2017
cs_Le Pivert 4770 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 14 décembre 2017 Dernière intervention > vb95 1387 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 14 décembre 2017 Dernière intervention - 12 janv. 2017 à 18:37
Merci, meilleurs vœux pour toi aussi. Plein d'idées pour faire de nouveaux programmes.
bouchrot 346 Messages postés mercredi 12 octobre 2011Date d'inscription 18 janvier 2017 Dernière intervention - 12 janv. 2017 à 20:43
je vous est poster mon code , est des photo de la formes , en haut , je continue d'avoir la meme erreur , merci a tous
Commenter la réponse de bouchrot
cs_Le Pivert 4770 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 14 décembre 2017 Dernière intervention - 12 janv. 2017 à 18:39
0
Utile
Voici un exemple qui fonctionne.
Mettre 2 DataGridView et 1Button

Option Strict Off
Public Class Form1
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        '*******************************************************
        'on rempli la 1ère Datagridview
        '********************************************************
        'On met 5 colonnes
        DataGridView1.ColumnCount = 5
        'On colore les en-têtes, on met les fonts
        With DataGridView1.ColumnHeadersDefaultCellStyle
            .BackColor = Color.Navy
            .ForeColor = Color.White
            .Font = New Font(DataGridView1.Font, FontStyle.Bold)
        End With
        'on positionne la grille
        With DataGridView1
            Dim chk As New DataGridViewCheckBoxColumn()
            .Size = New Size(600, 220)
            .AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCellsExceptHeaders
            .ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single
            .CellBorderStyle = DataGridViewCellBorderStyle.Single
            .GridColor = Color.Black
            .RowHeadersVisible = False
            'On donne le nom des colonnes
            .Columns.Add(chk)
            chk.HeaderText = "checkbox"
            .Columns(0).Name = "Date"
            .Columns(1).Name = "Piste"
            .Columns(2).Name = "Titre"
            .Columns(3).Name = "Artiste"
            .Columns(4).Name = "Album"
            .Columns(5).DefaultCellStyle.Font = New Font(Me.DataGridView1.DefaultCellStyle.Font, FontStyle.Italic)
            .SelectionMode = DataGridViewSelectionMode.FullRowSelect
            .MultiSelect = True
            .Dock = DockStyle.Fill
        End With

        'Création d'un tableau de 5 strings pour chaque ligne
        Dim row0 As String() = {"11/22/1968", "29", "Revolution 9", "Beatles", "The Beatles [White Album]"}
        Dim row1 As String() = {"1960", "6", "Fools Rush In", "Frank Sinatra", "Nice 'N' Easy"}
        Dim row2 As String() = {"11/11/1971", "1", "One of These Days", "Pink Floyd", "Meddle"}
        Dim row3 As String() = {"1988", "7", "Where Is My Mind?", "Pixies", "Surfer Rosa"}
        Dim row4 As String() = {"5/1981", "9", "Can't Find My Mind", "Cramps", "Psychedelic Jungle"}
        Dim row5 As String() = {"6/10/2003", "13", "Scatterbrain. (As Dead As Leaves.)", "Radiohead", "Hail to the Thief"}
        Dim row6 As String() = {"6/30/1992", "3", "Dress", "P J Harvey", "Dry"}

        With Me.DataGridView1.Rows
            'Ajout de ligne
            .Add(row0)
            .Add(row1)
            .Add(row2)
            .Add(row3)
            .Add(row4)
            .Add(row5)
            .Add(row6)
        End With
        With Me.DataGridView1
            'Ordre des colonnes
            .Columns(0).DisplayIndex = 3
            .Columns(1).DisplayIndex = 4
            .Columns(2).DisplayIndex = 1
            .Columns(3).DisplayIndex = 2
            .Columns(4).DisplayIndex = 5
            .Columns(5).DisplayIndex = 0
        End With
        '*******************************************************
        'on rempli la 2ème Datagridview
        '********************************************************
        'On met 5 colonnes
        DataGridView2.ColumnCount = 5
        'On colore les en-têtes, on met les fonts
        With DataGridView2.ColumnHeadersDefaultCellStyle
            .BackColor = Color.Navy
            .ForeColor = Color.White
            .Font = New Font(DataGridView2.Font, FontStyle.Bold)
        End With
        'on positionne la grille
        With DataGridView2
            Dim chk As New DataGridViewCheckBoxColumn()
            .Size = New Size(600, 200)
            .AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCellsExceptHeaders
            .ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single
            .CellBorderStyle = DataGridViewCellBorderStyle.Single
            .GridColor = Color.Black
            .RowHeadersVisible = False
            'On donne le nom des colonnes
            .Columns.Add(chk)
            chk.HeaderText = "checkbox"
            .Columns(0).Name = "Date"
            .Columns(1).Name = "Piste"
            .Columns(2).Name = "Titre"
            .Columns(3).Name = "Artiste"
            .Columns(4).Name = "Album"
            .Columns(4).DefaultCellStyle.Font = New Font(Me.DataGridView2.DefaultCellStyle.Font, FontStyle.Italic)
            .SelectionMode = DataGridViewSelectionMode.FullRowSelect
            .MultiSelect = True
            ' .Dock = DockStyle.Fill                              (
        End With
        With Me.DataGridView2
            'Ordre des colonnes
            'Ordre des colonnes
            .Columns(0).DisplayIndex = 3
            .Columns(1).DisplayIndex = 4
            .Columns(2).DisplayIndex = 1
            .Columns(3).DisplayIndex = 2
            .Columns(4).DisplayIndex = 5
            .Columns(5).DisplayIndex = 0
        End With
    End Sub
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        For i As Integer = 0 To DataGridView1.RowCount - 1
            If DataGridView1.Item(5, i).Value = True Then  '5 colonne où se trouve le checkbox
                DataGridView2.Rows.Add(DataGridView1.Item(0, i).Value, DataGridView1.Item(1, i).Value, DataGridView1.Item(2, i).Value, DataGridView1.Item(3, i).Value, DataGridView1.Item(4, i).Value)
            End If
        Next
    End Sub
End Class


Voilà
Commenter la réponse de cs_Le Pivert
Whismeril 10552 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 14 décembre 2017 Dernière intervention - Modifié par Whismeril le 12/01/2017 à 19:46
0
Utile
Bonsoir

en bindant le premier Datagridview sur une source de données (dans mon exemple je prends une liste) et en bindant le second sur une requête de cette même source de données. ça marche aussi.`

Voir ici comment faire pour le binding.
Attention, dans ce cas il faut 2 bindingsources différents.

Ici la classe
Class DonneesBouchrot
    Public Sub New(ByVal LaQuantite As Integer, ByVal LeNumero As Integer, ByVal LeNom As String)
        Quantite = LaQuantite
        Numero = LeNumero
        Nom = LeNom
        ATransferer = False
    End Sub
    Public Property Quantite() As Integer

    Public Property Numero() As Integer

    Public Property Nom() As String

    Public Property ATransferer() As Boolean
End Class


Ici le code de ma form (pour mon test c'était Form4)
    Private mesDonnees As New List(Of DonneesBouchrot)()

    Private Sub Form4_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        mesDonnees.Add(New DonneesBouchrot(10, 1234, "1234"))
        mesDonnees.Add(New DonneesBouchrot(11, 5678, "5678"))
        mesDonnees.Add(New DonneesBouchrot(12, 9012, "9012"))
        mesDonnees.Add(New DonneesBouchrot(13, 3456, "3456"))
        mesDonnees.Add(New DonneesBouchrot(14, 7890, "7890"))
        mesDonnees.Add(New DonneesBouchrot(15, 1357, "1357"))
        mesDonnees.Add(New DonneesBouchrot(16, 2468, "2468"))
        mesDonnees.Add(New DonneesBouchrot(17, 3456, "3456"))

        DonneesBouchrotBindingSource.DataSource = mesDonnees'binding du 1er datagridview
    End Sub

    Private Sub dataGridView1_CellMouseUp(ByVal sender As Object, ByVal e As DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseUp
        If e.ColumnIndex = 0 Then'j'ai mis 0 car sur ton image la cellule avec les checkbox est la première, comme dit plus haut, si tu déplaces cette colonne, il faut mettre à jour l'index
            DataGridView1.EndEdit() 'force la fin d'édition de la cellule dès que la souris est relachée, sinon, il faut changer de cellule pour valider le changement de valeur.
        End If
    End Sub

    Private Sub dataGridView1_CellEndEdit(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit
        If e.ColumnIndex = 0 Then'même remarque
            donneesBouchrotBindingSourceTransfere.DataSource = mesDonnees.Where(Function(x) x.ATransferer)
        End If
    End Sub


A part le fait de remplir la liste (il faut de toute façon à un moment ou un autre remplir le datagridview), le code fonctionnel se limite à forcer la fin de l'édition de la cellule dés que le doigt lâche la souris et binder la requête sur le 2eme datagriview.

Quand j'étais petit, la mer Morte n'était que malade.
George Burns
Commenter la réponse de Whismeril
bouchrot 346 Messages postés mercredi 12 octobre 2011Date d'inscription 18 janvier 2017 Dernière intervention - 12 janv. 2017 à 20:48
0
Utile
oup , ça marche , j'ai fait comme pivert a dit

DataGridView1.MultiSelect = True

For i As Integer = 0 To DataGridView1.RowCount - 1
If DataGridView1.Item(0, i).Value = True Then '5 colonne où se trouve le checkbox
MsgBox(i) 'ligne
' ''' ici le code pour le traitement des ligne cochées
DataGridView2.Rows.Add(DataGridView1.Item(0, i).Value, DataGridView1.Item(1, i).Value, DataGridView1.Item(2, i).Value, DataGridView1.Item(3, i).Value, DataGridView1.Item(4, i).Value)
End If
Next
Commenter la réponse de bouchrot
bouchrot 346 Messages postés mercredi 12 octobre 2011Date d'inscription 18 janvier 2017 Dernière intervention - 12 janv. 2017 à 20:51
0
Utile
1
mais il ya des issues , comme par exemple , lorsque les données sont transférer vers la 2eme datagrid , les checkbox reste cocher dans la 1ere datagrid , et si je clique sur le bouton encore , les memes lignes se transfèrent dans la 2eme datagrid ,savez vous comment fixer ces issues , merci
Whismeril 10552 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 14 décembre 2017 Dernière intervention - 12 janv. 2017 à 23:07
avec ma méthode, il n'y a pas ce genre de problèmes
Commenter la réponse de bouchrot
bouchrot 346 Messages postés mercredi 12 octobre 2011Date d'inscription 18 janvier 2017 Dernière intervention - 12 janv. 2017 à 21:07
0
Utile
j'ai fait comme suit

DataGridView1.MultiSelect = True
Dim i As Integer
For i = 0 To DataGridView1.RowCount - 1
If DataGridView1.Item(0, i).Value = True Then '5 colonne où se trouve le checkbox
MsgBox(i) 'ligne
' ''' ici le code pour le traitement des ligne cochées
DataGridView2.Rows.Add(DataGridView1.Item(1, i).Value, DataGridView1.Item(2, i).Value, DataGridView1.Item(3, i).Value, DataGridView1.Item(4, i).Value, DataGridView1.Item(5, i).Value)
End If
DataGridView1.Item(0, i).Value = False
Next

comme ça les chekbox deviennent false apres le clique sur le bouton du transfert , maintenant je pense pour ne pas transferer les memes lignes , si qlq sait la solution , merci de m'aider
Commenter la réponse de bouchrot
cs_Le Pivert 4770 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 14 décembre 2017 Dernière intervention - 13 janv. 2017 à 07:54
0
Utile
C'est très simple, comme ceci:

   For i As Integer = 0 To DataGridView1.RowCount - 1
            If DataGridView1.Item(5, i).Value = True Then  '5 colonne où se trouve le checkbox
                DataGridView2.Rows.Add(DataGridView1.Item(0, i).Value, DataGridView1.Item(1, i).Value, DataGridView1.Item(2, i).Value, DataGridView1.Item(3, i).Value, DataGridView1.Item(4, i).Value)
                DataGridView1.Item(5, i).Value = False
                DataGridView1.Item(5, i).ReadOnly = True
            End If
        Next

Commenter la réponse de cs_Le Pivert

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.

transfert des données de datagridvew vers une autre datagridview - page 2