2009-10-08 9 views
0

je le scénario suivant:C# - DataSets et liaison de données dans plusieurs formes

  • Une base de données
  • Un DataSet qui est rempli par la base
  • deux formes:
    • Le premier Form contient une zone de liste déroulante qui affiche un certain ensemble de catégories. Le ComboBox est lié à un DataTable "catégories" dans le DataSet.
    • Le deuxième formulaire est supposé être un gestionnaire de catégories dans lequel vous pouvez ajouter, modifier et supprimer des catégories de la base de données. Il contient un DataGridView modifiable qui est également lié au même DataTable.

Maintenant, quand je change le DataSet dans le deuxième formulaire, à la fois DataGridView et la base de données sont mises à jour, mais le ComboBox dans le premier formulaire est pas. Quelle est la meilleure façon de le tenir à jour? Quelqu'un sur les forums MSDN proposé quelque chose comme ça:

public void updateDataBindings() 
{ 
    // doesn't seem to do anything: 
    categoriesComboBox.DataSource = categoriesBindingSource; 
} 

Cette méthode de Form1 serait appelé à chaque fois que le DataGridView des changements Form2. Le ComboBox reste cependant inchangé.

Salutations!
wib

Répondre

1

Vous avez databound l'ensemble de données à la liste déroulante, mais avez-vous également dit à la liste déroulante ce que sont ses membres de données, etc. afin qu'il sache quelle valeur à regarder?

+0

La DataSource et les membres sont déjà définis ailleurs. Je mets la ligne categoriesComboBox.DataSource = categoriesBindingSource; pour rafraîchir la ComboBox avec les nouvelles données. J'ai essayé votre suggestion et assigné les membres à la ComboBox dans le updateDataBindigs() aussi, en vain. Il montre toujours les catégories qui ont été supprimées et ainsi de suite. –

+0

FYI: vous n'avez pas besoin de "rafraîchir" vos commandes manuellement. L'idée derrière la liaison de données est que vous la connectez une fois via la liaison de données, puis les données (BindingList, dataset, etc.) soulève automatiquement les événements lorsque les données changent, puis les contrôles se mettent à jour sans rien faire. C'est à ce moment que bindingSources est utile. Si vous allez Control -> BindingSource -> Données sous-jacentes, alors il gère généralement tout pour vous. Essayez de supprimer le reste, et juste mettre en place les liens initiaux comme ça –

+0

David, Oui, c'est ce que je pensais! Apparemment, cela ne fonctionne pas seulement lorsque deux formulaires sont impliqués. J'ai découvert que chaque formulaire semble avoir sa propre instance du DataSet. Je suppose que c'est le problème. –

Questions connexes