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 :

Choisit un item une seul fois dans le DataGridViewComboBoxColumn


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Octobre 2010
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 109
    Par défaut Choisit un item une seul fois dans le DataGridViewComboBoxColumn
    Bonjour à tous,

    J'ai une colonne de mon DATAGRIDvIEW sous forme d'un combobox dans lequel j'affiche la liste de mes clients , l'utilisateur de l'application quand il rempli ce DATAGRIDvIEW il doit choisir les clients parmi ceux trouvé dans la liste déroulante ( COMBOBOX) le problème est le suivant:

    comment puisse je interdire à l'utilisateur de choisir le même client plus d'une fois
    d'une autre façon il choisit dans la ligne une le client "C1" et dans une autre ligne il choisit le même client "C1" suite à ça j'aurai un problème lors de l'insertion dans la BDD "deux ligne en BDD ayant meme Clé primaire "

    MERCI d'avoir répondu à mon sujet d'avance

  2. #2
    Membre Expert Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Par défaut
    Je ne sais pas comment tu alimentes ton datagridview mais tu pourrais stocker les clients choisis dans une liste (List<string> par exemple). Ainsi tu vérifies lors d'un nouveau choix de client, si celui-ci ne figure pas déjà dans la liste.

  3. #3
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    La solution de Callo, ou alors dans l'event DataGridView.CellValidating Tu boucles les combos de ta colonne client et tu testes qu'aucunes des combos n'ait le .SelectedValue similaire à la ligne à valider.

  4. #4
    Membre actif
    Inscrit en
    Octobre 2010
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 109
    Par défaut
    Citation Envoyé par _Ez3kiel Voir le message
    La solution de Callo, ou alors dans l'event DataGridView.CellValidating Tu boucles les combos de ta colonne client et tu testes qu'aucunes des combos n'ait le .SelectedValue similaire à la ligne à valider.
    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
    Private Sub LivraisonDataGridView_CellValidating(ByVal sender As Object, ByVal e As DataGridViewCellValidatingEventArgs) Handles LivraisonDataGridView.CellValidating
            If LivraisonDataGridView.CurrentCell.ColumnIndex = 0 Then
     
     
                If Not (IsProductNotRepeted()) Then
                    e.Cancel = True
                    Me.LivraisonDataGridView.Rows(e.RowIndex).ErrorText = "the value must be a unique"
                End If
            End If
        End Sub
        Private Function IsProductNotRepeted() As Boolean
     
            Dim valide As Boolean = True
            Dim i As Integer = 0
     
            If LivraisonDataGridView.CurrentRow.Index = 0 Then
     
                Return valide
            Else
                'Récuperer les produits choisis précédemment ligne par ligne et les comparer avec le produit choisi actuellement
                For i = 0 To (LivraisonDataGridView.RowCount - 2)
     
                    If (LivraisonDataGridView.Item(0, i).Value) = (LivraisonDataGridView.CurrentCell.Value) Then
     
                        valide = False
                        Return valide
                    End If
                Next
            End If
            Return valide
        End Function
    ce code interprète votre idée très intelligente comme même , mais il me reste un problème ( A noter que là j'ai une liste de produits non une liste de clients ; juste pour vous mettre dans l'image )

    lorsque'il y a une duplication l'erreur se produit donc l'utilisateur n'a pas le choix que de choisir un autre produit à partir de la liste des produit offertes imaginons , que la liste contient un seul produit donc logiquement l'utilisateur n'a le droit que de créer une seule ligne dans le DGV mais par inattention il choisit le même produit dans la 2eme ligne et là le problème :

    tous est bloqué ( il ne peux meme pas fermer la fentere , supprimer la ligne creer....) jusqu’à choisir un autre produit mais il n'a pas de choix qu'un seul produit
    pour enlever le bloquage , j'ai tentait de supprimer la ligne "FAUSSE" dans le "CellValidating"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     LivraisonDataGridView.Rows.Remove(LivraisonDataGridView.CurrentRow)
    mais il me donne ça (piece jointe )

    merci pour votre aide
    Images attachées Images attachées  

  5. #5
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    L'erreur est normale, tu tentes de supprimer une ligne du DGV à pendant un event de cette même ligne.

    L'utilisateur n'a pas le droit d'avoir plus d'une ligne de produits dans ton DGV pour les produit c'est ça ? Ou c'est juste que ton code l'en empêche mais qu'il a le droit ?

    Dans le 1er cas, tu peux passer la property .Enabled = True à ton DGV lorsque son total de ligne est égale à 1 ou supprimer une ligne à chaque fois qu'une est rajouté.
    Dans le 2nd cas, tu peux ajouter un item vide ("") à tes combos pour laisser le choix à l'utilisateur de ne pas sélectionner de produits.

  6. #6
    Membre actif
    Inscrit en
    Octobre 2010
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 109
    Par défaut
    Citation Envoyé par _Ez3kiel Voir le message
    L'erreur est normale, tu tentes de supprimer une ligne du DGV à pendant un event de cette même ligne.

    L'utilisateur n'a pas le droit d'avoir plus d'une ligne de produits dans ton DGV pour les produit c'est ça ? Ou c'est juste que ton code l'en empêche mais qu'il a le droit ?

    Dans le 1er cas, tu peux passer la property .Enabled = True à ton DGV lorsque son total de ligne est égale à 1 ou supprimer une ligne à chaque fois qu'une est rajouté.
    Dans le 2nd cas, tu peux ajouter un item vide ("") à tes combos pour laisser le choix à l'utilisateur de ne pas sélectionner de produits.
    Primo=> moi j'alimente ma liste de produit à partir de la BDD et le nombre de produit depend decombien utilisateur à entrer de produit donc ma liste contient un seul produit est un cas particulier que je veux le traiter

    Secondo=> mettre le DGV enable me complique les chose car moi je traite la reaction d'une commandeClient et donc l'utilisateur
    peut manipuler, modier, remodifier son DGV à aucun moment je veux rendre le DGV inaccessible

    En dernier => faire le "" dans ma liste me creer un autre probleme imaginons qu'il a choist "" et valider la commandeClient donc une incohérence sera présente par rapport au produit présents dans la BDD

    merci de m'aider

Discussions similaires

  1. Afficher un message une seule fois dans une boucle infinie
    Par emulienfou dans le forum Langage
    Réponses: 3
    Dernier message: 24/02/2011, 14h12
  2. DBLink utilisable une seule fois dans une session donnée
    Par thatsallfunk dans le forum Administration
    Réponses: 1
    Dernier message: 22/05/2009, 11h01
  3. Réponses: 4
    Dernier message: 06/06/2008, 10h56
  4. Ma requete s'execute qu'une seule fois dans mon curseur
    Par remyescof dans le forum Développement
    Réponses: 5
    Dernier message: 21/03/2008, 09h03
  5. Ma requete s'execute qu'une seule fois dans mon curseur
    Par remyescof dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 21/03/2008, 09h03

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