Σαν καλό παιδί κι εγώ είπα να φτιάξω μια 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