Να υπάρχει πρόβλημα με το exception handling είναι "ελαφρώς" απίθανο.
Αυτό που πρέπει να συμβαίνει είναι ότι ο κώδικας μέσα στο DataTable που σηκώνει το RowChanged event πρέπει να καταπίνει τα exceptions, ενώ του RowChanging να τα σηκώνει προς τα πάνω. Ένα σχετικό άρθρο στο MSDN λέει τα παρακάτω:
Τhe ColumnChanging, RowChanging, and RowDeleting events are raised during the update process. You can use these events to validate data or perform other types of processing. Because the updates are in process during these events, you can cancel the update by throwing an exception, which prevents the change from being completed. For more information, see Data Validation in Datasets.
The ColumnChanged, RowChanged, and RowDeleted events are notification events that are raised when the update has been completed successfully. These events are useful when you want to take further action based on a successful update.
Σίγουρα, δεν λέει ξεκάθαρα ότι το RowChanged σταματάει τα exceptions. Αν το κάνει όμως, έχει τη λογική του. RowChanged καταπίνει το exception γιατί δεν είναι δυνατόν να κάνεις τίποτα πλέον στο σημείο που άλλαξες το row. Η αλλαγή έχει ήδη γίνει με επιτυχία και το datatable μπορεί να συνεχίσει, απλά απέτυχε ο κώδικας που χρησιμοποίησες για να κάνει κάτι μετά την αλλαγή. Λογικά, εκεί θα πρέπει να προσπαθήσεις να αντιμετωπίσεις το σφάλμα. Αν το δείς από την πλευρά του datatable, τί να κάνει αν δει ένα error στο RowChanged? Δεν μπορεί να αντιστρέψει τις αλλαγές που έκανε, και δεν υπάρχει λόγος να σταματήσει την εκτέλεσή του.
Σίγουρα πάντως, το MSDN θα έπρεπε να αναφέρει τη διαφορά.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos