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

Signaler
Messages postés
352
Date d'inscription
mercredi 12 octobre 2011
Statut
Membre
Dernière intervention
18 juillet 2020
-
Messages postés
352
Date d'inscription
mercredi 12 octobre 2011
Statut
Membre
Dernière intervention
18 juillet 2020
-
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
A voir également:

25 réponses

Messages postés
7346
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
22 avril 2021
122
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
Messages postés
352
Date d'inscription
mercredi 12 octobre 2011
Statut
Membre
Dernière intervention
18 juillet 2020
2
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
Messages postés
7346
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
22 avril 2021
122
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.
Messages postés
7346
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
22 avril 2021
122
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

Messages postés
7346
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
22 avril 2021
122
Messages postés
352
Date d'inscription
mercredi 12 octobre 2011
Statut
Membre
Dernière intervention
18 juillet 2020
2
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
Messages postés
7346
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
22 avril 2021
122
C'est du VB.NET
Montre nous le code que tu as fait
Messages postés
352
Date d'inscription
mercredi 12 octobre 2011
Statut
Membre
Dernière intervention
18 juillet 2020
2
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)
Messages postés
352
Date d'inscription
mercredi 12 octobre 2011
Statut
Membre
Dernière intervention
18 juillet 2020
2
je vous est écrit que j'ai réussi , je ne sais po comment la faire avec des checkbox , et j'en ai besoin
Messages postés
352
Date d'inscription
mercredi 12 octobre 2011
Statut
Membre
Dernière intervention
18 juillet 2020
2


j'ai reçu ce problème
Messages postés
352
Date d'inscription
mercredi 12 octobre 2011
Statut
Membre
Dernière intervention
18 juillet 2020
2


voila le form
Messages postés
7346
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
22 avril 2021
122
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à
Messages postés
352
Date d'inscription
mercredi 12 octobre 2011
Statut
Membre
Dernière intervention
18 juillet 2020
2
je reçus toujours le meme message
Messages postés
7346
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
22 avril 2021
122
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
Messages postés
352
Date d'inscription
mercredi 12 octobre 2011
Statut
Membre
Dernière intervention
18 juillet 2020
2
je reçois tourjours la m erreur
Messages postés
2416
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
21 avril 2021
134
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 )
Messages postés
7346
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
22 avril 2021
122 >
Messages postés
2416
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
21 avril 2021

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
Messages postés
2416
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
21 avril 2021
134 >
Messages postés
7346
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
22 avril 2021

exact cs_Le Pivert je n'avais pas fait attention
Bien le bonjour à toi et tous mes voeux pour 2017
Messages postés
7346
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
22 avril 2021
122 >
Messages postés
2416
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
21 avril 2021

Merci, meilleurs vœux pour toi aussi. Plein d'idées pour faire de nouveaux programmes.
Messages postés
352
Date d'inscription
mercredi 12 octobre 2011
Statut
Membre
Dernière intervention
18 juillet 2020
2
je vous est poster mon code , est des photo de la formes , en haut , je continue d'avoir la meme erreur , merci a tous
Messages postés
7346
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
22 avril 2021
122
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à
Messages postés
15853
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
22 avril 2021
535
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
Messages postés
352
Date d'inscription
mercredi 12 octobre 2011
Statut
Membre
Dernière intervention
18 juillet 2020
2
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
Messages postés
352
Date d'inscription
mercredi 12 octobre 2011
Statut
Membre
Dernière intervention
18 juillet 2020
2
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
Messages postés
15853
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
22 avril 2021
535
avec ma méthode, il n'y a pas ce genre de problèmes
Messages postés
352
Date d'inscription
mercredi 12 octobre 2011
Statut
Membre
Dernière intervention
18 juillet 2020
2
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
Messages postés
7346
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
22 avril 2021
122
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