Copier coller une cellule d'un Datagridview

Résolu
Moundir76 Messages postés 281 Date d'inscription dimanche 3 octobre 2010 Statut Membre Dernière intervention 16 mai 2014 - 9 janv. 2014 à 15:28
Moundir76 Messages postés 281 Date d'inscription dimanche 3 octobre 2010 Statut Membre Dernière intervention 16 mai 2014 - 10 janv. 2014 à 11:36
Bonjour, et meilleurs voeux à tous.

J'ai un datagridview comme ci après :

------------------------|
TYPE.......|COULEUR..|
------------------------|
AAA........|B5998......|
-----------|------------|
BBB........|...............|
-----------|------------|
CCC........|...............|
-----------|------------|


Ici j''aimerais éviter que l'utilisateur ai a remplir la couleur pour BBB et CCC sachant que celà peut être la même couleur que AAA.

Est il possible de sélectionner la cellule, faire un copier, puis sélectionner en même temps BBB et CCC et faire coller, afin que ces deux cellules se remplissent ?

voici le résultat final qui serait obtenu en un clic :

------------------------|
TYPE.......|COULEUR..|
------------------------|
AAA........|B5998......|
-----------|------------|
BBB........|B5998......|
-----------|-----------|
CCC........|B5998......|
-----------|------------|



Merci d'avance pour votre aide,

Cordialement

6 réponses

cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
9 janv. 2014 à 19:33
Bonjour et bonne année

Je ne pense pas que cela est possible j'ai fait un petit test avec un DGV et deux colonnes comme ton ex
on peut selectionner le contenu d'une cellule le copier dans le clipboard et le coller dans une autre cellule
tu peux peut etre ainsi
remplir seulement la cellule avec couleur différente et coder une boucle qui remplit les cellules du dessus
ex je remplis la valeur couleur pour AAA avec toto
je vais à la rangée ou je dois écrire une nouvelle couleur
ex pour FFF titi la boucle remplit la cellule couleur pour BBB à EEE
avec toto

Private lastrow As Integer = 0
Private Sub InitDGW()
DataGridView1.BorderStyle = BorderStyle.Fixed3D
DataGridView1.Font = New Font("arial", 12, FontStyle.Bold)

DataGridView1.EnableHeadersVisualStyles = False
DataGridView1.ColumnHeadersDefaultCellStyle.BackColor = Color.PowderBlue
DataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing
DataGridView1.Columns.Add("TYPE", "THE TYPE")
DataGridView1.Columns.Add("COLOR", "THE COLOR")

End Sub
Private Sub FillDGW()
Dim n As Integer
n = DataGridView1.Rows.Add()
DataGridView1.Rows.Item(n).Cells("TYPE").Value = "AAA"
n = DataGridView1.Rows.Add()
DataGridView1.Rows.Item(n).Cells("TYPE").Value = "BBB"
n = DataGridView1.Rows.Add()
DataGridView1.Rows.Item(n).Cells("TYPE").Value = "CCC"
n = DataGridView1.Rows.Add()
DataGridView1.Rows.Item(n).Cells("TYPE").Value = "DDD"
n = DataGridView1.Rows.Add()
DataGridView1.Rows.Item(n).Cells("TYPE").Value = "EEE"
n = DataGridView1.Rows.Add()
DataGridView1.Rows.Item(n).Cells("TYPE").Value = "FFF"
n = DataGridView1.Rows.Add()
DataGridView1.Rows.Item(n).Cells("TYPE").Value = "GGG"
n = DataGridView1.Rows.Add()
DataGridView1.Rows.Item(n).Cells("TYPE").Value = "HHH"
DataGridView1.AutoSize = True
DataGridView1.AutoResizeColumns()
End Sub

Private Sub DataGridView1_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick

If e.RowIndex = 0 Then
Exit Sub
End If
For iter As Integer = lastrow + 1 To e.RowIndex - 1
DataGridView1.Rows(iter).Cells(e.ColumnIndex).Value = DataGridView1.Rows(lastrow).Cells(e.ColumnIndex).Value
Next
lastrow = e.RowIndex
End Sub
0
Moundir76 Messages postés 281 Date d'inscription dimanche 3 octobre 2010 Statut Membre Dernière intervention 16 mai 2014
10 janv. 2014 à 09:11
Salut ShayW,

Merci pour ta solution, qui personnellement me convient, mais je ne pourrais pas la mettre en place car "trop compliquée pour les utilisateurs"...

Je vais continuer à chercher si je ne peux pas faire une "bidouille".

Merci !
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
10 janv. 2014 à 10:22
Ah bon trop compliqué
je ne pense pas car l'utilisateur écrit seulement les cellules où la valeur couleur change.Il n'y a pas besoin de selectionner copier
et coller.
0
Moundir76 Messages postés 281 Date d'inscription dimanche 3 octobre 2010 Statut Membre Dernière intervention 16 mai 2014
10 janv. 2014 à 11:02
J'ai trouvé une solution.

EN utilisant une source trouvée sur le forum, j'ai juste ajouté une boucle et j'ai le résultat souhaité. Alors oui, ce n'est pas propre du tout mais ça fonctionne :

Private Sub paste()

Dim s As String = Clipboard.GetText()
Dim inter As Char() = s.ToCharArray()
s = ""
Dim i As Integer = 0
While i <> inter.Length

If inter(i) = ControlChars.Cr Then
Else
s = s + inter(i)
End If
i += 1
End While

Dim lines As String() = s.Split(ControlChars.Lf)

Dim row As Integer = DataGridView1.CurrentCell.RowIndex
Dim col As Integer = DataGridView1.CurrentCell.ColumnIndex
Dim a As Integer = 0
While a <> lines.Length

If row < DataGridView1.RowCount AndAlso lines(a).Length > 0 Then
Dim cells As String() = lines(a).Split(ControlChars.Tab)
For j As Integer = 0 To cells.GetLength(0) - 1
If col + j < Me.DataGridView1.ColumnCount Then
Dim roww As DataGridViewCell
For Each roww In DataGridView1.SelectedCells
DataGridView1(col + j, roww.RowIndex).Value = Convert.ChangeType(cells(j), DataGridView1(col + j, row).ValueType)
Next


Else
Exit For
End If
Next
row += 1
Else
Exit While
End If
a += 1
End While
End Sub
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
10 janv. 2014 à 11:26
Où vas tu appeller la sub paste ?
0
Moundir76 Messages postés 281 Date d'inscription dimanche 3 octobre 2010 Statut Membre Dernière intervention 16 mai 2014
10 janv. 2014 à 11:36
J'ai utilisé un ContextMenuStrip

 Dim mnu As New ContextMenuStrip()
Dim mnuCopy As New ToolStripMenuItem("Copier")
Dim mnuPaste As New ToolStripMenuItem("Coller")
AddHandler mnuCopy.Click, New EventHandler(AddressOf mnuCopy_Click)
AddHandler mnuPaste.Click, New EventHandler(AddressOf mnuPaste_Click)
mnu.Items.AddRange(New ToolStripItem() {mnuCopy, mnuPaste})
DataGridView1.ContextMenuStrip = mnu

J'ai utilisé cette fonctionnalité car tous les utilisateurs n'utilisent ou ne connaissent pas le raccourci CTRL+C CTRL+V.

En cherchant un peu 3 solutions semblaient possibles :

- Utiliser l'évenement KeyPressed et regarder les touches enfoncées
- Utiliser un hook (je n'ai jamais utilisé cette notion) pour catcher le Copier Coller directement depuis l'OS
-Utiliser un ContextMenuStrip
0
Rejoignez-nous