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 :

problème sur selection dans un DataGridView


Sujet :

VB.NET

  1. #1
    Membre habitué
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    246
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 246
    Points : 191
    Points
    191
    Par défaut problème sur selection dans un DataGridView
    Bonjour,

    je réalise un projet de reporting, dans un datagriedview, lorsque je double-click sur une ligne, j'affiche le détail de celle-ci. Je teste donc sir il y a au moins un ligne et que l'index selectionné n'est pas null.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    If (Me.DataGridViewListeCommande.Rows.Count = 0 _
               OrElse Me.DataGridViewListeCommande.Rows(DataGridViewListeCommande.SelectedRows(0).Index) Is Nothing) Then
                Return
            End If
    Pourtant quand je double click sur un ligne correcte une exception est levé:

    Index was out of range. Must be non-negative and less than the size of the collection.
    Parameter name: index
    Avez-vous une idée de ce problème ?

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

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    Par défaut
    Bonjour,

    dans ton cas tu oublies de tester si SelectedRows.Count > 0
    Le Porc est un loup pour le Porc.

  3. #3
    Membre habitué
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    246
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 246
    Points : 191
    Points
    191
    Par défaut
    même avec ce test en plus, l'erreur est la même.

  4. #4
    Membre actif Avatar de AcidLines
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Février 2010
    Messages : 198
    Points : 279
    Points
    279
    Par défaut
    Tester le nombre de row selectionnées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     DataGridViewListeCommande.SelectedRows.count
    Avoir l'index de la ligne courrante.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     DataGridViewListeCommande.CurrentRow.Index

  5. #5
    Membre habitué
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    246
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 246
    Points : 191
    Points
    191
    Par défaut
    OK, merci pouir cet info. Maintenant j'ai un autre problème dans la suite de l'évent double-click, je souhaite en fonction de la colonne selectionné affiché le détail de la commande si la colonne selectionné est inférieur à 14 sinon j'affiche dans un autre datagriedview des infos sur les métaux de la commande.

    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
     
      If (Me.DataGridViewListeCommande.SelectedColumns(0).Index < 14) Then
                RefreshDataMetal(Me.DataGridViewListeCommande.SelectedRows(0).Cells(0).ToString(), Convert.ToDateTime(Me.DataGridViewListeCommande.SelectedRows(0).Cells(15)))
            Else
                Using FrmDetailCommande As FormDetailCommande = New FormDetailCommande()
                    For Each ligne As sBL.CommandeToMetal In listCommandeToMetal
                        For Each ligneCde As sBL.DetailCommande In ligne.dc_Commande
                            If ligneCde.s_orderid = Me.DataGridViewListeCommande.SelectedRows(0).Cells(0).ToString() Then
                                cdeSelection = ligneCde
                                Return
                            End If
                        Next
                    Next
     
                    If IsNothing(cdeSelection) = False Then
                        FrmDetailCommande.Cde = cdeSelection
                        FrmDetailCommande.ShowDialog()
                    End If
    j'ai une exception levé sur If(Me.DataGridViewListeCommande.SelectedColumns(0).Index < 14) Then

    Index was out of range. Must be non-negative and less than the size of the collection.
    Parameter name: index

  6. #6
    Membre actif Avatar de AcidLines
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Février 2010
    Messages : 198
    Points : 279
    Points
    279
    Par défaut
    L'index de la colonne inférieur à 14 ou la valeur de la cellule (croisement de la colonne selectionnée et de la row selectionnée) ?

  7. #7
    Membre habitué
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    246
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 246
    Points : 191
    Points
    191
    Par défaut
    L'index de la colonne < 14

  8. #8
    Membre actif Avatar de AcidLines
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Février 2010
    Messages : 198
    Points : 279
    Points
    279
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim monIdexCol As Integer
     
    For Each macol As DataGridViewColumn In DataGridView1.SelectedColumns
           monIdexCol = macol.Index
    Next
     
    If monIdexCol < 14 Then
           'Traitement
    End If
    Tu devrais t'en sortir avec ça. Par contre, penses à mettre au besoin la propriété "multiselect" à false pour eviter de pouvoir selectionner plusieurs colonnes et ainsi éviter monIndexCol ne prenne en compte que l'index de la dernière colonne dans le jeu de selection.

  9. #9
    Membre habitué
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    246
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 246
    Points : 191
    Points
    191
    Par défaut
    Merci, mais maitenant j'ai le problème cur cette ligne là, car je souhaite récupéré le contenu de la cellule d'index 0:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      If ligneCde.s_orderid = Me.DataGridViewListeCommande.SelectedRows(0).Cells(0).ToString() Then
    toujours le probleme d'index

    Franchement, je comprend pas, tout ça devrai fonctionné mais on est obligé de passer par des parcours de tableau etc ... c'est vraiment mal foutu le VB

  10. #10
    Membre actif Avatar de AcidLines
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Février 2010
    Messages : 198
    Points : 279
    Points
    279
    Par défaut
    Je commence à avoir du mal à te suivre...
    Tu sélectionne d'abord une row et tu veux récupérer l'index.
    Tu fais une nouvelle selection mais sur un colonne.

    La cells que tu veux récuperer c'est l'intersection de ta row et de ta colonne précédemment selectionnée ? Ou c'est encore autre chose ?

  11. #11
    Membre habitué
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    246
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 246
    Points : 191
    Points
    191
    Par défaut
    En fait, je sélectionne un row, puis je regarde sur quel index de colonne, j'ai fais le double-click, si l'index est < 14, j'affiche le détail de la commande grace à l'orderID sinon j'affiche liste des métaux liés à la commande dans une autre DataGridView (situé en-dessous). J'ai remplacé par ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DataGridViewListeCommande.CurrentRow.Cells(0).ToString()

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

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    Par défaut
    C'est pas le VB qui est mal foutu mais toi qui fait des choses que tu ne comprends pas.
    Prends un peu de recul et cherche ce qui ne va pas.
    Et au minimum quand ça plante cherche pourquoi en pas à pas avec des espions
    Le Porc est un loup pour le Porc.

  13. #13
    Membre habitué
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    246
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 246
    Points : 191
    Points
    191
    Par défaut
    Avec le CurrentRow ça fonctionne, mais je un pb avec le numéro de colonne selectionné qui reste à 0 tout le temps ici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      Dim monIdexCol As Integer
     
            For Each macol As DataGridViewColumn In Me.DataGridViewListeCommande.SelectedColumns
                monIdexCol = macol.Index
            Next

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

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    Par défaut
    SelectedColumn signifie que toute la colonne est sélectionnée (même chose avec selectedRow)
    Le Porc est un loup pour le Porc.

  15. #15
    Membre habitué
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    246
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 246
    Points : 191
    Points
    191
    Par défaut
    D'accord, en fait ça prend l'index seulement si je clique sur le header de la colonne, il n'y a pas de moyens pour obtenir l'index de la colonne sur le contenu selectionné lors du double-click ? Je regarde sur pas mal de site et je ne vois pas la solution à mon problème.

    Merci pour l'info en tout cas.

  16. #16
    Membre habitué
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    246
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 246
    Points : 191
    Points
    191
    Par défaut
    c'est bon, j'ai trouvé la solution, j'ai donc remplacé mon bloc de boucle par ceci:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Dim monIdexCol As Integer
     
                monIdexCol = Me.DataGridViewListeCommande.SelectedCells(0).ColumnIndex

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

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    Par défaut
    Si tu as désactivé la multi-sélection et activé le selection mode en FullRowSelect ça ira.
    Le Porc est un loup pour le Porc.

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

Discussions similaires

  1. Problème de selected dans un listbox
    Par delichoc dans le forum ASP
    Réponses: 4
    Dernier message: 21/06/2008, 21h06
  2. Problème sur Renomer dans un CTreeCtrl
    Par scottmada dans le forum MFC
    Réponses: 2
    Dernier message: 27/03/2008, 17h25
  3. Problème avec Select dans le formulaire
    Par jejefm dans le forum Langage
    Réponses: 2
    Dernier message: 24/04/2007, 09h34
  4. Réponses: 1
    Dernier message: 20/07/2006, 17h03
  5. changement de formulaire sur selection dans le select
    Par LeXo dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 15/06/2006, 11h51

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