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 :

Pb avec Propriété Filter sur un BindingSource


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Par défaut Pb avec Propriété Filter sur un BindingSource
    Bonjour,

    Voilà plusieurs heures que je passe à essayer de résoudre un bogue surréaliste.
    J'ai un DTG dont la datasource est un bindingsource.
    En modulant mes critères de recherches, j'affecte ces critères à la propriété Filter de ce bindingsource

    J'ai remarqué que l'instruction suivante plante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ligne 543 : bs.Filter = Filtre()
    ... lorsque la fonction Filtre (qui renvoie un String) donne l'expression suivante :
    "Champ <= 2007 AND Quantite<>0"

    alors que ça marche très bien si la fonction Filtre donne "Champ >= 2007 AND Quantite<>0"

    Le message d'erreur obtenu est joint à ce topic.
    Je reconnais qu'avec si peu d'information, il est peu probable que qqun puisse trouver l'erreur, mais si qqun a une piste à me suggérer pour m'orienter, je suis preneur, parce que là, je cale !
    Images attachées Images attachées  

  2. #2
    Membre éclairé
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Par défaut
    En cherchant, je m'aperçois que si je remplace provisoirement mon code par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bs.Filter = "Champ <=2007 AND Quantite<>0"
    Ca marche aussi.

    Pourtant en mode Debug, je suis sûr que la chaîne donnée par ma fonction Filtre est bien la même. Pour m'en convaincre, j'ai copié les 2 chaînes dans le bloc note et elles sont absolument semblables, en apparence.
    Pourtant, si je fais Filtre.Equals("Champ <=2007 AND Quantite<>0"), la réponse est False.

    Bizarre quand même.

    Nota : j'ai vérifié que le AND Quantite<>0 n'a rien à voir et que seule l'expression "Champ<=2007" pose pb.

  3. #3
    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 : 44
    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
    Par défaut
    Pourtant en mode Debug, je suis sûr que la chaîne donnée par ma fonction Filtre est bien la même. Pour m'en convaincre, j'ai copié les 2 chaînes dans le bloc note et elles sont absolument semblables, en apparence.
    Pourtant, si je fais Filtre.Equals("Champ <=2007 AND Quantite<>0"), la réponse est False.
    Tu es sûr qu'il n'y a pas un caractère bizarre dans le filtre, qui ressemblerait à un caractère normal ? Copie-colle le résultat de Filtre() ici pour voir.

    Et éventuellement, poste le code de la fonction Filtre()

  4. #4
    Membre éclairé
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Par défaut
    Je progresse dans le diagnostic mais c'est de plus en plus déroutant.

    Le pb vient dans la façon de construire la chaîne "Champ <= 2007" qui va être affectée à Filter.

    En fait mon code dit, en substance :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Filtre = "Champ " & combo_operand.SelectedItem & " " & txt_année.text
    combo_operand est un combobox dont les 3 valeurs saisies à la main dans VisualStudio sont : =, <= et >= (voir ci-joint la copie d'écran de la propriété Items)

    Donc, quand je choisis "<=" dans combo_operand et "2007" dans txt_année, le bogue évoqué précédemment survient et une vérification montre que
    Filtre.equals ("champ <= 2007") = false !!
    bien qu'un espion montre que combo_operand.SelectedItem = "<="

    Si, provisoirement, je modifie le code en écrivant :
    Filtre ="Champ <= " & txt_année.text
    et si je rentre "2007" dans le champ txt_année, ça marche !!
    Et Filtre.equals ("champ <= 2007") = true !!

    C'est pourquoi je vous joins la copie d'écran de la liste des 3 items tels que saisis dans VS2010. Y a-t-il un bogue connu qui pourrait expliquer que "<=" n'est pas interprété correctement alors que ">=" l'est ?

    J'ai essayé les choses suivantes, sans succès :
    - intervertir l'ordre des items dans la combobox
    - écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Filtre = "Champ " & combo_operand.SelectedItem.toString & " " & txt_année.text
    Images attachées Images attachées  

  5. #5
    Membre éclairé
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Par défaut
    J'ai résolu mon pb, mais c'est un demi-succès, car je ne comprends toujours pas l'explication.

    En effet pour que ça marche, j'ai dû faire 2 choses
    - "supprimer l'espace entre le "<=" et le txt_année.text :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Filtre = "Champ " & combo_operand.SelectedItem & txt_année.text
    - ouvrir la fenêtre de VS2010 permettant de modifier les items, supprimer le "=" et le rajouter (sic !)

    Cela n'explique toujours pas pourquoi je n'ai ce pb qu'avec "<=" et pas avec ">=" ni avec "<" (j'ai essayé)

    J'espère simplement que, après avoir enregistré, fermé mon projet, je ne vais pas retrouver mon bogue à la prochaine ouverture de mon projet !

  6. #6
    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 : 44
    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
    Par défaut
    Citation Envoyé par noftal Voir le message
    - ouvrir la fenêtre de VS2010 permettant de modifier les items, supprimer le "=" et le rajouter (sic !)
    Justement j'allais te suggérer de réécrire le contenu du ComboBox. Si ça a marché, c'est que les caractères n'étaient pas ceux que tu croyais... ça arrive parfois en faisant des copier-coller depuis internet, parfois on récupère des caractères typographiques au lieu des caractères normaux. Par contre si tu avais saisi ça à la main, c'est plus surprenant.

  7. #7
    Membre éclairé
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Par défaut
    Par contre si tu avais saisi ça à la main, c'est plus surprenant.
    Ben oui, c'est le cas. Pour quelques signes, c'était quand même plus simple !

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

Discussions similaires

  1. Binder la propriété IsEnabled d'un bouton avec un trigger sur une textbox
    Par Will Fou dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 04/09/2012, 09h42
  2. Problème avec la propriété filter
    Par Morgoth818 dans le forum VBA Access
    Réponses: 2
    Dernier message: 25/08/2007, 21h20
  3. Problème avec la propriété "Filter" de mes DBLookupComboBox
    Par CleeM dans le forum Bases de données
    Réponses: 3
    Dernier message: 29/06/2007, 13h53
  4. Réponses: 12
    Dernier message: 23/04/2007, 16h37
  5. [C# 2.0] Propriété Filter de BindingSource
    Par hobotalker dans le forum Windows Forms
    Réponses: 1
    Dernier message: 27/04/2006, 10h20

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