Χαιρετώ,
Το περιβάλλον που δοκίμασα τα παρακάτω είναι WinForms(.NET 2.0) δεν ξέρω αν ισχύουν τα ίδια και σε WebForms.
Όπως και στον τίτλο: Ο TableAdapter έχει hidden το property AcceptChangesDuringFill ενώ ο DataAdapter (από τον οποίο και κάνει inherit ο TableAdapter) το εμφανίζει. Γιατί η μαμά Microsoft έκανε αυτήν την επιλογή;
Ο λόγος που ρωτώ είναι ο εξής: Έχουμε το DataTable μας, έχουμε και τον TableAdapter που μας δημιούργησε το VS και πάμε και κάνουμε add ένα extra query στον TableAdapter (μέσω wizard) ο οποίος πχ θα γεμίζει το DataTable με δεδομένα σύμφωνα με μια παράμετρο. Το πρόβλημα που έχουμε τώρα είναι ότι όταν ο TableAdapter κάνει fill το DataTable χρησιμοποιώντας το extra query πάει by default και καλεί την AcceptChanges() σε κάθε row που προσθέτει οπότε μετά όταν καλούμε την Update() χωρίς να έχουμε πειράξει κάποιο row δεν σώζεται τίποτα γιατί το DataTable δεν έχει κάποια αλλαγή από την τελευταία φορά που γέμισε με δεδομένα.
Σε αυτήν την περίπτωση όμως εγώ θα ήθελα να έχω τη δυνατότητα να αποθηκεύσω γιατί προφανώς το extra query μου μπορεί να έχει φέρει άλλα δεδομένα από αυτά που έρχονται με την default fill και να θέλω να τα αποθηκεύσω.
Αν ο TableAdapter έκανε expose την AcceptChangesDuringFill τότε θα μπορούσα να την κάνω set σε false πριν καλέσω την fillWithExtraQuery() και έπειτα καλώντας την Update() τα δεδομένα θα save.
Ψάχνοντας στο net βρήκα την λύση της δημιουργίας ενός DataAdapter και κάνοντας fill το DataTable με τον DataAdapter αφού σε αυτήν την περίπτωση μπορώ να κάνω AcceptChangesDuringFill = false πρίν το fill. Αυτό όμως αρχίζει και μοιράζει τα queries που διαχειρίζονται το DataTable σε διάφορους Adapters.
Το ερώτημα λοιπόν είναι αν υπάρχει κάποιο καλύτερο approach από τη λύση των 2 adapters για ένα DataTable, πχ υπάρχει τρόπος να κάνεις 'force save' ανεξάρτητα από το αν το DataTable λέει ότι δεν έχει changes?
Ευχαριστώ προκαταβολικά,
Σταύρος.