Formatage d'une donnée texte en DataBinding

Résolu
Cricri1670 Messages postés 32 Date d'inscription samedi 15 décembre 2007 Statut Membre Dernière intervention 10 avril 2014 - Modifié par Cricri1670 le 9/11/2013 à 16:59
Cricri1670 Messages postés 32 Date d'inscription samedi 15 décembre 2007 Statut Membre Dernière intervention 10 avril 2014 - 20 janv. 2014 à 13:50
Bonjour,

J'ai une TextBox dont la propriété Text est liée par DataBinding à une valeur de base de données. J'aimerai présenter cette donnée entre parenthèses. J'ai donc regardé du coté de la "Mise en forme et format personnalisé" ou un format "Personnalisé" est proposé.
Problème : Que rentrer dans cette case pour obtenir "(MaDonnée)"
Pour l'instant, j'ai beau essayer plein de trucs et chercher dans l'aide, le résultat n'est pas formaté.

Merci d'avance.

11 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
9 nov. 2013 à 17:42
Bonjour,
de quelle "case" parles-tu ?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
9 nov. 2013 à 18:00
De toutes manières :
1) Le contenu d'une textbox liée (et tu dis être dans ce cas) ne peut être modifié que si sa propriété ReadOnly est à False (vérifie donc cet aspect).
2) si pas en lecture seule, ne cherche pas à formater, mais à ajouter tes parenthèses à la chaîne et à remplacer ensuite celle-ci par le résultat de cet ajout.
3) s'agissant d'une textbox liée : le champ correspondant de ta table de données sera également affecté par cette modification. Est-ce vraiment ce que tu souhaites ?)
0
Cricri1670 Messages postés 32 Date d'inscription samedi 15 décembre 2007 Statut Membre Dernière intervention 10 avril 2014
9 nov. 2013 à 18:18
Je me suis trompé sur le contrôle lié : c'est un Label car les données ne sont exposées que pour visualisation. En fait, mon Binding se fait sur un ListBox et deux Labels. La sélection d'une valeur dans le ListBox entraîne l'affichage des deux autres valeurs du Row correspondant dans les Labels. Mais pour des raisons "esthétiques", je souhaite placer une de ces valeurs entre parenthèses. J'ai un composant BindingSource et les liaisons sont définies dans les propriétés de chaque contrôle.
Je parle de la case "Format personnalisé" qui se trouve dans la fenêtre "(Avancées)" de la propriété "(DataBinding)" de mon Label.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
9 nov. 2013 à 18:44
"La sélection d'une valeur dans le ListBox entraîne l'affichage des deux autres valeurs du Row correspondant dans les Labels".
Eh bien ===>> met donc ta selection dans une variable à laquelle tu ajoute un "(" devant et un ")" derrière et affiche ce resultat dans ton label.
Là, c'est le B.A.BA du traitement d'une chaîne de caractères .!
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
19 janv. 2014 à 21:35
Ah çà ! Tu m'attribues un -1 et fais ce que je t'ai dit de faire ( ajouter tes parenthèses par concaténation !
C'est une plaisanterie ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Cricri1670 Messages postés 32 Date d'inscription samedi 15 décembre 2007 Statut Membre Dernière intervention 10 avril 2014
9 nov. 2013 à 21:09
Le but est d'utiliser le Binding automatique !
Sinon, je sais rechercher un DataRow dans une Table et recopier les valeurs dans des contrôle...
Mais dans les propriétés du Binding, il y a cette possiblité de formatage.
Comment utiliser cette possibilité ? Comment créer une chaîne de mise en forme ?
--
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
9 nov. 2013 à 22:02
"Je me suis trompé sur le contrôle lié : c'est un Label car les données ne sont exposées que pour visualisation"
Merci pour le -1, mais un label n'est pas, lui "lié", hein ...
Je te laisse là.
Bonne chance.
0
Cricri1670 Messages postés 32 Date d'inscription samedi 15 décembre 2007 Statut Membre Dernière intervention 10 avril 2014
Modifié par Cricri1670 le 9/11/2013 à 22:15
Bah -1 parce que la réponse n'est pas bonne ! Ca n'exclue pas un +1 si les réponses sont utiles...

Je parle de DataBinding... Un Label peut être lié puisqu'il a une propriété DataBinding qui fonctionne très bien. Un Label peut exposer des données.

J'essaye de reprendre : Tout fonctionne en Binding automatique. ListBox liée à un BindingSource, Label1 lié à la seconde colonne du BindingSource, Label2 lié à la troisième colonne. Mon seul problème est cette chaîne de formatage (la propriété existe) afin d'encadrer la valeur DB par des parenthèses en présentation sur le Label2. Je n'ai pas de mise à jour des données sur ce Form.
J'étais pas clair ?

--
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
9 nov. 2013 à 22:16
1) Si ce label n'est là que pour visualisation (c'est bien ce que tu as dit), je ne vois pas la nécessité de le lier !
2) déjà dit : les données d'un contrôle lié (et ce d'autant qu'un label n'est pas un contrôle éditable) ne sont pas modifiables
3) si ce n'est que pour visualiser, je t'ai déjà donné la réponse.
Bye.
0
Cricri1670 Messages postés 32 Date d'inscription samedi 15 décembre 2007 Statut Membre Dernière intervention 10 avril 2014
Modifié par Cricri1670 le 9/11/2013 à 22:34
Ok !

Il serait donc inutile d'afficher des données secondaires quand on sélectionne une donnée d'entrée ???
Et pourquoi Microsoft a mis cette propriété de formatage dans les propriétés de binding ?
Et comment on fait (par exemple) pour afficher un numéro de téléphone formaté plutôt qu'une simple suite de chiffres ?

Je persiste : j'aimerai savoir quel chaine de formatage on doit mettre dans cette case de format personnalisé pour formater les données, que ce soit en affichage ou en binding complet.

Si tu n'as pas la réponse, c'est pas un problème mais faut pas me dire que ce que je fais est inutile (j'en ai besoin) ou qu'on peut faire autrement (je le sais déjà).


--
0
Cricri1670 Messages postés 32 Date d'inscription samedi 15 décembre 2007 Statut Membre Dernière intervention 10 avril 2014
19 janv. 2014 à 21:22
Après de grosses recherches, j'ai lu dans un livre que le formatage des données texte n'est pas permis en Binding. La propriété dont je parlais sert à exposer des données numériques ou date (même dans un Label...) de façon formatée.
Pour formater une valeur texte, il faut intercepter l'évènement Format en créant un handler et modifier la valeur e.value dans la procédure. Ce qui donne dans mon cas :

AddHandler MonLabel.DataBindings.Item(0).Format, AddressOf LabelTYPE_Format

puis

Private Sub MonLabel_Format(sender As Object, e As ConvertEventArgs)
e.Value = "(" & e.Value.ToString & ")"
End Sub


De cette façon, on utilise la simplicité du Binding et on peut formater la donnée texte entrante. Bien entendu, ceci ne peut se faire que sur de l'exposition de données (en lecture) car il serait autrement plus compliqué de procéder ainsi en modification de données. Dans ce cas, il est plus simple d'utiliser un contrôle permettant le formatage tel qu'un RichTextBox ou un MaskedTextBox.

Bonne programmation...
0
Cricri1670 Messages postés 32 Date d'inscription samedi 15 décembre 2007 Statut Membre Dernière intervention 10 avril 2014
Modifié par Cricri1670 le 19/01/2014 à 21:53
Faut quand même avouer qu'il y a une petite différence entre ce que tu écris et ma réponse... Je justifie ce que je dis et je ne prends personne pour un idiot ("c'est le B.A.BA...")
Par ailleurs, tu n'as jamais parlé de créer un Handler pour intercepter l'évènement Format. Tu ne m'as pas donné non plus d'exemple de code. Mais si le -1 t'empêche de dormir, je vais régler ça très vite, le forum étant fait pour aider les gens, pas pour régler ses comptes.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 20/01/2014 à 11:12
Je ne sais pas comment réagit VB.Net, mais, sous VB6, je me serais passé de cette méthode. J'aurais simplement ajouté un label labelx au premier plan SUR le label lié et j'aurais simplement agi lors de l'évènement Change du label lié. )))>>
Ex VB6 :
Private Sub Label1_Change()
Labelx.Caption = "(" & Label1.Caption & ")"
End Sub
J'aurais même, au besoin, mis en invisible le label lié.

Mais je dis peut-être une bêtise qui ne te convient pas (et mille excuses alors)
0
Cricri1670 Messages postés 32 Date d'inscription samedi 15 décembre 2007 Statut Membre Dernière intervention 10 avril 2014
20 janv. 2014 à 13:50
Désolé si je goûte peu à ce genre de méthode (compliquée sur des programmes complexes) qui fonctionnerait néanmoins parfaitement.
En fait, j'utilise la méthode du délégué d'évènement depuis longtemps mais elle pose aussi problème (suppression du Handler) et c'est pourquoi je cherchais une solution plus "propre", qui utilise au maximum les fonctionnalités de .Net (donc la propriété de formatage sur Binding). Malheureusement, Microsoft a encore des possibilités d'amélioration ou alors je n'ai pas utilisé la bonne manière.

Par ailleurs, je pense qu'on peut aussi utiliser les vues (DataView), en formatant les données de la vue et en liant la vue aux contrôles mais je n'ai pas testé encore.

Pour finir, je me moque que cette proposition ne soit pas l'idéal que je recherche. Je n'aurais pas réagi de la même façon si cette réponse avait été une des premières...
--
0
Rejoignez-nous