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 :

Filtre des lignes sélectionnées dans DataGrid


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite

    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 789
    Par défaut Filtre des lignes sélectionnées dans DataGrid
    Bonjour à tous,

    Maintenant que j'arrive à charger un *.dbf dans ma form (merci TomLev ), j'aimerais pouvoir y appliquer un filtre.
    Pour ce faire, j'aimerais à partir d'un bouton, pouvoir ne faire apparaître que les lignes sélectionnées et bien sur, par un autre bouton, faire apparaître toute ma table.

    Après X heures de recherche sur le Net, a priori il y aurait peut-être SelectedRow à utiliser mais je n'arrive pas à trouver comment faire.

    Merci de tous vos conseils.

    Cordialement

    Christophe

  2. #2
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Pour réellement filtrer les données (c'est à dire en fonction des valeurs), il faudrait utiliser un bindingsource qui possède les fonctionnalités nécessaire.

    Dans ton cas, si j'ai bien compris, le filtre c'est en réalité les lignes sélectionné. Peut être que je me trompe de voie mais je ferais ça:

    Tu as ta datatable DT1 lié a ton datatgrid.

    L'utilisateur sélectionne plusieurs ligne, il clique sur le bouton. Il faut parcourir les lignes sélectionnés en effet avec SelectedRows. après il y a plusieurs variantes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim Liste_id as New List (Of Integer)
    For Each DGR as DataGridRows in MonDatagrid.Rows
     
          List_id.Add(DGR.Item("ID"))
     
    Next
    Après tu te crées un deuxième datatable:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim DT2 as New Datatable
     
    For each DR as Datarow in DT1
     
      If Liste_id.Contains(DR.Item("ID")) Then
        Copie(DR, DT2) 'Fonction qui va copié ta ligne
      End If
     
    Next
    Et enfin:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonDatagrid.Datasource = DT2
    Sur le deuxième bouton (revenir en arrière), facile:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonDatagrid.Datasource = DT1

  3. #3
    Membre émérite

    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 789
    Par défaut
    Bonjour mactwist69,

    Merci beaucoup pour ces conseils et codes.
    Toutefois, il semble que DataGridRows n'existe pas en VBNet 2008.
    J'ai fait des recherches pour trouver l'équivalent mais je n'ai rien trouvé.

    Pourrais-tu compléter mes lacunes ?

    Merci beaucoup

    Cordialement

    Christophe

  4. #4
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Citation Envoyé par mactwist69 Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim Liste_id as New List (Of Integer)
    For Each DGR as DataGridRows in MonDatagrid.Rows
     
          List_id.Add(DGR.Item("ID"))
     
    Next
    En effet toute cette partie est ... inexacte...

    Utilises tu un Datagrid, ou un Datagridview ? J’espère un Datagridview qui est quand même plus pratique. Dans ce cas le code serait plutôt:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim Liste_id as New List (Of Integer)
    For Each DGR as DataGridViewRow in MonDatagridView.SelectedRows
     
          List_id.Add(DGR.Item("ID"))
     
    Next

  5. #5
    Membre émérite

    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 789
    Par défaut
    Bonjour MacTwist69,

    Merci pour ce correctif.
    Malheureusement, je n'ai as pu me servir de ton exemple en raison de changement de dénomination des termes.
    Toutefois, cela m'a inspiré dans mes recherches et j'ai finalement réussi à faire ce que je souhaitais.
    Cela dit, encore merci de ton aide car cet exemple de code va me servir pour autre chose.

    Voici donc mon code, pour ceux que cela interesse.
    Je me permets de vous rappeler que je ne suis qu'un débutant alors soyez cool pour les critiques, aussi constructives soient elles.
    Il demande sans aucuns doutes à être amélioré.

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    Private Sub Btn_Afficher_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn_Afficher.Click
            'Nombre de ignes sélectionnées
            Dim SelectedRowCount As Integer = _
                        DataGridView1.Rows.GetRowCount(DataGridViewElementStates.Selected)
     
            ' Créer une nouvelle DataTable
            Dim ObjetDataTable2 As DataTable = New DataTable("DT2")
     
            'Si toute la table est affichée
            If Me.Btn_Afficher.Text = "Tout" Then
                'S'il n'y a pas de lignes de sélectionnées
                If SelectedRowCount = 0 Then
                    MsgBox("Il n'y a aucunes lignes sélectionnées ! ! !")
                    Exit Sub 'On arrête le code
                Else
                    'On change le texte du bouton
                    Me.Btn_Afficher.Text = "Sélectionnés"
     
                    ' Declaration de variables DataColumn et DataRow objects.
                    Dim oDataColumn As DataColumn
                    Dim oDataRow As DataRow
                    Dim oDataSet = New DataSet()
                    Dim i As Integer
     
                    ' Créer un nouveau DataColumn, lui donner un DataType, un nom, divers valeurs 
                    'pour ses propriétés et l'ajouter à la DataTable.
                    oDataColumn = New DataColumn()
                    'Type de colonne
                    oDataColumn.DataType = System.Type.GetType("System.String")
                    'Nom de la colonne
                    oDataColumn.ColumnName = "Location"
                    'Ajoute la colonne
                    ObjetDataTable2.Columns.Add(oDataColumn)
                    ' Ajouter la Table au DataSet.
                    oDataSet.Tables.Add(ObjetDataTable2)
     
                    'Parcoure toute la table
                    For i = 0 To ObjetDataTable.Rows.Count - 1
                        'Si on tombe sur une ligne sélectionnée
                        If Me.DataGridView1.Rows(i).Selected = True Then
                            'Création d'une nouvelle ligne
                            oDataRow = ObjetDataTable2.NewRow()
                            'Récupère la valeur de l'information
                            oDataRow("Location") = Me.DataGridView1.Rows(i).Cells(0).Value
                            'Ajout de l'information
                            ObjetDataTable2.Rows.Add(oDataRow)
                        End If
                    Next i
     
                    'Change la source du datagrid
                    Me.DataGridView1.DataSource = ObjetDataTable2
                    'Selectionne toutes les lignes
                    For i = 0 To SelectedRowCount - 1
                        Me.DataGridView1.Rows(i).Selected = True
                    Next
     
                End If
            Else 'Sinon, c'est que le texte sur le bouton est "Sélectionnés"
                'On rechange le texte du bouton
                Me.Btn_Afficher.Text = "Tout"
                'Création d'un nouvelle liste
                Dim List_id As New List(Of String)
                'Parcoure les lignes de la table, l'utilisateur a peut-être deselectionné des lignes
                For i = 0 To Me.DataGridView1.Rows.Count - 1
                    'Si une ligne est sélectionnée
                    If Me.DataGridView1.Rows(i).Selected = True Then
                        'On l'ajoute à la liste
                        List_id.Add(Me.DataGridView1.Rows(i).Cells(0).Value)
                    End If
                Next i
                'On affiche la table origine
                Me.DataGridView1.DataSource = ObjetDataTable 'Déclaré lors du Form_Load
                Dim j As Integer
                'On parcoure la table
                For i = 0 To ObjetDataTable.Rows.Count - 1
                    'On deselectionne la ligne
                    Me.DataGridView1.Rows(i).Selected = False
                    'On parcoure la liste
                    For j = 0 To List_id.Count - 1
                        'Si un texte de la liste correspond au texte de la ligne
                        If Me.DataGridView1.Rows(i).Cells(0).Value = List_id.Item(j).ToString Then
                            'On sélectionne la ligne
                            Me.DataGridView1.Rows(i).Selected = True
                        End If
                    Next
                Next
            End If
     
        End Sub
    Cordialement

    Christophe

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

Discussions similaires

  1. Récupération des lignes sélectionnées dans visual studio 2008
    Par isidore31 dans le forum Visual Studio
    Réponses: 0
    Dernier message: 04/05/2013, 07h57
  2. Réponses: 2
    Dernier message: 28/09/2011, 13h51
  3. Réponses: 3
    Dernier message: 02/03/2011, 11h27
  4. Réponses: 10
    Dernier message: 06/05/2010, 20h51
  5. Adresse des cellules sélectionnées dans le résultat d'un filtre
    Par philoflore dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 18/04/2008, 11h59

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