Δημιουργία μιας λίστας μείωσης στο DBGrid

click fraud protection

Θέλετε να κάνετε το καλύτερο δίκτυο επεξεργασίας δεδομένων; Παρακάτω παρατίθενται οδηγίες για τη δημιουργία διεπαφής χρήστη για την επεξεργασία πεδίων αναζήτησης Μέσα σε ένα DBGrid. Συγκεκριμένα, θα εξετάσουμε πώς να τοποθετήσετε ένα DBLookupComboBox σε ένα κελί ενός DBGrid.

Τι θα κάνει αυτό είναι να καλέσετε πληροφορίες από μια πηγή δεδομένων που θα χρησιμοποιηθεί για να συμπληρώσετε ένα αναπτυσσόμενο πλαίσιο.

Για να εμφανίσετε ένα DBLookupComboBox μέσα σε ένα κελί ενός DBGrid, πρέπει πρώτα να διαθέσετε ένα στο χρόνο εκτέλεσης ...

Δημιουργήστε μια αναζήτηση με ένα DBLookupComboBox

Επιλέξτε τη σελίδα "Στοιχεία ελέγχου δεδομένων" στην Παλέτα συνιστωσών και επιλέξτε ένα DBLookupComboBox. Καταργήστε ένα από οποιοδήποτε σημείο της φόρμας και αφήστε το προεπιλεγμένο όνομα του "DBLookupComboBox1". Δεν έχει σημασία πού το βάζετε από τις περισσότερες φορές, θα είναι αόρατο ή θα επιπλέει πάνω από το πλέγμα.

Προσθέστε ένα ακόμα στοιχείο DataSource και DataSet για να "συμπληρώσετε" το σύνθετο πλαίσιο με τιμές. Καταργήστε μια TDataSource (με το όνομα DataSource2) και το TAdoQuery (ονομάστε το AdoQuery1) οπουδήποτε στη φόρμα.

instagram viewer

Για να λειτουργεί σωστά το DBLookupComboBox, πρέπει να ορίσετε αρκετές ιδιότητες. είναι το κλειδί της σύνδεσης αναζήτησης:

  • Πηγή δεδομένων και DataField καθορίστε την κύρια σύνδεση. Το DataField είναι ένα πεδίο στο οποίο εισάγουμε τις προσδοκώμενες τιμές.
  • ListSource είναι η πηγή του συνόλου δεδομένων αναζήτησης.
  • KeyField προσδιορίζει το πεδίο στο ListSource που πρέπει να ταιριάζει με την αξία του DataField πεδίο.
  • Λίστα πεδίων είναι τα πεδία του συνόλου δεδομένων που εμφανίζονται στην σύνθετη λίστα. Το ListField μπορεί να εμφανίζει περισσότερα από ένα πεδία, αλλά τα πολλαπλάσια θα πρέπει να χωρίζονται με ερωτηματικά.
    Πρέπει να ορίσετε αρκετά μεγάλη τιμή για το DropDownWidth (ενός ComboBox) για να δείτε πραγματικά πολλές στήλες δεδομένων.
    Δείτε πώς μπορείτε να ορίσετε όλες τις σημαντικές ιδιότητες από τον κώδικα (στη φόρμα του OnCreate συμβάν χειριστής):
διαδικασία TForm1.FormCreate (αποστολέας: TObject);
ξεκινάω με DBLookupComboBox1 dobegin
DataSource: = DataSource1; // -> AdoTable1 -> DBGrid1
ΛίσταΑποθήκευσης: = DataSource2;
DataField: = 'AuthorEmail'; // από το AdoTable1 - εμφανίζεται στο DBGrid
KeyField: = 'Ηλεκτρονικό ταχυδρομείο';
ListFields: = 'Όνομα; ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ';
Ορατό: = Λάθος;
τέλος;
DataSource2.DataSet: = AdoQuery1;
AdoQuery1.Connection: = AdoConnection1;
AdoQuery1.SQL.Text: = 'ΕΠΙΛΕΞΤΕ Όνομα, E-mail από τους Συγγραφείς';
AdoQuery1.Open;
τέλος;

Σημείωση: Όταν θέλετε να εμφανίσετε περισσότερα από ένα πεδίο σε ένα DBLookupComboBox, όπως στο παραπάνω παράδειγμα, πρέπει να βεβαιωθείτε ότι όλες οι στήλες είναι ορατές. Αυτό γίνεται με τη ρύθμιση της ιδιότητας DropDownWidth.

Ωστόσο, θα δείτε ότι αρχικά, θα πρέπει να ορίσετε αυτό σε μια πολύ μεγάλη τιμή που έχει ως αποτέλεσμα η λίστα να είναι υπερβολικά μεγάλη (στις περισσότερες περιπτώσεις). Μια λύση είναι να ορίσετε το DisplayWidth ενός συγκεκριμένου πεδίου που εμφανίζεται στο a αναπτυσσόμενη λίστα.

Αυτός ο κώδικας, τοποθετημένος στο συμβάν OnCreate για τη φόρμα, διασφαλίζει ότι τόσο το όνομα του δημιουργού όσο και το email του εμφανίζονται μέσα στην αναπτυσσόμενη λίστα:

AdoQuery1.FieldByName ('Ηλεκτρονικό ταχυδρομείο'). DisplayWidth: = 10;
AdoQuery1.FieldByName ('Όνομα'). DisplayWidth: = 10;
AdoQuery1.DropDownWidth: = 150;

Αυτό που έμεινε για εμάς να κάνουμε είναι να κάνουμε πραγματικά ένα κουτάκι να εμφανίζεται πάνω από ένα κελί (όταν βρίσκεται σε λειτουργία επεξεργασίας), εμφανίζοντας το πεδίο AuthorEmail. Κατ 'αρχάς, πρέπει να βεβαιωθούμε ότι το DBLookupComboBox1 μετακινείται και έχει μέγεθος κατά το κελί στο οποίο εμφανίζεται το πεδίο AuthorEmail.

διαδικασία TForm1.DBGrid1DrawColumnCell
(Αποστολέας: TObject;
const Rect: TRect;
DataCol: Ακέραιος αριθμός;
Στήλη: Τοπίο;
Κράτος: TGridDrawState);
αρχικά (gdFocused σε Κατάσταση) τότε αρχικά (Στήλη. Πεδίο. FieldName = DBLookupComboBox1.DataField) τότε DBLookupComboBox1 κάνω
ξεκινήσει
Αριστερά: = Rect. Αριστερά + DBGrid1.Left + 2?
Αρχή: = Rect. Κορυφή + DBGrid1.Top + 2;
Πλάτος: = Rect. Δεξιά - Rect. Αριστερά;
Πλάτος: = Rect. Δεξιά - Rect. Αριστερά;
Ύψος: = Rect. Κάτω - Rect. Μπλουζα;
Ορατό: = Αληθινό.
τέλος;
τέλος
τέλος;

Στη συνέχεια, όταν φεύγουμε από το κελί, πρέπει να κρύψουμε το σύνθετο πλαίσιο:

διαδικασία TForm1.DBGrid1ColExit (αποστολέας: TObject);
αρχικά DBGrid1.SelectedField. FieldName = DBLookupComboBox1.DataField έπειτα
DBLookupComboBox1.Visible: = Λάθος
τέλος;

Σημειώστε ότι όταν βρίσκεστε σε κατάσταση επεξεργασίας, όλες οι πληκτρολογήσεις πηγαίνουν στο κελί του DBGrid αλλά πρέπει να βεβαιωθούμε ότι αποστέλλονται στο DBLookupComboBox. Στην περίπτωση ενός DBLookupComboBox, ενδιαφέρουμε κυρίως το κλειδί [Tab]. θα πρέπει να μετακινήσετε την εστίαση εισόδου στο επόμενο κελί.

διαδικασία TForm1.DBGrid1KeyPress (αποστολέας: TObject; var Key: Char).
αρχικά (κλειδί = Chr (9)) έπειτα Εξοδος;
αν (DBGrid1.SelectedField. FieldName = DBLookupComboBox1.DataField) τότε αρχίζει
DBLookupComboBox1.SetFocus;
SendMessage (DBLookupComboBox1.Handle, WM_Char, λέξη (κλειδί), 0);
τέλος
τέλος;

Όταν επιλέγετε ένα στοιχείο ("σειρά") από ένα DBLookupComboBox, η τιμή ή το αντίστοιχο KeyField Το πεδίο αποθηκεύεται ως η τιμή του DataField πεδίο.

instagram story viewer