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 :

Comment filtrer un DataGridView de plusieurs lignes ?


Sujet :

VB.NET

  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Août 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2009
    Messages : 18
    Par défaut Comment filtrer un DataGridView de plusieurs lignes ?
    Bonjour,

    Voici mon code :

    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
    
      Sub RemplissageSectionCarte() 
            Dim Dv_CONFAPI As New DataView
            Dim Dv_CARTAPI As New DataView
            Dim ROW As Integer = 0
            Dim MaxRowDataGridView As Integer				
                        Dv_CONFAPI.Table = Me.DataSet.Tables("CONFIG_API")
                        Dv_CONFAPI.RowFilter = "IdAutomate  = '"+Me.TextBoxIdAutomate.Text + "'"
                        Me.DataGridView7.DataSource = Dv_CONFAPI
                        MaxRowDataGridView = Me.DataGridView7.RowCount
    
                Do While ROW <> MaxRowDataGridView - 1
                    Dv_CARTAPI.Table = Me.DataSet.Tables("CARTE_API")
                    Dv_CARTAPI.RowFilter = "RefCarteApi ='" + Me.DataGridView7.Item(1, ROW).Value.ToString + "'"
                    Me.DataGridView1.DataSource = Dv_CARTAPI
                    ROW += 1
                Loop
       End Sub

    En faite, j'ai deux tables : CONFIG_API et CARTE_API dans mon DataSet.

    Je réaliser un premier filtre sur une dataView contenant la table CONFIG_API en fonction de l'id Automate contenue dans la text box "TextBoxIdAutomate". J'affecte ensuite la dataView filtrée au DataGridView7.

    Ensuite, je veux réaliser un second filtre sur une autre dataview contenant la table CARTE_API en fonction de la colonne "RefCarteApi" de mon DataGridView7.

    Le problème est que le DataGridView7 contient plusieurs lignes c'est pour cette raison que j'ai tenté d'utiliser une boucle While afin de parcourir les lignes DataGridView7 cependant cette boucle ne fonctionne pas :

    Seule la dernière valeur filtrée apparaît dans le DataGridView1, les précédentes ont été écrasées par la dernière...

    Quelqu'un pourrait-il m'aider face à ce problème ?


    Merci d'avance et n'hésitez pas à me demander des précisions...

  2. #2
    Membre chevronné Avatar de Redouane
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    435
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 435
    Par défaut
    Bonjour,

    Tu peux créer une DataTable dans ton code, qui va contenir des colonnes semblables à ceux de ta Table "CARTE_API"
    et dans la boucle tu vas remplir cette dernière avec le résultat de ta requette, qlq chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim dt As DataTable = New DataTable("temp")
    ' Ajouter des colonnes
    Do While ROW <> MaxRowDataGridView - 1
      .......
      dt.Rows.Add(valeur1,valeur2,....) 
      .......
      ROW += 1
    Loop
     
    Me.DataGridView1.DataSource = dt
    Bonne courage

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Août 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2009
    Messages : 18
    Par défaut
    Merci Redouane de m'avoir apporté une réponse si rapidement.
    J'ai effectué les modifications suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim dt As DataTable = New DataTable("temp")
    ...
    Do While ROW <> MaxRowDataGridView - 1
                    Dv_CARTAPI.Table = Me.DataSet.Tables("CARTE_API")
                    Dv_CARTAPI.RowFilter = "RefCarteApi ='" + Me.DataGridView7.Item(1, ROW).Value.ToString + "'"
                    dt.Rows.Add(Dv_CARTAPI)
                    ROW += 1
    Loop
                Me.DataGridView1.DataSource = dt
    Cependant j'ai une erreur :
    L'exception System.ArgumentException n'a pas été gérée
    Message="Le tableau en entrée est plus long que le nombre de colonnes de cette table."
    Je suis novice en VB, je ne vois pas trop ce qu'il faut faire !

  4. #4
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Août 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2009
    Messages : 18
    Par défaut
    Citation Envoyé par Redouane Voir le message
    Bonjour,

    Tu peux créer une DataTable dans ton code, qui va contenir des colonnes semblables à ceux de ta Table "CARTE_API"
    et dans la boucle tu vas remplir cette dernière avec le résultat de ta requette, qlq chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim dt As DataTable = New DataTable("temp")
    ' Ajouter des colonnes
    Do While ROW <> MaxRowDataGridView - 1
      .......
      dt.Rows.Add(valeur1,valeur2,....) 
      .......
      ROW += 1
    Loop
     
    Me.DataGridView1.DataSource = dt
    Bonne courage
    Re !!

    Alors j'ai effectué plusieurs modification depuis mon dernier message...
    J'ai compris finallement à quoi tu voulais en venir avec "les colonnes semblables... " et j'ai ainsi réussi à filtrer mon datagridView.

    Voici le code pour ceux à qui cela pourrait être utile :

    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
        Sub RemplissageSectionCarte()
            Dim Dv_CONFAPI As New DataView
            Dim ROW As Integer = 0
            Dim MaxRowDataGridView As Integer
            Dim NumRow As Integer
    'Création de la DataTable fictive avec les colonnes similaires à la table CARTE_API'
            Dim dt As DataTable = New DataTable
            dt.Columns.Add("RefCarteApi")
            dt.Columns.Add("DesignationCarteApi")
            dt.Columns.Add("MarqueCarteApi")
            dt.Columns.Add("TypeCarteApi")
            dt.Columns.Add("CommentCarteApi")
     
                Dv_CONFAPI.Table = Me.DataSet.Tables("CONFIG_API")
                Dv_CONFAPI.RowFilter = "IdAutomate = '" + Me.TextBoxIdAutomate.Text + "'"
                Me.DataGridView7.DataSource = Dv_CONFAPI
     
                MaxRowDataGridView = Me.DataGridView7.RowCount
     
                Do While ROW <> MaxRowDataGridView - 1
    'Je recherche la position de la RefCarteApi dans le BindingSource CARTEAPI'
                    Me.CARTEAPIBindingSource.Position = Me.CARTEAPIBindingSource.Find("RefCarteApi", Me.DataGridView7.Item(1, ROW).Value.ToString)
    'Je récupère la position courante' 
                    NumRow = Me.CARTEAPIBindingSource.Position
    'Je remplis ma DataTable fictive avec les valeurs souhaitées'
                    dt.Rows.Add(Me.DataGridView7.Item(1, ROW).Value.ToString, Me.DataSet.CARTE_API.Rows(NumRow).Item("DesignationCarteApi").ToString, Me.DataSet.CARTE_API.Rows(NumRow).Item("MarqueCarteApi").ToString, Me.DataSet.CARTE_API.Rows(NumRow).Item("TypeCarteApi").ToString, Me.DataSet.CARTE_API.Rows(NumRow).Item("CommentCarteApi").ToString)
                    ROW += 1
                Loop
                Me.DataGridView1.DataSource = dt
    Voila, je te remercie beaucoup pour ton aide car je ne savais pas que l'on pouvait faire des DataTable fictives !

    A bientôt!

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/03/2008, 12h42
  2. Réponses: 10
    Dernier message: 23/02/2008, 19h01
  3. [MySQL] Comment affiché un résultat avec plusieurs lignes et plusieurs champs dans un tableau
    Par Yagami_Raito dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 15/05/2007, 14h19
  4. Comment écrire un littéral sur plusieurs lignes ?
    Par ted the Ors dans le forum Cobol
    Réponses: 10
    Dernier message: 06/08/2006, 10h47
  5. Comment ecrire du code sur plusieurs lignes?
    Par tooneygirl dans le forum Access
    Réponses: 5
    Dernier message: 15/06/2005, 16h03

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