2009-09-09 6 views
0

Comment puis-je empêcher l'élément bindingSource Current de changer? (il n'y a pas événement qui change avec l'argument annuler ...)WinForms, BindingSource, empêche la modification de CurrentItem

Ce scénario est:

  • J'ai une zone de texte-datagridview, et sur le même formulaire.
  • J'utilise des boîtes à textes pour modifier les valeurs dans la source de données (avec la liaison de données standard)
  • Manchettes sont écrits manuellement (Après avoir enregistré le bouton est cliqué)

  • Lorsque l'utilisateur sélectionne une autre ligne en utilisant DataGridView, BindingSource. La propriété actuelle est modifiée et les zones de texte sont mises à jour avec les valeurs de la ligne sélectionnée. Les modifications que l'utilisateur a entrées sont perdues.

Est-il possible d'éviter ce problème? Puis-je empêcher la modification de la propriété bindingSource.Current?

Y a-t-il une meilleure option pour empêcher ce comportement?

(désactivation datagridview est unfortinutelly pas une option)

Répondre

0

Il semble que vous ne voulez pas changer bindingSource.Current, mais vous voulez sauvegarder le contenu des zones de texte avant de changer la ligne en cours? Si vous avez lié une collection au bindingSource, les zones de texte ne font-elles pas référence aux propriétés de l'élément actuel de cette collection?

Je ne suis pas vraiment sûr de ce que vous essayez de faire, mais un coup de feu dans l'obscurité pourrait être de lier le même DataSource à deux objets différents BindingSource, quelque chose comme ceci:

gridBindingSource.DataSource = theDataSource; 
textBoxBindingSource.DataSource = theDataSource; 
myDataGrid.DataSource = gridBindingSource; 
firstNameTextBox.Bindings.Add (new Binding ("Text", textBoxBindingSource, "FirstName")); 

mais serait bizarre, car si theDataSource est approprié pour un contrôle de grille, alors c'est une collection de choses qui ont une propriété FirstName. Peut-être que si vous étiez plus précis dans votre question.


ETA: Si vous souhaitez enregistrer le contenu de la zone de texte à la ligne actuelle, appelez ValidateChildren() sur le récipient avant que les bindingSource.Current changements de propriété.

+0

Votre réponse m'a définitivement donné une nouvelle perspective pour mon problème. Cela pourrait facilement être la solution à mon problème. – Emir

+0

C'est la solution que je vais mettre en œuvre. C'est plus complexe que de simplement désactiver la grille, mais cela me donne plus de fonctionnalités (les utilisateurs peuvent parcourir la grille tout en ajoutant un nouvel enregistrement, par exemple à des fins de référence) – Emir

0

j'ai un cadre à peu près semblable à la fois avec la grille et les zones de texte sur la même forme. Lorsque l'utilisateur clique sur le bouton EDIT (ou Ajouter), je viens de désactiver le contrôle gridview lui-même ...

MyDataGrid.Enabled = false;

continuer à modifier ..

Ensuite, dans le SAVE, si tout est ok,

MyDataGrid.Enabled = true;

+0

La désactivation de dataagridview est-elle déroutante pour les utilisateurs finaux? Avez-vous modifié l'apparence de la grille désactivée? – Emir

+0

+1.Je voudrais également mettre BackColor à contrôler ou Butonface – Steve

+0

La réponse la plus simple est simplement activer/désactiver la grille. Si vous voulez obtenir un colombophile et changer les couleurs, les polices, ou d'autres choses que vous pouvez. J'ai même vu dans d'autres threads comment les gens vont créer un objet "shape" qui peut avoir un léger ombrage de gris ou un autre indicateur visuel, et le faire chevaucher directement toute la grille en fonction de ses positions/coordonnées. Puis afficher/masquer ce contrôle tout en activant/désactivant la grille respectivement pour donner à l'utilisateur un indicateur visuel qu'il a été désactivé. – DRapp

Questions connexes