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 :

Retrouver ligne dans DatagridView


Sujet :

VB.NET

  1. #1
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2002
    Messages : 264
    Par défaut Retrouver ligne dans DatagridView
    Bonjour,

    Existe t'il une fonction permettant de retrouver l'index d'une ligne d'un DatagridView en fonction de critères.
    Ex. Index de la ligne du DGV dont TAG="123"
    sachant que j'ai initialisé un tag unique pour chaque ligne au remplissage.
    Le DGV n'est lié a aucune base de donnée : il est rempli manuellement.
    ...je peut bien sûr faire 1 boucle sur ttes les lignes en testant le tag à chaque fois mais j'espérais un truc tout fait et forcément plus rapide genre : MonIndex=MonDGV.Rows.IndexOf(Tag="123")


    Je suppose que ma question a déjà été posée, mais après des heures de recherche je n'ai rien trouvé...merci pour votre aide

  2. #2
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2005
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 201
    Par défaut
    Bonjour.
    Je ne crois pas que tu peut accéder au Rows du DGV en utilisant leur TAG.
    Tu peux utiliser une collection(Key,value) Tel key = tag et value = RowIndex,
    comme cela tu peux accéder au Row a travers son tag.
    Bien sûre la collection doit se remplir au fur et a mesure que le DGV, pour assurer la synchronisation des index entre les deux Collections.

  3. #3
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2002
    Messages : 264
    Par défaut
    merci pour ta réponse, mais cette solution ne me simplifie pas vraiment.
    J'espérais qu'il existait une solution toute faite sans alourdir mes traitements.

    Là ça m'oblige a charger encore la mémoire, à recréer la collection à chaque tri...la boucle de recherche est plus simple...

  4. #4
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2005
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 201
    Par défaut
    J'ai une question quand est ce que tu veux récupérer ton index? Est que fait ta DGV.

  5. #5
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2002
    Messages : 264
    Par défaut
    Mon TV présente 1 liste (nom, prenom, age...).
    J'ai 1 Treeview qui contient les mêmes infos mais sous forme hierarchique (ce qui facilite les recherches).

    Je veut donc sélectionner la ligne du DataGridView quand on la selectionne dans le Treeview.

  6. #6
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2005
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 201
    Par défaut
    Citation Envoyé par bib34690 Voir le message
    Mon TV présente 1 liste (nom, prenom, age...).
    J'ai 1 Treeview qui contient les mêmes infos mais sous forme hierarchique (ce qui facilite les recherches).

    Je veut donc sélectionner la ligne du DataGridView quand on la selectionne dans le Treeview.
    d'après ce que j'ai compris, Tu veux sélectionner une ligne dans TreeView qui provoque la sélection de la ligne correspondante dans DGV.
    Si c'est bien cela, le TAG doit être dans le TreeView et non pas dans le DGV pour faire cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    'J'ai pas vérifier la syntaxe.
    DGV.Rows(TV.SelectedNode.Tag).selected = true
    Donc quand tu remplie le TV tu dois donner les index du DGV au Tag des noeuds.

  7. #7
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2002
    Messages : 264
    Par défaut
    C'est exactement ce que je veut faire.
    J'ai mis le même tag ds les 2 (TV & DGV).
    C'est pour ça que je voulais trouver la ligne correspondante ds le DGV.

    Dans ta solution, tu pars du principe que le tag du TV est l'indice du DGV mais ça ne marche à priori pas car le DGV peut être trié par l'utilisateur d'un clic sur l'entete d'une colonne, et les index changent...il faudrait que je refasse la mémorisation de ts les tags du TV à chaque tri, ce qui serait au moins aussi long que de faire la recherche...

    en tout cas merci pour ton aide, c trés sympa.

  8. #8
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2005
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 201
    Par défaut
    Citation Envoyé par bib34690 Voir le message
    C'est exactement ce que je veut faire.
    J'ai mis le même tag ds les 2 (TV & DGV).
    C'est pour ça que je voulais trouver la ligne correspondante ds le DGV.

    Dans ta solution, tu pars du principe que le tag du TV est l'indice du DGV mais ça ne marche à priori pas car le DGV peut être trié par l'utilisateur d'un clic sur l'entete d'une colonne, et les index changent...il faudrait que je refasse la mémorisation de ts les tags du TV à chaque tri, ce qui serait au moins aussi long que de faire la recherche...

    en tout cas merci pour ton aide, c trés sympa.
    Y pas de quoi.
    Si ça coince tu peut toujours faire ta méthode de recherche, je ne crois pas que ça va prendre de la mémoire. Ou bien tout simplement si tu veux utiliser ma solution tu n'a qu'a désactiver le tri par click sur l'entête des colonnes.

    N'y insiste pas trop, en ai jamais satisfait de notre programme.

  9. #9
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2002
    Messages : 264
    Par défaut
    c vrai, c + pour moi que pour le programme.
    Je découvre Dotnet depuis peu et j'ai envie de faire toujours ce qu'il y a de mieux, alors je coupe souvent les cheveux en 4...
    Mais c vrai aussi qu'une fois qu'on a pris les bonnes habitudes, les programmes sont plus efficaces.

    Merci pour ton aide Charaf, et peut-être à une prochaine...

    PS : je fais une boucle pour rechercher mon Tag ds le DGV avec 1 boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for MonIndex=0 to DGV.Rowscount-1
    if DGV.Rows(MonIndex).Tag=TagRecherché then ...
    Je sais qu'on peut faire mieux avec une boucle for Each, et peut-être encore mieux en déclarant une collection qui pointerait uniq.sur le Tag, mais je n'y suis pas arrivé...si tu savais ça me ferait un peu avancer.

  10. #10
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2005
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 201
    Par défaut
    Citation Envoyé par bib34690 Voir le message
    Je sais qu'on peut faire mieux avec une boucle for Each, et peut-être encore mieux en déclarant une collection qui pointerait uniq.sur le Tag, mais je n'y suis pas arrivé...si tu savais ça me ferait un peu avancer.
    Tu peut Utiliser un HashTable ou bien les Generics (il y a aussi ArrayList mais C'est pas une Key,Value Collection).
    En fait HashTable est une collection Object,Object cela veut dire que le Key et le value est un Type objet(On peut y mettre ce qu'on veut sans s'occuper du type de l'object).
    Par contre les generics son des collections a type définis au par avant. Generics comporte plusieurs Classe moi j'utilise généralement Generics.IDictionary(Of type,type).
    EX :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim array1 as new Generics.IDictionary(Of String,String)
    les autres méthodes et propriétés sont partager avec presque toutes les collections.
    Un exemple pour remplire taCollection:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim Col1 as new HashTable
    For i as integer = 0 to ...
    DGV.Rows.Add()
    DGV...'tu remplie les colonnes
    col1.add("Tag=123...?",DGV.RowCount -1)
    'le RowCount -1 est toujours l'index du dernier row ajouter dans la DGV
    next
    Dim index as integer = 0
    index = col1.item("Tag=123...?")
    N'oublie pas Tu peux pas utiliser le même key pour deux value.

  11. #11
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2002
    Messages : 264
    Par défaut
    Cette technique semble souffrir du même pb que la précédente : si l'utilisateur trie le tableau, les index sont modifiés.
    Et je ne veut pas perdre la possibilité de tri.

    Je pensais plus à la méthode de recherche lors du clic ds le TV.
    Plutot qu'un parcours du DGV par index (For Index=0 to...), j'aurais espéré un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Dim LesTagDuDGV as DataGridView??? = MonDGV.????
    For each TagLigne in LesTagDuDGV
      if TagLigne=TagRecherché then...
    j'arrive à la faire avec les données d'une colonne avec la propriété DataGridViewColumn, mais DataGrigViewTag n'existe pas et je n'ai pas trouvé de solution pour récupérer cette collection.

  12. #12
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2005
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 201
    Par défaut
    Citation Envoyé par bib34690 Voir le message

    Je pensais plus à la méthode de recherche lors du clic ds le TV.
    Plutot qu'un parcours du DGV par index (For Index=0 to...), j'aurais espéré un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Dim LesTagDuDGV as DataGridView??? = MonDGV.????
    For each TagLigne in LesTagDuDGV
      if TagLigne=TagRecherché then...
    j'arrive à la faire avec les données d'une colonne avec la propriété DataGridViewColumn, mais DataGrigViewTag n'existe pas et je n'ai pas trouvé de solution pour récupérer cette collection.
    D'abord les Tag que tu peux utiliser sont les propriétés des Rows et non pas des colonnes.
    Si tu ne veux pas perdre le tri, alors au lieu de garder les index des row tu peux garder les rows eux même et de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DGV.selectedRow = Col1.Item(TagRechercher)
    Sans boucle ni IF THEN ni rien.
    Et comme cela meme si on tri les colonnes on peux toujours aller a la ligne désignée pas le tag sans faire un update de la collection.

  13. #13
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2002
    Messages : 264
    Par défaut
    Bon, je pars en WE, mais j'étudie ça dès lundi...
    merci et bon WE toi aussi.

    j'essaye lundi et je te tiens au courrant.
    @ bientôt.

  14. #14
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Bonjour,

    Dans le DGV, il n'y a aucun moyen d'ajouter une info à une ligne (tag, message d'erreur, ... par exemple) et de la conserver quelque soient les opérations sur l'affichage comme filtre et tri.

    Si le contenu des colonnes du DGV ne permet pas d'obtenir une clé unique, la seule solution consiste à ajouter une colonne masquée avec un Id différent pour chaque ligne. Sinon, utiliser simplement le n° de ligne initial (sans le mettre dans la colonne masquée), interdira de faire des opérations qui modifient l'affichage du DGV, comme l'application de filtre ou le tri.

  15. #15
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2002
    Messages : 264
    Par défaut
    Bon, j'aurai essayé...

    Merci Charaf, et merci Graffito pour votre aide précieuse.
    Longue vie à Developpez.com.

    Didier.

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

Discussions similaires

  1. Insertion ligne dans datagridview
    Par cath2123 dans le forum VB.NET
    Réponses: 3
    Dernier message: 05/10/2010, 09h39
  2. rendre visible une ligne dans datagridview
    Par toutou2000 dans le forum C#
    Réponses: 1
    Dernier message: 26/03/2009, 11h30
  3. Hauteur de lignes dans DataGridView
    Par Nico28 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 28/01/2008, 17h44
  4. [C# 2.0] Retrouver ligne dans checkboxlist
    Par lenoil dans le forum Windows Forms
    Réponses: 4
    Dernier message: 13/11/2007, 11h40
  5. Ajout de beaucoup lignes dans DataGridView
    Par lalles dans le forum Framework .NET
    Réponses: 3
    Dernier message: 08/04/2007, 18h53

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