Δείτε πώς μπορείτε να τοποθετήσετε μια αναπτυσσόμενη λίστα επιλογής σε ένα DBGrid. Δημιουργήστε οπτικά πιο ελκυστικές διεπαφές χρήστη για την επεξεργασία πεδίων αναζήτησης μέσα σε ένα DBGrid - χρησιμοποιώντας την ιδιότητα PickList μιας στήλης DBGrid.
Τώρα, ότι ξέρετε τι είναι πεδία αναζήτησης και ποιες είναι οι επιλογές εμφάνισης ενός πεδίου αναζήτησης στο Δελφοί's DBGrid, ήρθε η ώρα να δούμε πώς να χρησιμοποιήσουμε την ιδιότητα PickList μιας στήλης DGBrid για να επιτρέψουμε σε έναν χρήστη να επιλέξει μια τιμή για ένα πεδίο αναζήτησης από ένα αναπτυσσόμενο πλαίσιο λίστας.
Μια γρήγορη ενημέρωση για την ιδιότητα στήλης DBGrid
ΕΝΑ DBGrid ο έλεγχος έχει μια ιδιότητα Στήλες - μια συλλογή αντικειμένων TColumn που αντιπροσωπεύουν όλες τις στήλες σε ένα πλέγμα ελέγχου. Οι στήλες μπορούν να οριστούν κατά τη διάρκεια του σχεδιασμού μέσω του επεξεργαστή Στήλες ή προγραμματιστικά κατά το χρόνο εκτέλεσης. Συνήθως θα προσθέσετε Στήλες σε ένα DBGird όταν θέλετε να ορίσετε τον τρόπο εμφάνισης μιας στήλης, τον τρόπο εμφάνισης των δεδομένων στη στήλη και να αποκτήσετε πρόσβαση στις ιδιότητες, τα συμβάντα και τις μεθόδους των TDBGridColumns κατά το χρόνο εκτέλεσης. Ένα προσαρμοσμένο πλέγμα σάς δίνει τη δυνατότητα να διαμορφώσετε πολλές στήλες για να παρουσιάσετε διαφορετικές προβολές του ίδιου σύνολα δεδομένων (διαφορετικές εντολές στηλών, διαφορετικές επιλογές πεδίων και διαφορετικά χρώματα και γραμματοσειρές στηλών για το παράδειγμα).
Τώρα, κάθε στήλη σε ένα πλέγμα συνδέεται με ένα πεδίο από ένα σύνολο δεδομένων που εμφανίζεται στο πλέγμα. Επιπλέον, κάθε στήλη διαθέτει ιδιότητα PickList. Η ιδιότητα PickList εμφανίζει τιμές που ο χρήστης μπορεί να επιλέξει για την τιμή πεδίου συνδεδεμένης στήλης.
Συμπλήρωση του PickList
Αυτό που θα μάθετε εδώ είναι πώς να γεμίσετε αυτή τη λίστα συμβολοσειρών με τιμές από άλλο σύνολο δεδομένων κατά το χρόνο εκτέλεσης.
Υπενθυμίζουμε ότι επεξεργαζόμαστε τον πίνακα των άρθρων και ότι ένα πεδίο Θέμα μπορεί να δεχτεί τιμές μόνο από τον πίνακα "Θέματα": την ιδανική κατάσταση για το PickList!
Δείτε πώς μπορείτε να ρυθμίσετε την ιδιότητα PickList. Αρχικά, προσθέτουμε μια κλήση στη διαδικασία SetupGridPickList στο πρόγραμμα επεξεργασίας συμβάντων OnCreate της φόρμας.
διαδικασία TForm1.FormCreate (αποστολέας: TObject);
ξεκινήσει
SetupGridPickList ('Θέμα', 'SELECT Name FROM Subjects'))
τέλος;
Ο ευκολότερος τρόπος δημιουργίας της διαδικασίας SetupGridPickList είναι να μεταβείτε στο ιδιωτικό μέρος της δήλωσης φόρμας, προσθέστε τη δήλωση εκεί και πατήστε το συνδυασμό πλήκτρων CTRL + SHIFT + C - Η ολοκλήρωση του κώδικα του Delphi θα γίνει υπόλοιπο:
...
τύπος
TForm1 = τάξη (TForm)
...
ιδιωτική διαδικασία SetupGridPickList (
const Ονομα πεδίου: σειρά;
const sql: σειρά);
δημόσιο
...
Σημείωση: Η διαδικασία SetupGridPickList απαιτεί δύο παραμέτρους. Η πρώτη παράμετρος, FieldName, είναι το όνομα του πεδίου που θέλουμε να δράσουμε σαν πεδίο αναζήτησης. η δεύτερη παράμετρος SQL είναι η έκφραση SQL που χρησιμοποιούμε για να συμπληρώσουμε το PickList με πιθανές τιμές - γενικά, η έκφραση SQL θα πρέπει να επιστρέφει ένα σύνολο δεδομένων μόνο με ένα πεδίο.
Δείτε πώς φαίνεται το SetupGridPickList:
διαδικασία TForm1.SetupGridPickList (const FieldName, sql: σειρά);
var
slPickList: TStringList;
Ερώτημα: TADOQuery;
i: ακέραιο;
ξεκινήσει
slPickList: = TStringList. Δημιουργώ;
Ερώτημα: = TADOQuery. Δημιουργία (μόνος);
δοκιμάστε
Ερώτηση. Σύνδεση: = ADOCσύνδεση1;
Ερώτηση. SQL.Text: = sql;
Ερώτηση. Ανοιξε;
// Συμπληρώστε τη λίστα συμβολοσειρώνενώδεν Ερώτηση. EOF dobegin
slPickList. Προσθήκη (ερώτημα. Πεδία [0] .AsString);
Ερώτηση. Επόμενο;
τέλος; //while
// τοποθετήστε τη λίστα στη σωστή στήληΓια i: = 0 προς το DBGrid1.Columns. Count-1 κάνω
αν DBGrid1.Columns [i] .FieldName = Πεδίο ονόματος τότε αρχίζει
DBGrid1.Columns [i] .PickList: = slPickList;
Διακοπή;
τέλος;
τελικά
slPickList. Ελεύθερος;
Ερώτηση. Ελεύθερος;
τέλος;
τέλος; (* SetupGridPickList *)
Αυτό είναι. Τώρα, όταν κάνετε κλικ στη στήλη Θέμα (για να μπείτε στη λειτουργία επεξεργασίας).
Σημείωση 1: Από προεπιλογή, στην αναπτυσσόμενη λίστα εμφανίζονται 7 τιμές. Μπορείτε να αλλάξετε τη διάρκεια αυτής της λίστας ρυθμίζοντας την ιδιότητα DropDownRows.
Σημείωση 2: τίποτα δεν σας εμποδίζει να γεμίσετε το PickList από μια λίστα τιμών που δεν προέρχεται από έναν πίνακα βάσης δεδομένων. Αν, για παράδειγμα, έχετε ένα πεδίο που δέχεται μόνο τα ονόματα της εβδομάδας («Δευτέρα»,..., «Κυριακή»), μπορείτε να δημιουργήσετε ένα "σκληρό-κωδικοποιημένο" PickList.
"Uh, πρέπει να κάνω κλικ στο PickList 4 φορές ..."
Σημειώστε ότι όταν θέλετε να επεξεργαστείτε το πεδίο που εμφανίζει μια αναπτυσσόμενη λίστα, θα χρειαστεί να κάνετε κλικ στο κελί 4 φορές για να επιλέξετε πραγματικά μια τιμή από μια λίστα. Το επόμενο απόσπασμα κώδικα, το οποίο προστέθηκε στο πρόγραμμα χειρισμού συμβάντων OnCellClick του DBGrid, μιμείται ένα χτύπημα στο κλειδί F2 ακολουθούμενο από Alt + DownArrow.
διαδικασία TForm1.DBGrid1CellClick (Στήλη: Τόξο);
ξεκινήσει// Πραγματοποίηση ταχύτερης επιλογής της αναπτυσσόμενης λίστας επιλογήςαν Στήλη. Λίστα επιλογών. Count> 0 τότε αρχίζει
keybd_event (VK_F2,0,0,0);
keybd_event (VK_F2,0, KEYEVENTF_KEYUP, 0).
keybd_event (VK_MENU, 0,0,0);
keybd_event (VK_DOWN, 0,0,0);
keybd_event (VK_DOWN, 0, KEYEVENTF_KEYUP, 0).
keybd_event (VK_MENU, 0, KEYEVENTF_KEYUP, 0).
τέλος;
τέλος;