Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1074 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  DataBindings + rafraichissement des données d'un TextBox

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

DataBindings + rafraichissement des données d'un TextBox

n°1439167
gwenCPP
Je taf
Posté le 08-09-2006 à 15:42:34  profilanswer
 

Bonjour,
 
j'ai déjà vu un problème similaire sur le net mais je n'arrive plus à mettre la main dessus.
 
Voilà exactement ma situation :
J'ai une fenêtre principale dans laquelle je déclare et initialise un DataSet via un fichier csv. Je déclare également une fenêtre fille ouverte à l'aide de la méthode show() et une classe de traitement de données (gestion de trame du port série).
 
Ces deux classes sont initialisées par un constructeur qui prend par référence le DataSet de la fenêtre principale. Si je ne me trompe pas, les trois classes possèdent donc la même DataSet du point de vue mémoire.
 
Dans la classe de traitement de données, je modifie des valeurs dans ma Table du DataSet.
Dans la fenêtre fille, j'initialise mes composants avec la méthode DataBindings et je modifie le bindingcontext pour pointer sur la ligne désirée.
 
voici la fonction utilisée pour ça :
 
 

Code :
  1. privatevoid Binds(System.Windows.Forms.Control composant,System.String champ_composant, int position, System.String champ_ds)
  2. {
  3.    composant.DataBindings.Add(champ_composant,this.dataSet1,champ_ds);
  4.    composant.BindingContext = new System.Windows.Forms.BindingContext(); // BindingContext Différent de la fenetre parente
  5.    BindingManagerBase bmb = composant.BindingContext[this.dataSet1,"BDD"];
  6.    bmb.Position = position;
  7. }


Je possède également un datagrid dans cette fenêtre pour voir l'état du DataSet.
 
Mon problème est le suivant : lorsque j'ouvre la fenêtre fille pour la première fois, les liaisons avec le dataset fonctionne très bien. Lorsque je veux modifier le DataSet pendant que la fenêtre fille est ouverte ou lorsque je la réouvre, tous les composants liés au DataSet ont gardés leur première valeur. Remarque : le datagrid contient les valeurs modifiées dans le DataSet.
 
Quelqu'un sait-il comment faire pour que les liaisons de mes composants soient refraichies correctement ?
 
Merci de votre aide,
 
Gwen

mood
Publicité
Posté le 08-09-2006 à 15:42:34  profilanswer
 

n°1439462
moi23372
Posté le 09-09-2006 à 12:04:35  profilanswer
 

il existe une méthode "ResetCurrentItem" sur le bindingSource qui permet de rafraichir tous les composants graphiques. Chaque composants rafraichira donc ça donnée... Voila... J'espère que ça ira.
 
PS: je crois que c'est valable uniquement avec .NET 2.0 sinon faut passer par un bindingManagerBase

n°1440372
gwenCPP
Je taf
Posté le 11-09-2006 à 15:22:38  profilanswer
 

Salut,
 
je viens d'essayer d'utiliser la méthode ResetCurrentItem en insérant un bindingSource mais le rafraichissement ne se fait toujours pas.
 
As-tu un exemple d'utilisation d'un control bindingsource, je n'ai pas trouvé de tuto suffisament explicite ?  
 
Dans la msdn, cette méthode correspond à ce que je souhaite faire. J'ai trouvé un équivalent avec CurrencyManager appelé depuis le bindingcontext d'un composant mais ca ne marche pas non plus.
En plus un effet bizare apparait, certains textbox et label ne pointent plus correctement dans la dataset ; ils affichent la premiere ligne au lieu de celle demandée dans le code.
Ceci disparait lorsque je mets en commentaire la demande de rafraichissement via un currencymanager.
 

Message cité 1 fois
Message édité par gwenCPP le 11-09-2006 à 15:32:20
n°1440573
moi23372
Posté le 11-09-2006 à 21:33:57  profilanswer
 

gwenCPP a écrit :

Salut,
 
je viens d'essayer d'utiliser la méthode ResetCurrentItem en insérant un bindingSource mais le rafraichissement ne se fait toujours pas.
 
As-tu un exemple d'utilisation d'un control bindingsource, je n'ai pas trouvé de tuto suffisament explicite ?  
 
Dans la msdn, cette méthode correspond à ce que je souhaite faire. J'ai trouvé un équivalent avec CurrencyManager appelé depuis le bindingcontext d'un composant mais ca ne marche pas non plus.
En plus un effet bizare apparait, certains textbox et label ne pointent plus correctement dans la dataset ; ils affichent la premiere ligne au lieu de celle demandée dans le code.
Ceci disparait lorsque je mets en commentaire la demande de rafraichissement via un currencymanager.


 
bon bon...
 
Soit un bindingSource nommé "bindingSourceTest"
 
dans le designer de la fenêtre tu click sur propriété du bindingSource. Dans le dataSource, tu lui donnes le type d'objet que tu veux mettre dans le bindingSource (une liste d'objet par exemple).
 
cette étape n'est pas indispensable.
Ensuite comme tu récupères apparemment un dataset tu fais ceci dans ton code
 
bindingSourceText.DataSource = monDataSet (éventuellement préciser la datatable).
 
maintenant au niveau du designer de la fenêtre, tu click droit sur un composant qui doit être bindé avec la valeur. pour cela, tu vas dans la propriété DATABINDINGS du composants (textbox, combo, etc.) et à "value", tu sélectionne dans la liste tout d'abord ta bindingSource, et dans ses détails le champs sur lequel tu veux bindé le composants.
 
par exemple:
pour un textbox qui acceuillera le nom d'une personne, tu bindera sa propriété VALUES sur le champ NOM du bindingSource. Rappele toi que le bindingSource reflete simplement les infos de ton dataset.
 
Attention, si tu veux que ça fonctionne correctement, je te conseil d'effectuer la première étape. Pour bien faire, il faudrait créer un XSD qui contiendra la structure de ton dataset afin de pouvoir via le designer initialisé les composants graphiques sur la structure du dataset. Ceci te permettra donc de faire cela facilement sans écrire une ligne de code...  
 
Voila j'espère que c'est compréhensible. C'est pas facile à expliquer. C'est plus facile à montrer :d

n°1440660
gwenCPP
Je taf
Posté le 12-09-2006 à 09:25:02  profilanswer
 

Merci, l'explication est très claire
 
j'avais réalisé une partie de la manip correctement, je vais essayé de lui donner un type.
 
Pour les liaisons, je dois passer par du code car je charge mon dataset via une feuille .csv. Conclusion, lors du démarrage de l'application le dataset ne contient pas de table et je ne peux pas passer par l'interface pour faire les liaisons. A mon avis se sera pareil pour le bindingsource.
 
L'autre problème que j'avais avec le bindingsource était la dissociation des contextes pour chaque control mais les rafraichissements ne se faisaient pas.
 
XSD c'est de l'XML ? (désolé je me suis mis au C# par la force des choses, je suis originaire de l'embarqué et je ne connais pas tout encore).
 
Sinon après quelques manip hier soir j'ai vraiment l'impression que le problème viens du dataset passé en référence dans la fenêtre fille et la classe. Les envois de rafraichissement ne fonctionnerais pas à cause de ça parce que sinon ca marche correctement à l'intérieure de la fenêtre fille.
 
j'essaye une dernière fois et si ca ne marche toujours pas je change l'architecture de mon soft.
 
Merci pour ton aide

n°1441422
moi23372
Posté le 12-09-2006 à 22:02:50  profilanswer
 

un XSD est un schéma XML qui permet de représenté les données.  
 
sous VS 2005, tu peux en créer très facilement, et créer des table dedans (leurs définitions) tel que des tables en base de données.  
 
Ensuite, cette définition peut etre associé au bindingSource. Lors de l'exécution, il suffira simplement de passer un dataset possédant une datatable correspondant à l'une définie dans le XSD. Le bindingSource initialisé sur une table X du XSD, pourra donc lors de l'exécution fournir l'ensemble des données au bindingSource et tu pourras donc les manipulé très facilement.  
 
Si tu as encore des prob, n'hésite pas à poster ton code


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  DataBindings + rafraichissement des données d'un TextBox

 

Sujets relatifs
Importer des donnees txt sur excelDonnées qui ne se modifient pas dans EasyPhp
Microsoft Reporting Services + affichage de données...[droit] Propriété des données et récupération
Tri et recherche des occurences d'un tableau de données[Delphi] problème MDI + Base de données + ListBox [Résolu]
Lire les données d'une liste de validationRécupérer les données dans une autre page [Résolu]
Tri sous Excel avec répartition des données dans des feuillesGalerie vidéo considérée comme base de données?
Plus de sujets relatifs à : DataBindings + rafraichissement des données d'un TextBox


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR