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

 

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

Θεμα refresh με BindingSource και DatagridView bound σε datatable "στον αέρα"

Îåêßíçóå áðü ôï ìÝëïò cap. Τελευταία δημοσίευση από το μέλος cap στις 17-05-2006, 20:15. Υπάρχουν 2 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  17-05-2006, 14:25 12866

    Θεμα refresh με BindingSource και DatagridView bound σε datatable "στον αέρα"

    Σαν καλό παιδί κι εγώ είπα να φτιάξω μια WinForms εφαρμογούλα σε VS.NET 2005 και λιγάκι μπερδεύτηκα με τα BindingSources, ομολογώ! Δείξτε επιείκεια, δεν τα πάω καλά με το databinding...

    Το σενάριο:

    Εχουμε μια φορμίτσα που έχει διάφορα πεδία, ένα κουμπάκι και ένα datagridview.

    Συμπληρώνοντας τα πεδία και πατώντας το κουμπάκι ενημερώνεται ένα datatable που βρίσκεται στον "αέρα". Οταν λέω στον "αέρα", εννοώ οτι δεν αντιστοιχεί σε κάποιο πραγματικό table στη βάση δεδομένων. Παρ'όλα αυτά βρίσκεται μέσα στο dataset που δημιουργήθηκε όταν έφτιαξα ένα datasource για την εφαρμογή μου, αλλά δεν συνδέεται με κάποιον πραγματικό πίνακα. Δεν υπάρχει δηλαδή η Fill(), ούτε η GetData(), προφανώς, γιατί δεν υπάρχει ούτε καν ο adapter.

    Οταν εφτιαξα το datagrid, επέλεξα ως datasource το bindingsource του συγκεκριμένου datatable που είχε δημιουργηθεί αυτόματα. Αντιστοίχως, το bindingsource έχει ως datasource το dataset και ως datamember το datatable.

    EDIT: To DataGridView ειναι read-only και χρησιμεύει μόνο για παρουσίαση.

    Επανάληψη: Εχουμε ένα datagridview που κοιτάει ένα bindingsource το οποίο κοιτάει ένα dataset (ως datasource) το οποίο περιέχει ένα datatable (ως datamember) που δεν έχει adapter (είναι στον "αέρα" και ενημερώνεται προγραμματιστικά με νέα rows). Επιχειρώ να προσθέσω προγραμματιστικά κάτι στο datatable και αναμένω να ενημερωθεί το datagridview.

    Τζίφος λοιπον. Δεν ενημερώνεται τίποτα.

    Αν προγραμματιστικά πω από τα εξής:

    1. Στο bindingsource οτι το datasource του είναι ΑΠΕΥΘΕΙΑΣ το datatable
    2. Στο datagridview οτι το datasource του είναι ΑΠΕΥΘΕΙΑΣ το datatable

    ολες οι αλλαγές εμφανίζονται στο DataGridView.

    Οι ερωτήσεις μου είναι οι εξής:

    - Τι πρέπει να κάνω για να καταλαβαίνει το bindingsource οτι έχουν αλλάξει οι τιμές του datatable;
    - Τελικά ποιός είναι ο ενδεδειγμένος τρόπος databinding σε τέτοιες περιπτώσεις;
    - Τα bindingsources ειναι μια μεγάλη απάτη του marketing ή μια καλή επινόηση;
    - Γιατί πρέπει να έχω 500 layers στην εφαρμογή μου όσον αφορά το databinding και να λέω οτι "τα πράγματα έγιναν απλούστερα"; (ρητορική ερωτηση) :)

     


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  17-05-2006, 20:03 12881 σε απάντηση της 12866

    Απ: Θεμα refresh με BindingSource και DatagridView bound σε datatable "στον αέρα"

    Γεια σου,

    Διαβάζοντας αυτά που έγραψες απαντώ μία μία στις ερωτήσεις σου.

    Σχετικά με την πρώτη, έχω φτιάξει ένα δοκιμαστικό project κάνοντας αυτά που γράφεις και μου δούλεψε. Δεν μπορώ να καταλάβω για πιο λόγο σε εσένα δεν το κάνει. Πάντως τα properties DataSource & DataMember είναι σωστά στα controls σου.

    Ο ενδεδειγμένος τρόπος databinding στο VS.NET 2005 είναι αυτός που περιέγραψες. Πλέον έχουμε στην διάθεσή μας ένα καινούριο control που ονομάζεται bindingsource. H φιλοσοφία πίσω από αυτό το νέο control στην λειτουργία του databinding είναι η εξής.

    Μέχρι τώρα όποτε χρησιμοποιούσαμε databinding φτιάχναμε το binding με τέτοιον τρόπο που να δείχνει κατευθείαν πάνω στο data source μας, συνήθως dataset. Ένα πρόβλημα με αυτήν την προσέγγιση είναι όταν θέλουμε να αλλάξουμε το data source τον control μας στο run time της εφαρμογής μας. Θα έπρεπε τότε να γράψουμε κώδικα που να το έκανε αυτό σε κάθε control. Το ποιο σημνατικό όμως κατά την γνώμη μου δεν είναι αυτό αλλά κάποια άλλα χαρακτηριστικά και δυνατότητες που κρύβει η ίδια η class bindingsource. Παράδειγμα παλιά αν ήθελες να δεις ποια είναι η τρέχουσα εγγραφή να πας στην επόμενη ή προηγούμενη ή και ακόμα να λάβεις κάποιες ειδοποιήσεις σε μορφή events για το τι γίνεται με τα δεδομένα σου έπρεπε να ξέρεις πολύ καλά την όλη διαδικασία του data binding χρησιμοποιώντας CurrencyManagers, BindingContexts κτλ. Τώρα πλέον αυτό δεν χρειάζεται. Το bindingsource έχει τέτοιες ρουτίνες και events που μπορούμε χωρίς να "βουτήξουμε" βαθεία στον μηχανισμό του databinding να κάνουμε πιο εύκολα αυτό που θέλουμε.

    Όσο για το αν χρειαζόμαστε 500 layers τι να σου πω. Προσωπική άποψη είναι.

    Για την ιστορία ο κώδικας που έγραψα για να εισάγω μία εγγραφή στο dataset είναι ο παρακάτω :

    Dim dRow As DataRow

    dRow = Me.NorthwindDataSet.Customers.NewRow

    dRow.Item("CustomerID") = 1000

    dRow.Item("CompanyName") = "InfoCenter"

    Me.NorthwindDataSet.Customers.Rows.Add(dRow)

  •  17-05-2006, 20:15 12883 σε απάντηση της 12881

    Απ: Θεμα refresh με BindingSource και DatagridView bound σε datatable "στον αέρα"

    Φαίνεται τελικά οτι κάτι είχε πάει στραβά στο code generation. Και εγώ το δοκίμασα σβήνοντας διάφορες περιττές βλακείες και δούλεψε.

    Κρίμα, και ετοίμαζα βιντεάκι για να δείξω ακριβώς το πρόβλημα μου :)

    Παντως δεν είμαι ιδιαίτερα ευχαριστημένος από την υποστήριξη του designer (αμα κανεις rename σε καποιο αντικείμενο του dataset κλαφτα χαράλαμπε), και όσον αφορά το bindingsource, θεωρώ οτι "τα πράγματα έγιναν πιό περίπλοκα για να γίνουν πιό εύκολα", με την έννοια ότι τελικά μπήκαν πολλά καλούδια για να διευκολύνουν ένα databinding που τελικά σε "δύσκολες" περιπτωσεις θα διστάσουμε να το χρησιμοποιήσουμε - βεβαια αυτή είναι προσωπική μου άποψη - ποτέ δεν μου άρεσαν τα τόσο "αυτόματα" πράγματα.

    Αρκεί να σου πω οτι έχασα τις ρυθμίσεις του datagridview μου 3 φορές, σβήνοντας πράγματα φαινομενικά άσχετα με αυτό ή με τα databindings του. Αν και δεν μπορώ να εστιάσω σε συγκεκριμένα bugs - ολα αυτά τα "εφαγα" παίζοντας -, δεν έχω την καλύτερη των απόψεων για το συγκεκριμένο σύστημα databinding.

    Κλείνω την ερώτηση ως απαντηθείσα, και ελπίζω σύντομα να αλλάξω γνώμη για τα bindingsources :)

    (Με την ευκαιρία, αν κάποιος έχει πειραματιστεί περισσότερο από μένα - ας γράψει κανένα αρθράκι! )


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

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