Παιδιά καλημέρα.
Είμαι και εγώ ένας από τους νέους στο .net και C# (Visual Studio Express 2010)
και θα ήθελα να ρωτήσω για τον σωστό τρόπο υλοποίησης
κάποιων πραγμάτων από προγραμματιστικής άποψης.
Αναφέρω ένα παράδειγμα (δεν αποτελεί πραγματική εφαρμογή) για να μπορέσουν οι ερωτήσεις μου
να γίνουν κατανοητές.
Ας υποθέσουμε ότι έχω 3 tables
Customers με πεδία
- CustomerID (Primary Key)
-CustomerName
Products
- ProductID (Primary Key)
- ProductDescription
Orders με πεδία
- OrderID (Primary Key)
- OrderDate
- CustromerID
- ProductID
Για ευκολία ας υποθέσουμε ότι κάθε order έχει μόνο ένα product.
Ξεκινώντας με το .net άρχισα να χρησιμοποιώ τα wizard θεωρώντας ότι υπάρχουν για να κάνουν τη ζωή μας εύκολη.
Οπότε αναφέρω τι ήθελα να κάνω και πως το υλοποίησα με τις αντίστοιχες ερωτήσεις.
Αρχικά δημιούργησα τα tables με τον Database Explorer καθώς επίσης και τα relations μεταξύ των tables.
Customers.CustomerID (1 σε πολλά) Orders.CustomersID
Products.ProductID (1 σε πολλά) Orders.ProductID
1.Ερώτηση: Έχει νόημα να δημιουργήσω αυτά τα relations με τον Database Explorer?
Θέλω να έχω ένα Form Orders που θα έχει ένα DataGridView με τα περιεχόμενα του orders με όνομα DataGridViewOrders
Με drag and drop παίρνω το table Orders από το Data Source και το ρίχνω στη φόρμα.
Με αυτό τον τρόπο όμως το DataGridView δεν έχει το CustomerName ούτε και το ProductDescription (όπως θα ήθελα)
αλλά το CustomerID και το ProductID όπως είναι αναμενόμενο.
Οπότε μέσω του Data Sources και με τον Wizard δημιουργώ ένα νέο Table Adapter
με όνομα OrdersJoinCustomerProduct (Add, Table adapters…) και με το Query Builder… παίρνω τα πεδία
Orders.OrderID
Orders.OrderDate
Products. ProductDescription
Customers. CustomerName
και στη φόρμα μου κάνω drag and drop τον νέο πίνακα και παίρνω το αποτέλεσμα που θέλω.
2. Ερώτηση: Είναι σωστή αυτή η υλοποίηση ή θα πρέπει να κάνω κάτι άλλο (ίσως με κώδικα) ?
3. Ερώτηση: Αν σε αυτό το DataGridViewOrder των παραγγελιών θέλω να μπορεί ο χρήστης
να κάνει και αλλαγές σε κάποιο πεδίο θα μπορεί με αυτή την υλοποίηση, αν ναι, πώς?
Στo Form αυτό των Orders θέλω να έχω και ένα comboBox με τα products (σαν list) ώστε να μπορώ να επιλέξω
ένα product και να φιλτράρω τα περιεχόμενα του DataGridViewOrders.
Οπότε παίρνω ένα comboBox, κάνω check το Use Data Bound Items και ενημερώνω τα αντίστοιχα πεδία
ώστε να πάρω στη λίστα του ComboBox το ProductDescription.
Με την επιλογή του χρήστη από το comboBox ενημερώνω το odersJoinCustomerProduct.Filter
για να ενεργοποιήσω το φίλτρο στο DataGridViewOrders.
4. Ερώτηση: Είναι σωστή αυτή η υλοποίηση ?
5. Ερώτηση: Υπάρχει διαφορετικός τρόπος αντιμετώπισης αν το table Orders έχει 50.000 εγγραφές.
Γνωρίζω ότι καλή τακτική είναι να ζητάς από τη βάση τις εγγραφές που χρειάζεσαι,
δηλαδή να χρησιμοποιείς πρώτα το φίλτρο και όχι μετά.
Ευχαριστώ εκ των προτέρων και συγνώμη αν κούρασα αλλά νομίζω ότι η σωστή αρχή είναι βασικό.