2010-03-12 6 views
1

J'ai un code de jeu de données hérité que je suis en train de mettre à jour. Je tente de déterminer si l'ensemble de données a des modifications afin que je puisse correctement demander une sauvegarde. Cependant, myDataset.HasChanges() renvoie toujours la valeur true.DataSet.HasChanges est vrai même immédiatement après l'exécution de TableAdapter.Update

Dans ma méthode save j'ai modifié le code pour déterminer quand l'ensemble de données de get changements et fait le code comme ceci:

1. myBindingSource.EndEdit() 
2. myTableAdapter.Update(myDataSet) 
3. myBindingSource.EndEdit() 

Après la ligne 1, - myDataSet.HasChanges = true (compréhensible)
après la ligne 2, - myDataSet.HasChanges = false (compréhensible)
, après la ligne 3, - myDataSet.HasChanges = true

Je ne suis pas sûr de savoir pourquoi cela se produirait dans la ligne 3, ne devrait pas ce faux parce que je juste couru les mises à jour sur l'ensemble de données?

Répondre

1

Il peut y avoir un élément d'interface utilisateur entraînant une modification de valeur dans dataSet/dataTable. Essayez votre code dans une consoleApplication simple sans DataBinding.

+1

éléments de la base de données qui ont déclenché des événements qui "ont changé, mais n'ont pas changé" les données –

+0

@NathanKoop Avez-vous trouvé une solution? J'ai exactement le même problème. – styfle

+1

Si je me souviens bien (c'était il y a quelques années), je crois avoir eu un événement Textbox.OnChange qui aurait modifié d'autres textboxes, ce qui aurait alors modifié le jeu de données. –

1

Est-ce que votre TableAdapter actualise votre DataSet? Si c'est le cas, alors vous avez probablement quelque chose comme une clé qui est initialisée (rappelez-vous, GUID == bon, Int == mauvais). C'est comme lorsque vous remplissez un TableAdapter, vous devez appeler AcceptChanges pour réinitialiser l'état de toutes les lignes sans les modifier.

+0

Je ne suis pas sûr si le TableAdapter actualise les données. Tout ce qu'il fait est un UPDATE ... WHERE id = @myId; J'ai essayé d'ajouter un AcceptChanges dedans (entre les lignes 2 et 3) et j'ai toujours eu le même résultat. J'utilise int (pas mon design db et je ne peux pas le changer). Il ne devrait pas non plus y avoir d'initialisation de clé, dans la situation que je suis en train de tester, je charge le formulaire (tonnes de liens de données etc ...) puis j'appuie sur le bouton de sauvegarde sans changer les données –

Questions connexes