Συνηθισμένος από την Access όπου όποιες αλλαγές γίνονται σε ένα datasheet αποθηκεύονται στον πίνακα αυτόματα, είχα προσπαθήσει να βρω έναν τρόπο να αποθηκεύει αυτόματα τις αλλαγές και στην VB. Έτσι λοιπόν σε μία φόρμα με ένα datagridview, στο ListChanged Event του bindingsource, έλεγχα για αλλαγή στο dataset και έκανα true την τιμη μιάς μεταβλητής. Στο RowValitaded του datagridview έλεγχα την μεταβλητή και αποθήκευα όταν ήταν σκόπιμο.
Προσπάθησα να εφαρμόσω το ίδιο και για master-detail αλλά χωρίς επιτυχία. Θέλω να ξέρω σε ποιόν πίνακα εκρεμμούν αλλαγές και να εκτελούνται μόνο για τον συγκεκριμένο. Έφτιαξα λοιπόν δύο μεταβλητές Pending Update για τους πίνακες μου και χρησιμοποίησα τα event που αναφέρω παραπάνω στα δύο bindingsources και datagridviews. Παρατήρησα ότι όταν κάνω κάποια αλλαγή π.χ. στον Master το ListChanged εκτελείται και για τα δύο bindingsource με αποτέλεσμα και οι δύο μεταβλητές να παίρνουν true και να μην παίρνω την πληροφορία που θέλω. Υπάρχει τρόπος να βρω σε ποιόν πίνακα εκρεμούν αλλαγές..;
Το δεύτερο που δοκίμασα ήταν να έχω μία μεταβλητή Pending Update για τους πίνακες μου και καλώντας μία sub να αποθηκεύω και για τους δύο πίνακες.
Private Sub SaveData()
Me.Cursor = Cursors.WaitCursor
Me.Validate()
Me.PPDGR_DelayBindingSource.EndEdit()
Me.PPDGR_DelayTableAdapter.Update(Me.SOLTESTDataSet.PPDGR_Delay)
Me.ValidateChildren() –χτυπάει εδώ
Me.PPDGR_ApolipansiBindingSource.EndEdit()
Me.PPDGR_ApolipansiTableAdapter.Update(Me.SOLTESTDataSet.PPDGR_Apolipansi)
Me.Cursor = Cursors.Arrow
Me.UpdatePending = False
End Sub
Το error
An unhandled exception of type 'System.StackOverflowException' occurred in System.dll
Dionisis