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 :

Récupérer une valeur d'une row sans connaitre son index dans un datatable


Sujet :

VB.NET

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    444
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 444
    Points : 428
    Points
    428
    Par défaut Récupérer une valeur d'une row sans connaitre son index dans un datatable
    Bonjour,

    c'est idiot mais j'arrive pas à trouver comment récupérer un champ si j'ai pas l'index de la ligne mais si je connais un autre champ de cette même ligne, à partir d'une datatable.
    Si je commence par datatable.rows( ... je n'ai pas d'autre choix que de rentrer l'index de la ligne. Si je commence par datatable.columns( ... c'est pas mieux.

    Y a-t-il un moyen en utilisant une méthode de ma datatable ou dois-je passer par une requête sql ?
    Mieux vaut un petit lien qu'un long discours.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Normalement on n'accède pas à une ligne par son index mais par sa clé primaire (identifiant de la ligne). Tu peux faire quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim row As DataRow = table.Rows.Find(laValeurDeLaClé)
    Si c'est un DataSet fortement typé (créé avec le designer), une méthode spéciale est créée à cet effet. Par exemple, si la table s'appelle Toto, et que la clé s'appelle Id, une méthode FindById est créée qui renvoie une ligne de type TotoRow :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim row As MonDataSet.TotoRow = table.FindById(laValeurDeId)

  3. #3
    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 : 41
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Tu peux aussi utiliser le RowFilter de dataview

    de cette manière tu peux filtrer ton datatable sur une colonne qui n'est pas clé primaire.
    Pour ce faire utilise defaultview de ta datatable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maDataTable.DefaultView.RowFilter = "ColonneName = 'valeurFiltre'"
    ATTENTION : vu que ce n'est plus la clé primaire il va de soit que tu peux avoir plusieurs résultat... A utiliser avec précaution dans ton cas pour trouver une ligne précise...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    444
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 444
    Points : 428
    Points
    428
    Par défaut
    Bon là encore c'est peut-être idiot mais j'ai mis toutes les colonnes ID de chaque table en clé primaire. Pour faire court je dois importer des données dans une BDD vierge mais déjà exixtante donc je dois au moins respecter les tables, surtout que y a des relations entre les tables basées justement sur la colonne ID de chaque table. Mon but est de récupérer l'index de la ligne pour pouvoir aller chercher l'ID correspondant (en principe pour un bdd vierge c'est le même vu que les ID sont en auto incrément + 1).

    Si je passe par la table, je n'aurai pas d'autre choix que de passer par la clé primaire.
    Par contre y a une méthode Find dans les dataview qui permet de récupérer l'index en faisant un test sur les valeurs d'une colonne. Dans ma colonne j'ai viré les doublons et il ne devrait pas y en avoir d'autres normalement.

    Je teste par le dataview et si ça fonctionne pas des masses je changerai la clé primaire de ma table.

    Ou alors si y a une méthode qui permet de faire un truc du genre :

    dans la ligne X, je cherche la valeur Z1 de la colonne Y1 où j'ai la valeur Z2 de la colonne Y2.
    Mieux vaut un petit lien qu'un long discours.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par sphynxounet Voir le message
    (en principe pour un bdd vierge c'est le même vu que les ID sont en auto incrément + 1).
    Il n'y a aucune garantie que ce soit le cas, tu ne dois pas partir de ce principe

    Citation Envoyé par sphynxounet Voir le message
    Par contre y a une méthode Find dans les dataview qui permet de récupérer l'index en faisant un test sur les valeurs d'une colonne.
    Seulement sur les colonnes définies comme clé

    Citation Envoyé par sphynxounet Voir le message
    Ou alors si y a une méthode qui permet de faire un truc du genre :

    dans la ligne X, je cherche la valeur Z1 de la colonne Y1 où j'ai la valeur Z2 de la colonne Y2.
    tu veux dire la table X je suppose ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim rows() As DataRow = LeDataSet.X.Select("Y2 = 'Z2'") ' récupère toutes les lignes de X pour lesquelles Y2 vaut "Z2"
    If rows.Length > 0 Then
        For Each row In rows
            Dim z1 = row("Y1") ' récupère la valeur de Y1 pour cette ligne
            ' faire quelque chose
        Next
    End If

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    444
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 444
    Points : 428
    Points
    428
    Par défaut
    1) Merci Tomlev ça fonctionne du feu de Dieu (juste qu'il faut pas oublier de déclarer la row dans le for each en datarow).

    2) En fait mon pbm dans l'histoire c'est que je voulais récupérer 1 ligne unique en passant comme paramètre la valeur d'un champ, ce qui n'est visiblement pas possible car on ne peut récupérer qu'une collection de lignes (bah oui des fois qu'il y ait plusieurs fois le même champ ). Je comprends mieux comment ça fonctionne maintenant ...



    Merci encore

    Edit : je vais bien finir par m'y faire à ce bouton résolu
    Mieux vaut un petit lien qu'un long discours.

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    n'oublie pas le bouton (en bas de la page)

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 27/09/2015, 14h54
  2. Réponses: 1
    Dernier message: 13/04/2015, 11h17
  3. [WD16] Récupérer la valeur d'une colonne d'une table d'une ligne précise
    Par elghers_hocine dans le forum WinDev
    Réponses: 16
    Dernier message: 06/05/2011, 18h11
  4. Récupérer les valeurs d'une ligne d'une datagrid (Silverlight)
    Par johnaliashead dans le forum Silverlight
    Réponses: 2
    Dernier message: 14/04/2010, 16h01
  5. Réponses: 6
    Dernier message: 31/05/2007, 18h10

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