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

C# Discussion :

MaskedTextBox et dataGridView


Sujet :

C#

  1. #1
    Membre du Club
    MaskedTextBox et dataGridView
    Bonjour,

    Après x^² essais je m'adresse à vous !
    Mon problème est le suivant, je requête une base dont un champ est numérique comme suit:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    Select id, Nom AS Nom,FORMAT(Symbole,'0-000-0000') AS Symbole FROM table_piece ORDER BY Nom"

    Je veux un format sous la forme "0-000-0000".
    Jusque là pas de soucis ! Je fais une DataTable en source de mon dataGridView.
    Or j'aimerais filtrer ce dataGridView, plus précisément la colonne qui comprend ce format avec un MaskedTextBox.
    ça fait une heure que je m'arrache les cheveux sur le problème, j'essaye de filtrer de la manière suivante:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    (dgvPiece.DataSource as DataTable).DefaultView.RowFilter = string.Format(
                    "Symbole LIKE '{0}%'",textSymbolePiece.Text);
    (exemple de code car j'en ai essayé des dizaines)
    Je voudrais que si l'utilisateur ne remplit pas entièrement la MTextBox, le filtre fonctionne quand même, " -123- " => renvoie tous les résultats avec 123 au centre du format.
    Sinon j'ai essayé d'enlever les séparateurs des données du Dgv et puis je filtre simplement deux chaines, mais je n'arrive pas à manipuler la donnée du DGV.
    Je m'y prends peut être mal, peut être est il maladroit d'imposer le format au niveau du SQL...
    Mais je pense que le problème serait le même au niveau du filtrage...
    Si quelqu'un à déjà rencontré ce type de problème...

  2. #2
    Expert confirmé
    Il manque un % au début de la chaîne de caractère que tu passes à l'opération LIKE en sql.

    En l'état, tu recherches les symboles qui commencent par ce que l'utilisateur a encodé.

    Si tu veux rechercher les symboles qui contiennent ce que l'utilisateur a encodé, il faut faire
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    LIKE '%xxx%'
    où xxx est ton paramètre.
    Kropernic

  3. #3
    Membre du Club
    Bien sur ça ce n'est pas un problème, le problème vient que si l'utilisateur veut juste rentré un chiffre par exemple "7-xxx-xxxx il ne renvoit pas tous les éléments, car le textBox.Text va renvoyer "7-___-____, là on pourrait dire simple du fait un String.Replace, or non car dans le DGV, les symbole sont sous le format 0-000-0000 et quand je fais les double replace il ne trouve rien.

  4. #4
    Expert confirmé
    Mmmh... J'suis pas bien sûr de comprendre.

    Mais sinon comme dit dans l'autre discussion, filtrer sur le dgv comporte le risque de filtrer sur des données potentiellement obsolètes.

    Sinon personnellement, je ne filtrerais pas sur le dgv mais sur la liste que je lui passe et je mets ensuite à jour le dgv avec la nouvelle liste filtrée. Cela vous facilitera la vie
    Kropernic

  5. #5
    Membre du Club
    Le but étant d'avoir un maskedTextBox comme barre de "recherche" pour une colonne de mon DGV, colonne qui est formatée comme ceci:
    Dans la table Access : 08235612
    Dans le Dgv : 0-823-5612: à partir de là j'aurais aimé pouvoir filtrer selon le numéro:
    Or quand je fais un
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    RowFilter = "Symbole like '%{0}%'
    Il faut prendre en compte que Symbole est un string de cette forme "x-xxx-xxxx", et donc si je veux faire une recherche il faut obligatoirement que les séparateur soit présents dans le maskedTextBox... Je ne peux pas juste écrire 4 chiffres et il me retourne tous les Symbole où ils figurent peut importe leurs positions...

  6. #6
    Expert confirmé
    J'ai trouvé ceci sinon...
    Kropernic