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 :

validation dans un datagridview [Débutant]


Sujet :

VB.NET

  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2005
    Messages
    338
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 338
    Par défaut validation dans un datagridview
    bonjour,
    j'ai placé sur mon formulaire un datagridview qui a les propriétés:
    -activer l'ajout (coché)
    -activer la modification (coché)
    -activer la suppression (coché)

    et le code suivant:

    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
    Imports System
    Imports System.Data
    Imports System.Data.SqlClient
    Imports Microsoft.VisualBasic
     
    Public Class p_client
        Dim sqlCMD As SqlCommand
        Dim Dadpter As SqlDataAdapter
        Dim tab As DataTable
        Dim Dset As DataSet
     
        Private Sub ExecuteLMD(ByVal bSql As String, ByVal bTable As String)
            sqlCMD = New SqlCommand(bSql)
            Dadpter = New SqlDataAdapter(sqlCMD)
            tab = New DataTable
            Dset = New DataSet
            sqlCMD.Connection = sqlCONN
            Dadpter.Fill(Dset, bTable)
            tab = Dset.Tables(bTable)
            sqlCMD.CommandType = CommandType.Text
            Dadpter.SelectCommand = sqlCMD
        End Sub
     
        Private Sub cmdfermer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdfermer.Click
            Me.Close()
        End Sub
     
        Private Sub p_client_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            ExecuteLMD("select * from client", "client")
            Grille.DataSource = tab
        End Sub
    End Class
    lorsque j'entre un enregistrement sur une ligne et que je passe à la ligne suivante, l'enregistrement n'est pas validé. je ne sais pas s'il y a une ligne de code que je n'ai pas insérer.

    merci d'avance.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Qu'est-ce que tu entends pas "n'est pas validé" exactement ? Qu'est-ce que tu veux que ça fasse ?

  3. #3
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    Moi ce qu'il faut m'expliquer c'est la présence de ces 2 lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            sqlCMD.CommandType = CommandType.Text
            Dadpter.SelectCommand = sqlCMD
    alors que les opérations SQL sont passées

    Sinon je ne comprends pas vraiment non plus le problème, le but, etc.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par asmduty Voir le message
    Moi ce qu'il faut m'expliquer c'est la présence de ces 2 lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            sqlCMD.CommandType = CommandType.Text
            Dadpter.SelectCommand = sqlCMD
    alors que les opérations SQL sont passées
    Effectivement... et même si c'était avant l'exécution, ça changerait rien : CommandType.Text est la valeur par défaut, et la SelectCommand a déjà été spécifiée via le constructeur

  5. #5
    Membre éclairé
    Inscrit en
    Novembre 2005
    Messages
    338
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 338
    Par défaut
    j'ai fait 2 formulaires:
    1. l'un où je renseigne ma table t_client à partir de contrôles textbox
    2. l'autre à partir d'un datagridview.

    j'ai effacé les 2 lignes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sqlCMD.CommandType = CommandType.Text
            Dadpter.SelectCommand = sqlCMD
    je renseigne sans problème la table t_client dans le formulaire 1.
    par contre, à partir du formulaire 2., je saisis des valeurs dans les colonnes mais elles n'apparaissent pas dans ma table t_client.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Impossible de répondre avec les éléments que tu donnes...
    A quoi correspond le code que tu as posté au départ ? au 1e ou au 2e formulaire ? Quel est la relation entre les 2 formulaire ? Appelles-tu l'un à partir de l'autre ? Comment passes tu les données entre les 2 ?

    Bref, essaie d'être plus précis...

  7. #7
    Membre éclairé
    Inscrit en
    Novembre 2005
    Messages
    338
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 338
    Par défaut
    le formulaire 1 ne contient que des contrôles textbox et le formulaire 2 contient le datagridview. les 2 formulaires ne sont pas en relation. je veux juste renseigner ma table à partir de ces 2 formulaires. je n'ai aucun problème avec le formulaire 1. par contre, le formulaire 2 dont le code a déjà été donné en début de discussion ne renseigne pas ma table. je remets le code corrigé:

    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
    Imports System
    Imports System.Data
    Imports System.Data.SqlClient
    Imports Microsoft.VisualBasic
     
    Public Class p_client
        Dim sqlCMD As SqlCommand
        Dim Dadpter As SqlDataAdapter
        Dim tab As DataTable
        Dim Dset As DataSet
     
        Private Sub ExecuteLMD(ByVal bSql As String, ByVal bTable As String)
            sqlCMD = New SqlCommand(bSql)
            Dadpter = New SqlDataAdapter(sqlCMD)
            tab = New DataTable
            Dset = New DataSet
            sqlCMD.Connection = sqlCONN
            Dadpter.Fill(Dset, bTable)
            tab = Dset.Tables(bTable)
        End Sub
     
        Private Sub cmdfermer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdfermer.Click
            Me.Close()
        End Sub
     
        Private Sub p_client_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            ExecuteLMD("select * from client", "client")
            Grille.DataSource = tab
        End Sub
    End Class
    merci de votre assistance

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Bah oui, tu n'as écrit aucun code pour mettre à jour la table... c'est pas automatique !

    Tu peux utiliser le DataAdapter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim commandBuilder As New SqlCommandBuilder(Dadpter)
    Dadpter.Update(tab)
    (le CommandBuilder permet de générer automatiquement les commandes UPDATE/INSERT/DELETE à partir du SELECT que tu as indiqué ; par contre il faut que ta table ait une clé primaire)

  9. #9
    Membre éclairé
    Inscrit en
    Novembre 2005
    Messages
    338
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 338
    Par défaut
    j'ai les lignes de codes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim commandBuilder As New SqlCommandBuilder(Dadpter)
    Dadpter.Update(tab)
    dans la procédure "ExecuteLMD", ça ne donne rien.
    je l'ai déplacé dans l'évènement p_client_load, ça ne donne toujours rien.

    ou est ce que je dois placer ce bout de code?

    cordialement

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par djelloharmel Voir le message
    j'ai les lignes de codes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim commandBuilder As New SqlCommandBuilder(Dadpter)
    Dadpter.Update(tab)
    dans la procédure "ExecuteLMD", ça ne donne rien.
    je l'ai déplacé dans l'évènement p_client_load, ça ne donne toujours rien.

    ou est ce que je dois placer ce bout de code?

    cordialement
    Bah il faut le mettre à l'endroit où tu veux enregistrer les données... si tu le mets dans le Load, ça sert à rien, vu que tu as pas encore modifié les données. Tu as pas un bouton "enregistrer" ou "valider" ou un truc comme ça ?

  11. #11
    Membre éclairé
    Inscrit en
    Novembre 2005
    Messages
    338
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 338
    Par défaut
    je voulais qu'en passant d'une ligne à une autre, les données de la ligne précédente soit enregistrées dans la table.

    en essayant avec le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Grille_ColumnStateChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewColumnStateChangedEventArgs) Handles Grille.ColumnStateChanged
            Try
                Dim commandBuilder As New SqlCommandBuilder(Dadpter)
                Dadpter.Update(tab)
            Catch ex As Exception
                MsgBox(Err.Description, , "Echec de validation")
            End Try
        End Sub
    j'y suis parvenu. mais je dois avouer que c'est un hasard. n'y a-t-il pas un meilleur évènement que celui-ci sur la grille qui me permette de parvenir à mes fins.

  12. #12
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2011
    Messages : 70
    Par défaut
    Tu as l'évenement RowLeave
    Lorsque qu'une ligne perd le focus, que ce n'est plus la ligne actuelle, peut-être que celui la te convient mieux?

  13. #13
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par djelloharmel Voir le message
    je voulais qu'en passant d'une ligne à une autre, les données de la ligne précédente soit enregistrées dans la table.
    Ca aurait été plus simple si tu l'avais dit dès le départ

    L'évènement le plus approprié pour ça à mon avis est RowValidated

  14. #14
    Membre éclairé
    Inscrit en
    Novembre 2005
    Messages
    338
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 338
    Par défaut
    oui. je conviens avec vous que je n'ai pas été assez clair.
    il y a deux blocages que j'ai à ce niveau pour passer complètement:

    1. je ne veux pas qu'on passe à une autre ligne s'il y a une erreur de validation
    2. je veux un message de confirmation de suppression si je veux effacer une ou des ligne(s)

  15. #15
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par djelloharmel Voir le message
    1. je ne veux pas qu'on passe à une autre ligne s'il y a une erreur de validation
    Gère l'évènement RowValidating, et s'il y a une erreur tu mets e.Cancel à true

    Citation Envoyé par djelloharmel Voir le message
    2. je veux un message de confirmation de suppression si je veux effacer une ou des ligne(s)
    Gère l'évènement UserDeletingRow, affiche ton message de confirmation, et si l'utilisateur ne confirme pas tu mets e.Cancel à true

  16. #16
    Membre éclairé
    Inscrit en
    Novembre 2005
    Messages
    338
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 338
    Par défaut
    pas de problème avec le message de suppression d'une ligne.
    par contre, je ne sais pas comment annuler la mise à jour d'une nouvelle ligne sur laquelle il y a une erreur de validation lorsque je passe à une ligne existante.

    je m'explique mieux:
    je suis sur une nouvelle ligne en mode d'insertion de données. si je passe à une nouvelle ligne (vierge), alors message d'échec de validation et impossible d'aller à la nouvelle nouvelle. mais si je passe à une ligne existante, message d'erreur de validation avec la possibilité de valider d'abord la ligne (en cours) ou de l'annuler avant de passer à la ligne existante. dans le second cas, la nouvelle ligne s'efface et le curseur va à la ligne existante.

  17. #17
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    Ouais enfin là faut peut être un peu chercher aussi, c'est quand même pas sorcier à faire, tu as toutes les cartes en main maintenant.

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

Discussions similaires

  1. [Débutant] validation des données dans un datagridview
    Par thierry007 dans le forum VB.NET
    Réponses: 1
    Dernier message: 14/01/2014, 16h56
  2. validation d'une valeur dans le datagridview
    Par asprog dans le forum Windows Forms
    Réponses: 2
    Dernier message: 05/05/2009, 22h14
  3. [VS2005][VB.Net] Custom Format dans un DataGridView
    Par Vonotar dans le forum VB.NET
    Réponses: 10
    Dernier message: 22/11/2005, 08h15
  4. [STRUTS][Validation] - Validation dans un execute
    Par SEMPERE Benjamin dans le forum Struts 1
    Réponses: 8
    Dernier message: 07/12/2004, 10h55
  5. Récupération de données validées dans une pop-up
    Par hdd dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 01/12/2004, 16h47

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