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 :

Probleme de filtre sur BindingSource


Sujet :

VB.NET

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Points : 148
    Points
    148
    Par défaut Probleme de filtre sur BindingSource
    Bonjour,

    Petit souci de dernière minutes, j'ai un programme qui marché très bien jusqu’à hier soir, d'un coup, marche plus comme je le souhaite. J'ai essayé de regarder si mes dernière modification on affecter mon code mais rien. Donc je m'explique, j'ai une DataTable qui est remplie progressivement, cette DataTable est ensuite entrée dans un BindingSource qui remplie mon DGV. Lorsque je souhaite réaliser un filtre sur mon DGV, j'ai un système de classe qui permet d'enregistrer mes filtres et me renvois une requête qui s'applique sur le bindingSource. Mon petit souci est que lorsque j'essaye d'effacer mon filtre, une partie des lignes du DGV ne reviennent pas.

    voila un ensemble de mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bindingSourceAlarme.RemoveFilter()
    Pour effacer le filtre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bindingSourceAlarme.Filter = mFiltre.Requet
    Exemple d'application d'un filtre.

    En tous cas, j'ai retourné mon code dans tous les sens, j'ai pas trouvé d’où viens mon problème. Je pense que sa viens de ma DataTable qui a du être magnipulé lorsque j'applique mon filtre mais le souci est qu'une fois que ma DataTable est remplie, a aucun moment, je la manipule donc je comprend pas.

    Merci d'avance pour vos suggestion !!

  2. #2
    Membre actif Avatar de DeWaRs
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 291
    Points : 269
    Points
    269
    Par défaut
    Bonjour,

    Pourrais-tu partager un peu plus de code ? Je pense qu'il faut que tu rebind ton datagridview quand tu change ta requête de filtre non ?

    DeWaRs

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Points : 148
    Points
    148
    Par défaut
    Je viens de cerné un peu plus mon bug, mon bug ce produit lorsque je met un filtre dans mon BindingSource dans ma méthode FiltrerDGV comme sur mon exemple suivant ou suivant la ligne selectionné de mon DGV et la colonne, j'ai réalise un filtre sur l'ensemble de mon DGV ou je prendre uniquement toute les ligne qui ont le meme résultat que la cellule sélectionné:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If DicoFiltre.Item(NameColonne & sender.Text).Etat = False Then
                        DicoFiltre.Item(NameColonne & sender.Text).Etat = True
                        DicoFiltre.Item(NameColonne & sender.Text).Requet = NameColonne & " = '" & CelluleSelected & "'"
                        FiltrerDGV()
                    End If
    Code précédent dans un menu ou bouton.

    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
        Public Sub FiltrerDGV()
            Dim mCountFiltreTotal As Integer = CountFiltreTotal()
            Dim mCountFiltreAppliquer As Integer
            FenGestionnaire.bindingSourceAlarme.RemoveFilter()
            If mCountFiltreTotal <> 0 Then
                AfficherEtatFiltrer(True)
            Else
                AfficherEtatFiltrer(False)
            End If
            For Each mFiltre As Filtre In DicoFiltre.Values
                If mFiltre.Etat = True Then
                    If mCountFiltreTotal = 1 Then
                        FenGestionnaire.bindingSourceAlarme.Filter = mFiltre.Requet'Mon bug ici !!
                    Else
                        If mCountFiltreAppliquer = 0 Then
                            FenGestionnaire.bindingSourceAlarme.Filter = mFiltre.Requet
                            mCountFiltreAppliquer = mCountFiltreAppliquer + 1
                        Else
                            FenGestionnaire.bindingSourceAlarme.Filter = FenGestionnaire.bindingSourceAlarme.Filter + " AND " + mFiltre.Requet
                            mCountFiltreAppliquer = mCountFiltreAppliquer + 1
                        End If
                    End If
                End If
            Next
        End Sub
    Mon bug ne survient que si je ne sélectionne pas la première ligne !! et si je selectionne la premier ligne, apres le removefiltre du bindingsource ne marche pas !!

    Voila message qui apparait si je fais un filtre sur par exemple la 2 ieme ligne de mon DGV :
    Nom : Sans titre.png
Affichages : 198
Taille : 23,3 Ko

    Merci d'avance pour vos suggestions !!

    PS: Dsl s'il manque mes classes Filtre, le DicoFiltre et leur remplissage mais l'erreur est en dehors !!

  4. #4
    Expert éminent 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
    Points : 7 903
    Points
    7 903
    Par défaut
    Au moment du bug, que contient mFiltre.Requet ?
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  5. #5
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Points : 148
    Points
    148
    Par défaut
    Il contient l'équivalent d'une requête SQL pour le filtre du BindingSource de type String.
    Sachant que Priority est une colonne du DataGridView et Urgent est l'un des éléments qui remplie une cellule de la colonne Priority.

  6. #6
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Points : 148
    Points
    148
    Par défaut
    Je viens de réalisé un petit teste avec genre deux boutons sur mon Form, un truc tous con pour voir si sa marche.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            bindingSourceAlarme.Filter = "Priority = 'Low'"
            DataGridView1.DataSource = bindingSourceAlarme
        End Sub
     
        Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
            bindingSourceAlarme.RemoveFilter()
        End Sub
    Malgré ce teste, j'obtiens toujours la meme erreur, sa coince au niveau de mon DGV ou DataTable ou BindingSource je pense, j'obtiens le meme message d'erreur que dans la foto que j'ai déjà postulé.

  7. #7
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Points : 148
    Points
    148
    Par défaut
    Alors petit teste sur un projet tous neuf a par :

    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
    Public Class Form1
        Public mDataTable As New DataTable()
        Public mBindingSource As New BindingSource
        Public DicoColonne As Dictionary(Of String, String) = New Dictionary(Of String, String)
     
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
     
            DicoColonne.Add("1", "Col1")
            DicoColonne.Add("2", "Col2")
            DicoColonne.Add("3", "Col3")
     
            For Each Col As String In DicoColonne.Values
                Dim Cols As DataColumn = New DataColumn()
                Cols.ColumnName = Col
                mDataTable.Columns.Add(Cols)
            Next
     
            For Each col As DataGridViewColumn In DataGridView1.Columns
                mDataTable.Columns.Add(col.Name)
            Next
     
            mBindingSource.DataSource = mDataTable
     
            With DataGridView1
                .DefaultCellStyle.NullValue = Nothing
                .DefaultCellStyle.BackColor = Drawing.Color.Gray
                .RowHeadersVisible = False
                .DataSource = mBindingSource
            End With
     
            mDataTable.Rows.Add(Date.Now, "brother", "high")
            mDataTable.Rows.Add(Date.Now, "brother", "Urgent")
            mDataTable.Rows.Add(Date.Now, "brother", "Low")
            mDataTable.Rows.Add(Date.Now, "brother", "high")
            mDataTable.Rows.Add(Date.Now, "brother", "high")
            mBindingSource.DataSource = mDataTable
            DataGridView1.DataSource = mBindingSource
        End Sub
     
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            mBindingSource.Filter = "Col3 = 'Low'"
        End Sub
     
        Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
            mBindingSource.RemoveFilter()
        End Sub
    End Class
    Résultat, sa marche très bien, j'arrive a filtrer mon DGV. Par contre dans mon projet globale sur le quel je travail, sa plante quand je veux réaliser un filtrage de la même manière !!

  8. #8
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Points : 148
    Points
    148
    Par défaut
    Problème résolu, j'avais juste un conflit entre mon filtre et un événement qui marche en fonction de la sélection et de-sélection d'une ligne dans le datagridview sachant que le filtrage réalisé automatiquement une de-sélection puis sélection, sa lancé automatiquement mon événement qui lui utilisé des parties de mon DGV donc conflit. Ce même conflit est résolue avec une petit sécurité sur mon événement.

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

Discussions similaires

  1. Problem de Filtre sur un champ
    Par Farow dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 28/04/2011, 10h29
  2. probleme de filtre sur une colonne
    Par kyryan dans le forum Composants
    Réponses: 3
    Dernier message: 15/09/2010, 12h34
  3. Probleme de filtre sur un DBgrid
    Par STELLLA dans le forum Bases de données
    Réponses: 4
    Dernier message: 08/03/2009, 13h54
  4. Probleme de filtre avec fonction Dlookup sur champ texte
    Par Piloupilou999 dans le forum Access
    Réponses: 5
    Dernier message: 27/01/2007, 22h41
  5. Probleme sur filtre sur formulaire
    Par christ-94 dans le forum IHM
    Réponses: 8
    Dernier message: 09/06/2006, 11h39

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