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 :

Modification DataGrid Aprés recherche


Sujet :

VB.NET

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2011
    Messages : 34
    Par défaut Modification DataGrid Aprés recherche
    Bonjours les programmeurs,

    Après 3 jours de recherche sur les forums et maints essais je viens demander de l'aide. Voilà je développe un petit programme en VB.net, je souhaite pouvoir effectuer une recherche dans une datagrid, sélectionner cette ligne et la modifier. J'ai surfé sur les forums j'ai trouvé plein de code mais qui été vraiment bien long et complexe. Existe-t-il une manière des plus simples pour rechercher une donnée dans un datagrid grâce à une textbox et la modifier par la suite. Faut 'il obligatoirement utiliser un BindingSource?

    Voila en espérant avoir été des plus claires.
    Merci d'avance

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 453
    Par défaut
    Tu pourais montrer ton code parce que là ce n'est pas vraiment évident de comprendre ce que tu veux faire...

    Si c'est pour trouver la valeur de ta comboBox et si c'est un String :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    For Each row As DataGridViewRow in maDataGrid.Rows
        If row.Cells.Item("maColonne").Value.ToString.Equals(maComboBox.Text) Then
            'Ton traitement
        End If
    Next

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2011
    Messages : 34
    Par défaut
    Oui Dsl pour le code mais j'ai encore rien de bien structuré, et tu as vue trés juste, c'est le code que j'attendais. (Dire que ce n'étais pas grand chose)
    Seulement il me met une erreur:
    La référence d'objet n'est pas définie à une instance d'un objet.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     For Each row As DataGridViewRow In DataGridView1.Rows
                If row.Cells.Item("Column1").Value.ToString.Equals(TextBox3.Text) Then
                    nom.Text = "ça MArche"
                End If
            Next
    Sinon ce code compare les valeurs de ma colonne et ma textbox, mais des fois il ne récupere pas le numéro de la ligne quelquepart ??

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 453
    Par défaut
    Tu peux mettre le code complet ou au moins la fonction qui bloque si c'est trop long

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2011
    Messages : 34
    Par défaut
    Oui si tu veux je met le plus interesssant.
    La fonction qui bloque c'est celle que j'ai mis plus haut.

    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
    Imports System.IO
    Imports System.Text
    Public Class Form1
        Dim categorie, jour As String
        Dim numero As Integer = 1
     
        Private Sub Form1_Load() Handles MyBase.Load
            nom.Focus()
        End Sub
     
    'Cette fonction sert à envoyer des valeurs dans la datagrid sur 5 colones
        Private Sub add_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles add.Click
            Groupe()
            Dim row0 As String() = {nom.Text, prenom.Text, categorie, jour, numeros.Text}
            Me.DataGridView1.Rows.Add(row0)
            numero = numeros.Text
            numero = numero + 1
            numeros.Text = numero
            nom.Clear()
            prenom.Clear()
            nom.Focus()
        End Sub
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     
    'Ici je veux pouvoir rechercher une valeur dans la colone 1 de la datagrid
    qui correspond à celle de la TextBox3         
    For Each row As DataGridViewRow In DataGridView1.Rows
                If row.Cells.Item("Column1").Value.ToString.Equals(TextBox3.Text) Then 'ICI QUE ARRIVE LE PROBLEME
                    nom.Text = "G reussi"
                End If
            Next
        End Sub
    Voila ^^ en espérant que cela t'aide
    MErci d'avance

  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 453
    Par défaut
    Tu as des lignes dans ta DGV avant de lancer ta recherche ?

    Sinon tente ce test avant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    If DataGridView1.Rows.Count > 0 Then
        For Each row As DataGridViewRow In DataGridView1.Rows
                If row.Cells.Item("Column1").Value.ToString.Equals(TextBox3.Text) Then 'ICI QUE ARRIVE LE PROBLEME
                    nom.Text = "G reussi"
                End If
            Next
    End If

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2011
    Messages : 34
    Par défaut
    Oui j'ai des lignes avant de faire la recherche.
    Et non cela ne change rien toujours le message
    La référence d'objet n'est pas définie à une instance d'un objet.
    des fois j'arrive à me corriger mais la je vois pas du tout ce que cette phrase veut dire.

  8. #8
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 453
    Par défaut
    Ca veut dire que tu es en train de faire un test sur une variable qui n'a pas été instanciée (c'est pourquoi je te demandais si tu avais des lignes )

    Essaies de remplacer "Column1" par l'index de colonne sinon (c'est à dire 0) dans ton test.

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2011
    Messages : 34
    Par défaut
    J'ai trouver le problème. J'ai fait du Pas à Pas et le code marche bien et c'est quand il arrive en fin de colonne qu'il déconne.

    Aurait tu une idée pour résoudre le problème? j'ai écrit un bout de code mais c'est moche.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        Private Sub Button1_Click() Handles Button1.Click
            If DataGridView1.Rows.Count > 0 Then
                For Each row As DataGridViewRow In DataGridView1.Rows
                    If row.Cells.Item("Column1").Value.ToString.Equals(TextBox3.Text) Then                     nom.Text = "G reussi"
                        If t = DataGridView1.Rows.Count Then
                            Return
                        End If
                        t = t + 1
                    End If
                Next
            End If
     
        End Sub
    Ps: Réédition je viens de voir ton message. Je vois pas trop ce que tu veux parler pour "index de colone" cela correspond à quoi?

  10. #10
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 453
    Par défaut
    Et bien l'index de colonne est ... l'index de colonne ^^, c'est son numéro quoi... (sur base 0 pour une DGV)

    par contre je ne comprends pas ce que tu as rajoutés:
    - Pourquoi mettre un "return" dans une sub (tu ne voulais pas mettre "exit" plutôt des fois ?)
    - Qu'est ce que c'est que ce "t" qui apparaît de nul part ?

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2011
    Messages : 34
    Par défaut
    Ha OK ... Oui je chercher compliquée pour l'index.
    J'ai essayer avec l'index et nn c'est la même chose

    Sinon DSL annule le morceau de texte que j'ai taper à l'aveugle il ne sert à rien. Le problème est toujours le même en faite il plante quand il arrive en fin de colonne je voulais l'arréter lorsqu'il arriver à la fin.

  12. #12
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 453
    Par défaut
    Bon ok alors on va tout remettre à plat là...

    1. Tu insères une ligne dans ta DGV
    2. Tu mets du texte dans une TextBox
    3. Tu clics sur un bouton pour voir si tu trouves la ligne (qui se trouve effectivement là)
    4. Si tu la trouves, tu mets du texte ("ça marche") dans ta texBox

    Ca va ? J'ai bon jusque là ?

    Le problème c'est que tu as un message qui te dit qu'une variable n'est pas instanciée...

    Te dit-il laquelle des fois ? (on ne sait jamais hein ?)
    Qu'est ce que tu entends EXACTEMENT par
    il plante quand il arrive en fin de colonne

  13. #13
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2011
    Messages : 34
    Par défaut
    Tu as tout bon ^^

    Je fais du Pas à pas quand je lance le programme (STEP INTO)
    le "For Each" marche bien il me parcours toute la colonne ligne par ligne arriver à la ligne où ma valeur choisie en TextBox et trouver il exécute bien le "G reussi", puis il continu à lire les lignes suivantes. Arriver en fin de colonne (dernière ligne) il m'indique l'érreur suivante:

    NullReferenceException was unhandled
    La référence d'objet n'est pas définie à une instance d'un objet.
    Voila ^^
    Merci pour ton aide

  14. #14
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 453
    Par défaut
    Tu as bien mis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each row As DataGridViewRow In DataGridView1.Rows
    et rien d'autre ?

    Parce que là ce que t'es en train de me dire c'est qu'il parcours bien toute les lignes mais qu'il ne s'arrête pas à la dernière alors que c'est ce qu'il devrait faire avec le for each

    Sinon essaies :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    dim i as integer = 0
    For i = 0 to i = DataGridView1.Rows.count -1
                If DataGridView1.Rows.Item(i).Cells.Item("Column1").Value.ToString.Equals(TextBox3.Text) Then
                    nom.Text = "G reussi"
                End If
            i += 1
            Next

  15. #15
    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
    Bonsoir,
    l'erreur énoncée est logique (selon moi).

    1) L'index des lignes (colonnes également) débute à 0, alors que le count à 1.

    2) Il faut aussi savoir si l'utilisateur est autorisé à ajouter de nouvelles données.
    Si oui, une ligne vide apparait en final et ne sera instanciée que lorsque l'utilisateur y entrera des données. Si ce n'est pas le cas, la dernière ligne valide (instanciée) est à l'index -1 et en count à -2.
    on peut le savoir par la propriété du DGV : NewRowIndex (égal à -1 si non autorisé).

    A tester donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
            Dim base As Integer = 0
            If DataGridView1.NewRowIndex = -1 Then
                base = 1
            Else
                base = 2
            End If
            For i As Integer = 0 To DataGridView1.Rows.Count - base
                If DataGridView1.Rows.Item(i).Cells.Item(2).Value.ToString.Equals(TextBox3.Text) Then
                    MessageBox.Show("G reussi")
                End If
            Next

  16. #16
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 453
    Par défaut
    Ah oui je n'y avais pas pensé à la ligne vide parce que je n'autorise quasiment jamais l'utilisateur à ajouter "manuellement" des lignes sur les DGV, je n'ai donc (presque) jamais de lignes vides!!

  17. #17
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    336
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 336
    Par défaut
    si pas tu peux tout simplement faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    For i As Integer = 0 To DataGridView1.Rows.Count - base
                If DataGridView1.Rows.Item(i).Cells.Item(2).Value.ToString.Equals(TextBox3.Text) Then
                    MessageBox.Show("G reussi")
                    Exit For
                End If
            Next

  18. #18
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 453
    Par défaut
    Edit : petite erreur de lecture de ma part désolé, la solution de Darkhan devrait fonctionner

  19. #19
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2011
    Messages : 34
    Par défaut
    Oui Effectivement la solution de Dharkan fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For i As Integer = 0 To DataGridView1.Rows.Count - base
                If DataGridView1.Rows.Item(i).Cells.Item(2).Value.ToString.Equals(TextBox3.Text) Then
                    MessageBox.Show("G reussi")
                    Exit For
                End If
            Next
    Merci à vous deux pour l'aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Rafraichissement d'un DataGrid après modification d'un élément d'une liste
    Par Invité dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 31/03/2015, 17h05
  2. Code de modification contenu Cellule apres recherche
    Par xeeel dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 03/06/2009, 12h17
  3. Réponses: 3
    Dernier message: 22/06/2006, 23h23
  4. faire un état d'après recherche multicritère
    Par bilouk dans le forum Access
    Réponses: 4
    Dernier message: 12/01/2006, 18h30
  5. [VB.NET] Recuperer numero ligne dans DATAGRID apres event
    Par stephane93fr dans le forum Windows Forms
    Réponses: 4
    Dernier message: 13/01/2005, 11h58

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