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

Windows Forms Discussion :

[vb.net][dataview] récupérer l'index des items filtrés ?


Sujet :

Windows Forms

  1. #1
    Membre éprouvé Avatar de graphicsxp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    758
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Luxembourg

    Informations forums :
    Inscription : Avril 2004
    Messages : 758
    Points : 1 022
    Points
    1 022
    Par défaut [vb.net][dataview] récupérer l'index des items filtrés ?
    Bonjour,

    Framework: 2.0
    IDE: VBExpress


    J'essaye de faire quelquechose d'un peu 'tordu'. Voila, j'ai deux datatables (appellons les dt1 et dt2) contenant exactement le meme nombre d'enregistrements.
    J'applique un dataview sur dt1 en me basant sur un filtre qui ne peut etre appliqué sur dt2 . Or, j'aimerais que les enregistrements de dt2 ayant le meme index que les enregistrements 'filtrés' de dt1, soient à leur tour filtrés.
    Comment faire pour récupérer ces index ?

    C'est pas évident à expliquer, j'espere avoir été assez clair.
    Merci

  2. #2
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Je n'ai pas pris le temps de tester mais essayes ceci
    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
    Private WithEvents dv As DataView
    Private WithEvents dt1 As DataTable
    Private WithEvents dt2 As DataTable
     
    '...etc...
     
    Private Function Synchronize() As List(Of Integer)
       Dim MesIndex As New List(Of Integer)
     
       For Each drv As DataRowView In Me.dv
          MesIndex.Add(Me.dt1.Rows.IndexOf(drv.Row))
       Next
     
       Return MesIndex
    End Function

  3. #3
    Membre éprouvé Avatar de graphicsxp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    758
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Luxembourg

    Informations forums :
    Inscription : Avril 2004
    Messages : 758
    Points : 1 022
    Points
    1 022
    Par défaut
    Salut,



    Petite question. Comment filtrer dt2 a partir des index ? Vaut-il mieux déclarer un autre datatable et utiliser importRow ? [EDIT] ce qui d'ailleurs ne va pas marcher puisqu'on ne peut pas avoir la meme datarow dans deux datatables...

  4. #4
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par graphicsxp
    Vaut-il mieux déclarer un autre datatable et utiliser importRow ? [EDIT] ce qui d'ailleurs ne va pas marcher puisqu'on ne peut pas avoir la meme datarow dans deux datatables...
    C'est pas sûr car ImportRow fait je crois une copie du DataRow :

    Tentes ceci alors pour voir
    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
     
    Private WithEvents dv1 As DataView
    Private WithEvents dv2 As DataView
    Private WithEvents dt1 As DataTable
    Private WithEvents dt2 As DataTable
     
    Private Sub Synchronize()
       Dim MesIndex As New List(Of Integer)
     
       For Each drv As DataRowView In Me.dv1
          MesIndex.Add(Me.dt1.Rows.IndexOf(drv.Row))
       Next
     
       Dim dt As DataTable = Me.dt2.Clone
       For Each index As Integer In MesIndex
          dt.ImportRow(Me.dt2.Rows(index))
       Next
     
       Me.dv2 = New DataView(dt)
    End Sub

  5. #5
    Membre éprouvé Avatar de graphicsxp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    758
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Luxembourg

    Informations forums :
    Inscription : Avril 2004
    Messages : 758
    Points : 1 022
    Points
    1 022
    Par défaut
    Citation Envoyé par neguib
    C'est pas sûr car ImportRow fait je crois une copie du DataRow :
    Il me semble que si, j'ai essayé, et une fois importé la row ne contient rien, ni colonne ni données.

    Citation Envoyé par neguib

    Tentes ceci alors pour voir
    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
     
    Private WithEvents dv1 As DataView
    Private WithEvents dv2 As DataView
    Private WithEvents dt1 As DataTable
    Private WithEvents dt2 As DataTable
     
    Private Sub Synchronize()
       Dim MesIndex As New List(Of Integer)
     
       For Each drv As DataRowView In Me.dv1
          MesIndex.Add(Me.dt1.Rows.IndexOf(drv.Row))
       Next
     
       Dim dt As DataTable = Me.dt2.Clone
       For Each index As Integer In MesIndex
          dt.ImportRow(Me.dt2.Rows(index))
       Next
     
       Me.dv2 = New DataView(dt)
    End Sub
    Merci monsieur ! Ca fonctionne impec' !

  6. #6
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par graphicsxp
    Il me semble que si, j'ai essayé, et une fois importé la row ne contient rien, ni colonne ni données....
    Merci monsieur ! Ca fonctionne impec' !
    donc qui sait qui s'est trompé à propos d'ImportRow()

  7. #7
    Membre éprouvé Avatar de graphicsxp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    758
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Luxembourg

    Informations forums :
    Inscription : Avril 2004
    Messages : 758
    Points : 1 022
    Points
    1 022
    Par défaut
    non j'avais raison aussi. Tu m'as dis de faire un .Clone, et la ca fonctionne. Sans ça, ça marche pas. Bon allez c'est toi qui avais raison

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

Discussions similaires

  1. Récupérer les index des RadioButtons
    Par ddubois dans le forum Langage
    Réponses: 2
    Dernier message: 13/10/2008, 11h50
  2. Réponses: 6
    Dernier message: 04/01/2007, 11h41
  3. Réponses: 6
    Dernier message: 05/10/2006, 17h04
  4. Réponses: 2
    Dernier message: 31/08/2006, 09h56
  5. Récupérer la liste des items d'un champs
    Par korntex5 dans le forum Bases de données
    Réponses: 6
    Dernier message: 11/01/2006, 15h50

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