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

  1. #61
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    665
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 665
    Points : 1 161
    Points
    1 161
    Par défaut
    Citation Envoyé par BasicZX81 Voir le message
    Question : Dans le DataGridView1.CurrentRow tu récupére ta Row qui est bindé sur le DataSet ou celle du dataGridView ? (qui peut comporter des colonnes supplémentaires par rapport à celle du DataSet)
    Bonsoir,
    désolé pour la réponse tardive et pas très productive.
    Celle du DGV.
    je n'avais pas imaginé ce cas là, alors "elle va marcher beaucoup moins bien, forcément !"

    J'ai testé avec une sauvegarde Xml, ça me décale les cellules.
    Je pense que je pourrais résoudre ce problème avec une classe bien faite, ou en faisant une lecture personnalisée du DGV.
    Par contre pour une vraie base de donnée genre SQL que je connais vraiment mal, je ne sais si il est possible d'occulter telle colonne du DGV ?

  2. #62
    Membre habitué
    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
    Points : 126
    Points
    126
    Par défaut
    Ouaouh, j'ai de quoi bosser ce WE !!
    Merci encore pour cette base de départ !
    Je crois :
    - qu'il faut effectivement mettre certaines contraintes au niveau du dataset, comme l'unicité qui je crois ne serait pas simple à gérer au niveau du DGV
    - que le DGV_Dataerror permettra de les gérer
    - row.validating vs cell.validating : je n'ai pas encore testé les 2
    - je suppose que les tests pourraient être rendus génériques et communs à tous les Formulaires
    J'ai de quoi m'amuser un peu, merci encore !
    Bertrand

  3. #63
    Membre habitué
    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
    Points : 126
    Points
    126
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If cell.Value Is ds.Tables(table).Columns(cell.ColumnIndex).DefaultValue Then 'Valeur par défaut
    Ne serait ce pas plutôt (dset au lieu de ds) ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If cell.Value Is dset.Tables(table).Columns(cell.ColumnIndex).DefaultValue Then 'Valeur par défaut
    Bertrand

  4. #64
    Membre habitué
    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
    Points : 126
    Points
    126
    Par défaut
    Bonjour,
    Merci encore chrismonoye pour cette piste de départ, et j’ai bien aimé l’idée de la liste des erreurs

    Avant d’attaquer l’exploitation des erreurs, j’ai voulu tester le comportement en saisie

    J’ai simplifié le code de chrismonoye pour l’adapter à mon formulaire ne contenant que
    - « libellé » type string qui ne peut être vide/null, doit être unique, valeur par défaut "—"
    - « Ordre » type integer qui ne peut être vide et a pour valeur par défaut "0"
    Ces contraintes sont définies dans le dataset
    J’ai gardé le DGV. DataError pour gérer les erreurs non testées (exemple : unicité), y’a t il un moyen de récupérer le message d’erreur ?
    J’ai décomposé les tests en plusieurs tests élémentaires : EstPasVide, EstInteger, EstPasvaleurDéfaut,.. (pour mes fonctions j’utilise une dénomination en français pour les distinguer des fonctions d’origine, je ne sais pas si c’est bien ?)

    De mes premiers essais, le comportement me semble correct sauf pour la dernière colonne « Ordre» :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      If OrdreCell.Value IsNot Nothing Then
            MessageBox.Show("ordre = " & OrdreCell.Value.ToString)
            listBilan.Add(EstPasVide(OrdreCell))
            listBilan.Add(EstPasValeurDefaut(OrdreCell, ActiviteDataSet, "Activite2"))
            listBilan.Add(EstInteger(OrdreCell))
       End If
    Si je rentre une valeur ”vide”, j’ai bien l’icône d’erreur et le message : OK
    Si je rentre un nombre décimal ou une lettre : je n’ai pas l’icône d’erreur, mais le message venant du DGV. DataError et je reste bloqué dans la cellule (le test EstInteger n’est pas activé) !
    Si je rentre « 0 » qui est la valeur par défaut, je n’ai aucun message (sauf le mouchard ajouté qui m’affiche bien ordre = 0) !!

    Alors que le test de valeur par défaut marche bien sur la première colonne (string par défaut) !

    Bertrand

  5. #65
    Membre habitué
    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
    Points : 126
    Points
    126
    Par défaut
    Petit complément,
    J'ai ajouté une colonne indépendante, pour voir si le pb de comportement était lié à la position ultime de la colonne : le comportement est strictement le même !
    Bertrand

  6. #66
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    665
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 665
    Points : 1 161
    Points
    1 161
    Par défaut
    Bonjour,
    Citation Envoyé par 105rn2
    Ne serait ce pas plutôt (dset au lieu de ds) ?
    Code :
    Sélectionner tout - Visualiser dans une fenêtre à part

    If cell.Value Is dset.Tables(table).Columns(cell.ColumnIndex).DefaultValue Then 'Valeur par défaut
    Tout à fait.

    Citation Envoyé par 105rn2
    Si je rentre une valeur ”vide”, j’ai bien l’icône d’erreur et le message : OK
    Si je rentre un nombre décimal ou une lettre : je n’ai pas l’icône d’erreur, mais le message venant du DGV. DataError et je reste bloqué dans la cellule (le test EstInteger n’est pas activé) !
    Si je rentre « 0 » qui est la valeur par défaut, je n’ai aucun message (sauf le mouchard ajouté qui m’affiche bien ordre = 0) !!
    Pour les deux premiers cas, ça semble cohérent.
    C'est un choix à faire, laisser DataGridView.DataError gérer les erreurs avec des contraintes dans le schéma du Dataset ou gérer soit même les cas dans DataGridView.RowValidating.
    e.Exception.Message donne l'erreur DataError.
    Pour le 3ième cas, il faudrait plutôt comparer les valeurs et remplacer le code par (à voir) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If cell.Value.Equals(Dset.Tables(table).Columns(cell.ColumnIndex).DefaultValue) Then

  7. #67
    Membre habitué
    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
    Points : 126
    Points
    126
    Par défaut
    Bonjour,
    e.Exception.Message donne l'erreur DataError
    Merci beaucoup, Impec !
    Pour les deux premiers cas, ça semble cohérent.
    Moi je ne comprends pas : les contraintes NonNull et integer sont fixées dans le dataset : le DGV.dataerror semble réagir prioritairement aux tests de validité que pour la 2nde contrainte et pas pour le NonNull
    Pour le 3ième cas, il faudrait plutôt comparer les valeurs et remplacer le code par
    J'ai essayé, ça ne change rien : la valeur par défaut du champ libellé est bien détectée, par celle numérique du champ Ordre
    C'est un choix à faire, laisser DataGridView.DataError gérer les erreurs avec des contraintes dans le schéma du Dataset ou gérer soit même les cas dans DataGridView.RowValidating
    Moi, je serais plutôt du genre ceinture et bretelles, serait il possible de garder les contraintes sur le dataset, les surveiller via le DGV.dataerror, mais avoir des tests de validité qui anticiperaient l'erreur ?
    On peut toujours rêver :-)
    En tout cas merci de votre patience !
    Bertrand

  8. #68
    Membre habitué
    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
    Points : 126
    Points
    126
    Par défaut
    Complément,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If cell.Value.Equals(Dset.Tables(table).Columns(cell.ColumnIndex).DefaultValue) Then
    J'ai essayé d'ajouter un test de EstPasValeurDefaut sur une autre colonne, il n'est pas non plus opérant
    j'ai donc ajouté un mouchard à l'entrée de ma procédure de test EstPasValeurDefaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MessageBox.Show("Valeur par défaut VD = " & Dset.Tables(table).Columns(cell.ColumnIndex).DefaultValue.ToString)
    Et il m'affiche un par un les valeur par défaut de chaque colonne
    je pense donc que le test n'était effectif que pour la première colonne
    A+
    Bertrand

  9. #69
    Membre habitué
    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
    Points : 126
    Points
    126
    Par défaut
    En fait, non , il ne les affiche pas toutes
    Uniquement le nbre de celles sollicitées par le EstPasValeurDefaut, le nbre mais pas les valeurs : j'obtiens les valeurs par défaut des 2 premières colonnes, mais pas celles sollicitées !
    Bertrand

  10. #70
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    665
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 665
    Points : 1 161
    Points
    1 161
    Par défaut
    Bonjour,
    bizarre...
    J'ai testé dans RowValidating, la sub suivante (correspondant à mon exemple test), en laissant les valeurs par défaut des cellules qui en sont pourvues :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DefaultVal(DataGridView1, e.RowIndex, ds, "Ligne")
    répondant à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        Sub DefaultVal(ByVal Dgv As DataGridView, ByVal idxRow As Integer, ByVal dset As DataSet, ByVal table As String)
     
            Debug.WriteLine("******* ligne : " & idxRow)
            For Each c As DataGridViewCell In Dgv.Rows(idxRow).Cells
                If dset.Tables(table).Columns(c.ColumnIndex).DefaultValue Is DBNull.Value Then
                    Debug.WriteLine("colonne : " & c.ColumnIndex & " ; Valeur par défaut non initialisée (DBNull.Value)")
                Else
                    If c.Value.Equals(dset.Tables(table).Columns(c.ColumnIndex).DefaultValue) Then
                        Debug.WriteLine("colonne : " & c.ColumnIndex & " , Valeur par défaut : " & dset.Tables(table).Columns(c.ColumnIndex).DefaultValue.ToString)
                    End If
                End If
            Next
     
        End Sub
    La fenêtre d'exécution me donne (et qui correspond bien à mon test) :
    ******* ligne : 2
    colonne : 0 , Valeur par défaut : EN
    colonne : 1 ; Valeur par défaut non initialisée (DBNull.Value)
    colonne : 2 ; Valeur par défaut non initialisée (DBNull.Value)
    colonne : 3 , Valeur par défaut : 0
    colonne : 4 , Valeur par défaut : 0

  11. #71
    Membre habitué
    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
    Points : 126
    Points
    126
    Par défaut
    Bonsoir,
    De mon coté, ça ne s'éclaircit pas !
    Je ne sais pas ou s'affiche le Debug.WriteLine, j'ai donc affiché les infos dans un listbox, et comme je ne sais pas non plus comment faire un copier du contenu du listbox, j'ai ait une capture d'écran , ce sera plus parlant :
    Il y a 5 colonnes
    - ID : auto incrément, pas de valeur par défaut
    - Libellé : valeur par défaut = "--", dans le test colonne 1
    - Niveau Supérieur : valeur par défaut = 1 (colonne 4 selon test ??)
    - code : pas de valeur par défaut
    - ordre : valeur par défaut = 0
    Le test ne sort pas toujours le même nbre de colonne , 2 ou 3 mais jamais les 5
    Comment retrouver le numérotage des colonnes du DGV, la colonne correspondant au Niveau Supérieur a encore pour nom "DataGridViewTextBoxColumn5" (colonne 4?) mais pour les autres j'ai modifié le Name donc je n'ai plus le N° !

    Bertrand
    Images attachées Images attachées  

  12. #72
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    665
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 665
    Points : 1 161
    Points
    1 161
    Par défaut
    Fenêtre exécution (dans le menu standard de l'IDE) :
    Débogueur --> Fenêtres --> Immédiat
    Peut être dans "Affichage" selon les versions.
    On y trouve aussi "Sortie" pour visionner une sortie Console (Console.WriteLine).
    Cette ou ces options activées, un onglet apparait en bas pour "Fenêtre Exécution" et pour "Sortie" accompagnant "Liste d'erreurs".
    En ouvrant ces onglets, Console donne le résultat après avoir fermé l'application, Debug permet de visionner le résultat et d'autres choses, en cours d'exécution.

    Pour y voir plus clair, à tester :
    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
        Sub DefaultVal(ByVal Dgv As DataGridView, ByVal idxRow As Integer, ByVal dset As DataSet, ByVal table As String)
     
            Debug.WriteLine("******* ligne : " & idxRow)
            For Each c As DataGridViewCell In Dgv.Rows(idxRow).Cells
                If dset.Tables(table).Columns(c.ColumnIndex).DefaultValue Is DBNull.Value Then
                    Debug.WriteLine("colonne : " & c.ColumnIndex & " , " & c.OwningColumn.Name & " ; Valeur par défaut non initialisée; valeur de la cellule : " & c.Value.ToString)
                Else
                    If c.Value.Equals(dset.Tables(table).Columns(c.ColumnIndex).DefaultValue) Then
                        Debug.WriteLine("colonne : " & c.ColumnIndex & " , " & c.OwningColumn.Name & " , Valeur par défaut non modifiée : " & dset.Tables(table).Columns(c.ColumnIndex).DefaultValue.ToString)
                    Else
                        Debug.WriteLine("colonne : " & c.ColumnIndex & " , Valeur par défaut : " & dset.Tables(table).Columns(c.ColumnIndex).DefaultValue.ToString & " modifiée en : " & c.Value.ToString)
                    End If
                End If
            Next
     
        End Sub
    On devrait y voir l'index de toutes les colonnes, leur Name, leur valeur liée éventuelle et la valeur entrée dans la cellule de la ligne en cours de validation.

  13. #73
    Membre habitué
    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
    Points : 126
    Points
    126
    Par défaut
    Bonsoir,
    J'arrête pas d'apprendre, c'est plus de la patience de votre part, ça tourne au sacerdoce !
    J'ai donc tracé les Debug.WriteLine en ayant simplement modifié les messages
    "Valeur par défaut non initialisée" par "valeur par défaut is DBNull"
    J'obtiens donc ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ******* ligne : 81
    colonne : 0 , DataGridViewTextBoxColumn1 ; Valeur par défaut is DBNull; valeur de la cellule : -1
    colonne : 1 , Libelle , Valeur par défaut non modifiée : --
    colonne : 2 , DataGridViewTextBoxColumn5 ; Valeur par défaut is DBNull; valeur de la cellule : 3
    colonne : 3 , Valeur par défaut : 0 modifiée en : 
    colonne : 4 , Valeur par défaut : 1 modifiée en : 0
    Si on se base sur le N° de colonne de gauche à droite du DGV :

    - Pour les colonnes 0,1 c'est cohérent
    - Pour la colonne 2 (elle du être crée à la suite des autres, c'est pourquoi elle s'appelle toujours DataGridViewTextBoxColumn5, je la renommerai plus tard quand ce sera plus clair) la valeur par défaut devrait être 1
    Par contre,
    - Pour les colonnes 3 et 4 le nom n'est pas indiqué (code et Ordre) alors qu'il est bien configuré dans le DGV
    - La colonne 3 n'a pas de valeur par défaut (DBNull)
    - La colonne 4 a pour valeur par défaut 0 et non 1

    A noter que la colonne 2 (Niveau supérieur) est un DataGridViewComboBoxColumn (voir copie d'écran )

    Pour moi, ce n'est pas bien clair tout cela !
    Bertrand
    Images attachées Images attachées  

  14. #74
    Membre habitué
    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
    Points : 126
    Points
    126
    Par défaut
    Pour compléter,
    j'ai refait le même test sur un autre Form (très ressemblant) et un autre DGV ayant une colonne de moins (celle du combobox car lié à une table étrangère)
    Il y a donc simplement 4 colonnes textbox, dont 2 (libelle et ordre) avec valeur par défaut

    J'ai obtenu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ******* ligne : 8
    colonne : 0 , ID ; Valeur par défaut is DBNull; valeur de la cellule : -1
    colonne : 1 , Libelle ; Valeur par défaut is DBNull; valeur de la cellule : --
    colonne : 2 , Valeur par défaut : -- modifiée en : s
    colonne : 3 , Ordre , Valeur par défaut non modifiée : 0
    Commentaire :
    Colonne 0 :OK
    Colonne 2 : manque nom de table (code), et valeur par défaut inversée avec colonne 1
    Colonne 3 : OK

    je ne suis pas sûr que cela éclaircisse !
    Bertrand

  15. #75
    Membre habitué
    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
    Points : 126
    Points
    126
    Par défaut
    Bonjour
    Pour dire être sûr, j'ai refait la manip avec un autre DGV sur un autre form, attaché à une autre table et un autre dataset
    le résultat est du même tonneau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ******* ligne : 10
    colonne : 0 , ID ; Valeur par défaut is DBNull; valeur de la cellule : -1
    colonne : 1 , Libelle ; Valeur par défaut is DBNull; valeur de la cellule : z
    colonne : 2 , Valeur par défaut : -- modifiée en : ss
    colonne : 3 , Ordre , Valeur par défaut non modifiée : 0
    Manque nom table colonne 1
    Inversion champs par défaut des colonnes 1 et 2
    Bertrand

  16. #76
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    665
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 665
    Points : 1 161
    Points
    1 161
    Par défaut
    Bonjour,
    c'est normal si le nom de la colonne n'apparait pas toujours, je l'ai oublié dans le dernier test.
    Test plus complet avec également le Name de la colonne ciblée du Bataset :
    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
        Sub DefaultVal(ByVal Dgv As DataGridView, ByVal idxRow As Integer, ByVal dset As DataSet, ByVal table As String)
     
            Debug.WriteLine("******* ligne : " & idxRow)
            For Each c As DataGridViewCell In Dgv.Rows(idxRow).Cells
                If dset.Tables(table).Columns(c.ColumnIndex).DefaultValue Is DBNull.Value Then
                    Debug.WriteLine("N°, Nom col du Dgv : " & c.ColumnIndex & " , " & c.OwningColumn.Name & " ; Nom col du Dset : " & dset.Tables(table).Columns(c.ColumnIndex).ColumnName & " ; Valeur par défaut non initialisée; valeur de la cellule : " & c.Value.ToString)
                Else
                    If c.Value.Equals(dset.Tables(table).Columns(c.ColumnIndex).DefaultValue) Then
                        Debug.WriteLine("N°, Nom col du Dgv : " & c.ColumnIndex & " , " & c.OwningColumn.Name & " ; Nom col du Dset : " & dset.Tables(table).Columns(c.ColumnIndex).ColumnName & " ; Valeur par défaut non modifiée : " & dset.Tables(table).Columns(c.ColumnIndex).DefaultValue.ToString)
                    Else
                        Debug.WriteLine("N°, Nom col du Dgv : " & c.ColumnIndex & " , " & c.OwningColumn.Name & " ; Nom col du Dset : " & dset.Tables(table).Columns(c.ColumnIndex).ColumnName & " ; Valeur par défaut : " & dset.Tables(table).Columns(c.ColumnIndex).DefaultValue.ToString & " modifiée en : " & c.Value.ToString)
                    End If
                End If
            Next
     
        End Sub

  17. #77
    Membre habitué
    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
    Points : 126
    Points
    126
    Par défaut
    Bonjour,
    voila le résultat sur le 1er Form testé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ******* ligne : 83
    N°, Nom col du Dgv : 0 , DataGridViewTextBoxColumn1 ; Nom col du Dset : AV2_ID ; Valeur par défaut non initialisée; valeur de la cellule : -4
    OK
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    N°, Nom col du Dgv : 1 , Libelle ; Nom col du Dset : AV2_LIB ; Valeur par défaut : -- modifiée en : sss
    OK
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    N°, Nom col du Dgv : 2 , DataGridViewTextBoxColumn5 ; Nom col du Dset : AV2_CODE ; Valeur par défaut non initialisée; valeur de la cellule : 3
    Normalement AV1_ID et valeur par défaut 0, se retrouve en dernier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    N°, Nom col du Dgv : 3 , Code ; Nom col du Dset : AV2_ORDER ; Valeur par défaut : 0 modifiée en :
    Normalement AV2_CODE et sans valeur par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    N°, Nom col du Dgv : 4 , Ordre ; Nom col du Dset : AV1_ID ; Valeur par défaut : 1 modifiée en : 0
    Normalement AV2_ORDER et valeur par défaut 0

    J'ai bien entendu vérifié dans le DGV la correspondance, voir copie d'écran post précédent

    Qu'est ce qui peut causer ce décalage ?
    Bertrand

  18. #78
    Membre habitué
    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
    Points : 126
    Points
    126
    Par défaut
    Bonjour,
    Pour essayer de comprendre ce qui se passe, j'ai refait l'essai sur une autre table/dataset ne comprenant que 4 champs
    J'obtiens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    N°, Nom col du Dgv : 0 , ID ; Nom col du Dset : CIV_ID ; Valeur par défaut non initialisée; valeur de la cellule : -1
    N°, Nom col du Dgv : 1 , Libelle ; Nom col du Dset : CIV_CODE ; Valeur par défaut non initialisée; valeur de la cellule : --
    N°, Nom col du Dgv : 2 , Code ; Nom col du Dset : CIV_LIB ; Valeur par défaut : -- modifiée en : 
    N°, Nom col du Dgv : 3 , Ordre ; Nom col du Dset : CIV_ORDER ; Valeur par défaut non modifiée : 0
    Soit l'inversion des colonnes 1 et 2
    L'ordre du dataset correspond à l'ordre dans la table et de la requête de sélection du tableadapter
    j'ai voulu modifier cet ordre en modifiant la requête dans le tableadapter pour avoir : ID, Libelle, Code, Ordre (dans le même ordre que le DGV)
    - dans le générateur de requête, si je fait "exécuter la requête" : j'obtiens bien la liste l'ordre désiré (ID, Libelle, Code, Ordre)
    - dans les propriété du table adapter, les requêtes sont dans le nouvel ordre
    - dans l'interface graphique du dataset, si je clique droit / aperçu des données, j'obtiens l'ordre d'origine (celui de la table pas de la requête modifiée : ID, Code, Libelle, Ordre)
    Bertrand

  19. #79
    Membre habitué
    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
    Points : 126
    Points
    126
    Par défaut
    Bonjour,
    Pour essayer d'avancer, j'ai recrée une nouvelle table, dataset, DGV, et ... bref, du tout neuf et j'ai fait quelques essais :
    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
    ' crée Nouvelle table, dataset,Formulaire, DGV..... en mettant les contraintes dans le Dataset
    ******* ligne : 0
    N°, Nom col du Dgv : 0 , CATIDDataGridViewTextBoxColumn ; Nom col du Dset : CAT_ID ; Valeur par défaut non initialisée; valeur de la cellule : 16
    N°, Nom col du Dgv : 1 , CATLIBDataGridViewTextBoxColumn ; Nom col du Dset : CAT_LIB ; Valeur par défaut : ---- modifiée en : Afinsa
    N°, Nom col du Dgv : 2 , CATCODEDataGridViewTextBoxColumn ; Nom col du Dset : CAT_CODE ; Valeur par défaut : -- modifiée en : Af
    N°, Nom col du Dgv : 3 , CATORDERDataGridViewTextBoxColumn ; Nom col du Dset : CAT_ORDER ; Valeur par défaut non modifiée : 0
     
    ' Renommé le nom des colonnes du DGV : pas d'erreur !
    ******* ligne : 16
    N°, Nom col du Dgv : 0 , ID ; Nom col du Dset : CAT_ID ; Valeur par défaut non initialisée; valeur de la cellule : -1
    N°, Nom col du Dgv : 1 , Libelle ; Nom col du Dset : CAT_LIB ; Valeur par défaut : ---- modifiée en : z
    N°, Nom col du Dgv : 2 , Code ; Nom col du Dset : CAT_CODE ; Valeur par défaut : -- modifiée en : zz
    N°, Nom col du Dgv : 3 , Ordre ; Nom col du Dset : CAT_ORDER ; Valeur par défaut non modifiée : 0
     
    ' Modifié l'ordre des colonnes dans DGV : Ordre remonté entre ID et Libelle -> ERREUR : INVERSION DES COLONNES
    ******* ligne : 0
    N°, Nom col du Dgv : 0 , ID ; Nom col du Dset : CAT_ID ; Valeur par défaut non initialisée; valeur de la cellule : 21
    N°, Nom col du Dgv : 1 , Ordre ; Nom col du Dset : CAT_LIB ; Valeur par défaut : ---- modifiée en : 0
    N°, Nom col du Dgv : 2 , Libelle ; Nom col du Dset : CAT_CODE ; Valeur par défaut : -- modifiée en : ----
    N°, Nom col du Dgv : 3 , Code ; Nom col du Dset : CAT_ORDER ; Valeur par défaut : 0 modifiée en : --
    Bref, le pb arrive quand on modifie l'ordre des colonnes du DGV : il n'y a plus cohérence : nom / colonne / contrainte..
    Existe t il un moyen de "réindexer" les colonnes du DGV ?
    par avance, merci
    Bertrand

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