IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

copier dans datagridview


Sujet :

VB.NET

  1. #1
    Invité
    Invité(e)
    Par défaut copier dans datagridview
    bonjour
    voila mon problème

    dans mon application j'ai un timer se timer copie le texte d'une textbox pour le coller dans un datagridview.
    sa marche très bien mais il le copie seulement sur une seul ligne
    je voudrait qu'il continue sur la ligne 2 puis 3 puis 4 etc......
    voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            My.Computer.Clipboard.Clear()
            My.Computer.Clipboard.SetText(ToolStripTextBox1.Text)
            If My.Computer.Clipboard.ContainsText Then
                ToolStripTextBox1.Text = My.Computer.Clipboard.GetText
            End If
            Dim rowSplitter As Char() = {vbCr, vbLf}
            Dim columnSplitter As Char() = {vbTab}
     
            Dim dataInClipboard As IDataObject = Clipboard.GetDataObject()
            Dim stringInClipboard As String = CStr(dataInClipboard.GetData(DataFormats.Text))
            Dim rowsInClipboard As String() = stringInClipboard.Split(rowSplitter, StringSplitOptions.RemoveEmptyEntries)
     
            Dim r As Integer = Form6.DataGridView1.SelectedCells(0).RowIndex
            Dim c As Integer = Form6.DataGridView1.SelectedCells(0).ColumnIndex
     
            If (Form6.DataGridView1.Rows.Count < (r + rowsInClipboard.Length)) Then
     
                Form6.DataGridView1.Rows.Add(r + rowsInClipboard.Length - Form6.DataGridView1.Rows.Count)
     
            End If
     
            Dim iRow As Integer = 0
     
            While iRow < rowsInClipboard.Length
     
                Dim valuesInRow As String() = rowsInClipboard(iRow).Split(columnSplitter)
     
                Dim iCol As Integer = 0
     
                While iCol < valuesInRow.Length
     
                    If (Form6.DataGridView1.ColumnCount - 1 >= c + iCol) Then
     
                        Form6.DataGridView1.Rows(r + iRow).Cells(c + iCol).Value = valuesInRow(iCol)
     
                    End If
     
                    iCol += 1
     
                End While
     
                iRow += 1
     
            End While
        End Sub
    alors je ne sais pas trop comment mis prendre pour faire sa
    avez vous la soluss ?

  2. #2
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Mais a la base. Tu as combien de lignes dans ton DGV ?

    0 ? et tu souhaites ajouté au fur et a mesure des lignes ?

  3. #3
    Invité
    Invité(e)
    Par défaut
    a la base il y a une ligne et je voudrait qu'il les ajoute au fur et a mesure que le timer colle le texte

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    bonjour,
    à tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            If (Form6.DataGridView1.Rows.Count <= (r + rowsInClipboard.Length)) Then
     
                Form6.DataGridView1.Rows.Add(r+1 + rowsInClipboard.Length - Form6.DataGridView1.Rows.Count)
     
            End If
    J'ai mis un plus grand ou égal dans le "if", et un "r+1" dans le traitement, pour que le dgv ait toujours une ligne neuve.
    C'est celle ci qui se sélectionne et qui reçoit la copie du timer.

  5. #5
    Invité
    Invité(e)
    Par défaut
    merci ton code marche le seul souci
    c'est que je suis obliger d'ouvrir ma form6 et de sélectionne la ligne en dessous pour qu'il continue de copier, ou si non si je ne fait pas sa il reste sur la premiere ligne

  6. #6
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Question bête, mais parfois très utiles :

    As tu exécuter ton code au pas a pas. Tu verras surement pourquoi il ne fait qu'une ligne (sortie de boucle, condition non remplis, exception....)

  7. #7
    Invité
    Invité(e)
    Par défaut
    aaaaaaaaahh bon pas de panique
    comment fait-on pour faire pas a pas ? je l'est jamais fait

    en faite le code copie bien sur plusieurs ligne mais a condition que j'ouvre ma form6 et que je sélectionne la 2eme ligne après sa roule tout seul
    si je n'ouvre pas ma form6 il copie que sur la ligne 1

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Que veux tu dire par ouvrir le form6?
    Ce code fonctionne très bien, mais le form6 doit être ouvert au lancement du form principal et minimisé éventuellement (dans la barre des tâches) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            Form6.Show()
            Form6.MinimizeBox = True
    Mais ce n'est peut être pas ce que tu veux.

  9. #9
    Invité
    Invité(e)
    Par défaut
    il a fallu que je fasse ceci dans ma form principale
    form6.show
    form6.hide

    maintenant sa marche
    ou si non si je lancait pas ma form6 mon application plantait en soulignant se code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim r As Integer = Form6.DataGridView1.SelectedCells(0).RowIndex
    et l'erreur disait:
    L'exception Argument out of range Exception n'a pas été gérée
    il me dit la même chose quand je veut supprimer mon historique
    code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     DataGridView1.RowCount = 1
            DataGridView1.Rows.Clear()
    Dernière modification par Deepin ; 06/10/2010 à 11h13. Motif: Balises [QUOTE]...[/QUOTE]

  10. #10
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Alors, petit cours de rattrapage, leçon 492: le Pas-a-pas:

    - A gauche de ton code, tu as une zone grisé vertical.
    - Si tu clique (gauche), un rond rouge apparaît: c'est un point d'arrêt.
    - Lance le débogage, lorsque le code arrive sur ton point d'arrêt, le programme s'arrête.
    - La ligne qui s’apprête a être exécuter est en jaune.
    - Après 3 solutions :
    - F5, le programme continue comme si rien ne s'était passé.
    - F10, passe a la ligne de code suivante
    - F11, pour les lignes de codes qui sont des appels de procédure ou
    fonctions, alors le pas a pas continue dans la fonction ou la
    procédure en question.

    Le coté pratique de la chose c'est:
    - Ça te permet de vérifier ton algorithme (ton cas), pourquoi on sors de la boucle etc...
    - Si tu places ta souris sur un variable (ou si tu surligne), un infobulle de te donne les valeurs qu'elles contiennent.
    - Tu peux utiliser un espion (cours 493) pour surveiller un objet.

  11. #11
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Citation Envoyé par Morpheus500 Voir le message
    il a fallu que je fasse ceci dans ma form principale
    form6.show
    form6.hide

    maintenant sa marche
    ou si non si je lancait pas ma form6 mon application plantait en soulignant se code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim r As Integer = Form6.DataGridView1.SelectedCells(0).RowIndex
    et l'erreur disait: l'exception Argument out of range Exception n'a pas été géré

    il me dit la même chose quand je veut supprimer mon historique
    code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     DataGridView1.RowCount = 1
            DataGridView1.Rows.Clear()
    Est ce que tu as du code dans Form6_Load ? Car si ça fonctionne quand tu fais un show... il doit y avoir quelque chose.

  12. #12
    Invité
    Invité(e)
    Par défaut
    oui j'ai un code dans form6

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    Public Class Form6
        Dim i As Integer
        Private Sub Form6_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim s1 As String
            Try
                FileOpen(1, "noisette2.txt", OpenMode.Input)
                Do
                    s1 = LineInput(1)
                    DataGridView1.Rows.Add(New String() {s1})
     
                Loop Until EOF(1)
            Catch ex As Exception
            Finally
                FileClose(1)
            End Try
        End Sub
     
        Private Sub FermerToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FermerToolStripMenuItem.Click
            Dim boucle As Boolean
            boucle = True
            Try
                FileOpen(1, "noisette2.txt", OpenMode.Output)
                For i = 0 To DataGridView1.Rows.Count - 1
                    Dim row As DataGridViewRow = DataGridView1.Rows(i)
                    If row.Cells(0).Value <> "" Then
                        PrintLine(1, row.Cells(0).Value)
     
                    End If
                Next
            Catch
            Finally
                FileClose(1)
            End Try
            Me.Hide()
        End Sub
     
        Private Sub SupprimerLhistoriqueToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SupprimerLhistoriqueToolStripMenuItem.Click
            DataGridView1.RowCount = 1
            DataGridView1.Rows.Clear()
        End Sub
    End Class
    voila tout le code dans form6
    je vous explique:
    dans form6 load sa sert a charger le fichier noisette2.txt dans mon datagridview
    et dans le bouton fermer du menu sa sert a enregistrer le datagridview dans un fichier bloc note
    voila en gros c'est pour faire une sauvegarde pour ne rien perdre comme sa quand je ré-ouvre mon application je n'ai rien perdu

Discussions similaires

  1. Copier un datagridview dans un autre datagridview
    Par ghywa dans le forum Windows Forms
    Réponses: 2
    Dernier message: 21/05/2013, 10h38
  2. [Débutant] Copier/ coller d'une Row d'un Datagriview 2 dans Datagridview 1
    Par jeremyvb11 dans le forum VB.NET
    Réponses: 16
    Dernier message: 14/01/2013, 20h35
  3. Copier dans un Array
    Par Goundy dans le forum Langage
    Réponses: 3
    Dernier message: 26/11/2005, 21h24
  4. [Apache] Copier dans un répertoire sur le réseau
    Par licorne dans le forum Apache
    Réponses: 10
    Dernier message: 23/11/2005, 16h40
  5. [javascript] copier dans le "clipboard"
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/08/2005, 14h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo