Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

AcceptChangesDuringFill: Γιατί είναι κρυμμένο στον TableAdapter;

Îåêßíçóå áðü ôï ìÝëïò s.adamopoulos. Τελευταία δημοσίευση από το μέλος s.adamopoulos στις 01-04-2008, 18:28. Υπάρχουν 0 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  01-04-2008, 18:28 41251

    AcceptChangesDuringFill: Γιατί είναι κρυμμένο στον TableAdapter;

    Χαιρετώ,

    Το περιβάλλον που δοκίμασα τα παρακάτω είναι 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?

    Ευχαριστώ προκαταβολικά,


    Σταύρος.
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems