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 de données dans un DGV


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 258
    Par défaut validation de données dans un DGV
    Bonjour
    Je sollicite encore une fois votre aide pour résoudre mon pb de validation de données
    J'ai testé 2 solutions et une seule marche

    1) Solution qui marche
    Dans le formulaire 1 DGV et les 3 champs à coté dans des textBox
    La saisie des données lors d’un ajout se fait dans les Texbox

    Fonction enregistrement
    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
        Private Sub Enregistrement()
     
            If Validation() Then 'Test si la saisie est correcte
     
                Me.RangementBindingSource.EndEdit()
                Me.Validate()
     
                Try
                    Me.TableAdapterManager.UpdateAll(Me.RangementDataSet)
                    txt_status.Text = ""
                Catch ex As Exception
                    MessageBox.Show(ex.Message)
                End Try
            Else
                txt_status.Text = "Données non sauvegardées : les 2 champs doivent être remplis !"
            End If
        End Sub
    Fonction validation
    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
        Private Function Validation() As Boolean
            'Gestion des erreurs avant enregistrement
            Dim HasNoError As Boolean = True
            'EP1.Clear()
     
            If txt_lib.Text.Length = 0 Then
                HasNoError = False
            End If
     
            If txt_libCourt.Text.Length = 0 Then
                HasNoError = False
            End If
     
            Return HasNoError
     
        End Function
    2) Solution qui ne marche pas
    Les textbox sont supprimées, l’ajout se fait dans le DGV
    La fonction enregistrement reste la même

    La fonction validation devient
    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
      Private Function Validation() As Boolean
     
            Dim HasNoError As Boolean = True
     
            Dim row As RangementDataSet.RangementRow
            row = CType(CType(Me.RangementBindingSource.Current, DataRowView).Row, RangementDataSet.RangementRow)
            Dim RangementLib As String = row.RGM_LIB
            Dim RangementLibCourt As String = row.RGM_LIB_COURT
     
            If RangementLib.Length = 0 Then
                HasNoError = False
            End If
     
            If RangementLibCourt.Length = 0 Then
                HasNoError = False
            End If
     
            Return HasNoError
     
        End Function
    Si je clique sur enregistrement alors que le focus est toujours sur la dernière colonne du DGV la valeur entrée n’est pas considérée et cause une erreur , mais ça je pense pouvoir le corriger en forçant le focus ailleurs lors du clic enregistrement

    Si la valeur est nulle, elle n’est pas interceptée à temps car elle cause une erreur dans la partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
           <Global.System.Diagnostics.DebuggerNonUserCodeAttribute(),  _
             Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")>  _
            Public Property RGM_LIB() As String
                Get
                    Try 
                        Return CType(Me(Me.tableRangement.RGM_LIBColumn),String)
                    Catch e As Global.System.InvalidCastException
                        Throw New Global.System.Data.StrongTypingException("La valeur pour la colonne 'RGM_LIB' dans la table 'Rangement' est DBNull.", e)
                    End Try
                End Get
                Set
                    Me(Me.tableRangement.RGM_LIBColumn) = value
                End Set
            End Property

    Comment gérer les erreurs dans un DGV ??
    Par avance merci et bonne journée
    Bertrand

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Par défaut
    Bonjour,
    l’évènement DataGridView.DataError peut peut-être t'aider ?

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 258
    Par défaut
    Bonjour BasicZX81,
    Merci ! il est vrai que je m'obstine à empêcher l'erreur alors qu'il suffit peut être de la gérer !
    Je vais regarder en ce sens !
    Merci encore
    Bertrand

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 258
    Par défaut
    Re,
    J'ai essayé une solution au niveau du DGV
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Private Sub DGV1_DataError(sender As Object, e As System.Windows.Forms.DataGridViewDataErrorEventArgs) Handles DGV1.DataError
            HasNoError = False
            MessageBox.Show("Error happened " & e.Context.ToString())
        End Sub
    Mais je n'ai jamais réussi à capturer quoique ce soit ??

    j'ai donc essayé une solution au niveau de la saisie
    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
    Private Sub DGV1_CellValidating(sender As Object, e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles DGV1.CellValidating
            Dim headerText As String = DGV1.Columns(e.ColumnIndex).HeaderText
     
            If headerText.Equals("Libellé") Then
     
                ' Confirm that the cell is not empty.
                If (String.IsNullOrEmpty(e.FormattedValue.ToString())) Then
                    DGV1.Rows(e.RowIndex).ErrorText = "Le champ est obligatoire !"
                    txt_status.Text = "Le champ Libellé est obligatoire !"
                    'HasNoError = False
                    e.Cancel = True
     
                End If
     
            Else
                If headerText.Equals("Abréviation") Then
                    ' Confirm that the cell is not empty.
                    If (String.IsNullOrEmpty(e.FormattedValue.ToString())) Then
                        DGV1.Rows(e.RowIndex).ErrorText = "Le champ est obligatoire !"
                        txt_status.Text = "Le champ Abréviation est obligatoire !"
                        'HasNoError = False
                        e.Cancel = True
     
                    End If
                End If
            End If
     
     
        End Sub
     
        Private Sub DGV1_CellEndEdit(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DGV1.CellEndEdit
            ' Clear the row error in case the user presses ESC.   
            DGV1.Rows(e.RowIndex).ErrorText = String.Empty
        End Sub
    le code fonctionne empêchant de sortir de la cellule tant que celle ci n'est pas valide (non nulle) : cela fonctionne si on valide la dernière colonne en changeant de cellule
    Mais si on clique directement sur sauvegarder , l'erreur revient !!

    Je commence à nager grave !
    Merci

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Par défaut
    Bonjour, m'en veux pas si j'ai un niveau un peu limité mais j'essaye de t'aider.
    J'ai juste remarqué une chose :
    Ta propriété RGM_LIB n'accepte pas les valeurs DBNull dans ce qui ressemble à une classe. Hors, à aucun moment tu ne valorise la donnée avec une valeur par défaut (non Null).
    Je ne suis pas spécialiste ni très sûre de ce que je dit mais je pense que la question a se poser est : peut tu accepter une valeur DBNull dans ton code et dans ce cas il faudrait modifier ta classe pour en tenir compte. Ou bien valoriser ta donnée avec une valeur par défaut pour que celle-ci ne soit pas Null.

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 258
    Par défaut
    Re Bonjour,
    Loin de moi l'idée de critiquer toute idée me permettant d'avancer !
    Le DGV est rempli par un databindincource relié à une base SQL Server
    Pour mes essais, j'ai mis les 3 champs (ID, Lib, LIb court) à "nul interdit"

    Je potasse pleins de sites depuis tout à l'heure et si j'ai bien compris
    1) Il y a la solution en live "Cellvalidating" qui vérifie chaque donnée lorsqu'on quitte la cellule, mais dans mon cas si on clique sur le bouton "sauver" la dernière cellule n'est pas testée

    2) la solution générale basée sur le DGV dataerror mais qui intervient trop tard

    Lors de l'enregistrement j'ai un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.RangementBindingSource.EndEdit()
    Dois je le mettre avant ou après avoir testé la validation des données ?
    Si après la dernière cellule n'est pas prise en compte ?

    Par avance, merci
    bertrand

  7. #7
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842

Discussions similaires

  1. [2.x] [Form] Validation des données dans un formulaire ?
    Par kolbek dans le forum Symfony
    Réponses: 4
    Dernier message: 11/09/2012, 12h45
  2. [Débutant] validation de données dans un formulaire
    Par marooh dans le forum C#
    Réponses: 0
    Dernier message: 04/08/2012, 03h28
  3. Réponses: 4
    Dernier message: 17/06/2012, 18h14
  4. Réponses: 2
    Dernier message: 09/06/2012, 10h26
  5. Réponses: 2
    Dernier message: 06/04/2007, 21h37

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