Delphi DBGrid είναι ένα τόσο ισχυρό στοιχείο που πιθανώς να το χρησιμοποιείτε καθημερινά αν αναπτύσσετε εφαρμογές που έχουν επίγνωση των δεδομένων. Παρακάτω, θα ρίξουμε μια ματιά στο πώς να προσθέσετε κάποιες άλλες λειτουργίες στις εφαρμογές βάσης δεδομένων που οι χρήστες σας είναι σίγουροι ότι θα αγαπούν.
Ακολουθώντας τις έννοιες που περιγράφονται στο Οδηγός αρχαρίων για τον προγραμματισμό βάσης δεδομένων των Δελφών, τα παρακάτω παραδείγματα χρησιμοποιούν στοιχεία ADO (AdoQuery / AdoTable συνδεδεμένα με ADOConnection, DBGrid συνδεδεμένα με AdoQuery μέσω DataSource) για την εμφάνιση του αρχεία από έναν πίνακα βάσης δεδομένων σε ένα στοιχείο DBGrid.
Όλα τα ονόματα των συστατικών παραμένουν όπως τα ονόμασαν οι Δελφοί όταν έπεσαν στη φόρμα (DBGrid1, ADOQuery1, AdoTable1, κλπ.).
Το ποντίκι μετακινείται στην περιοχή τίτλου DBGrid
Πρώτον, ας δούμε πώς να αλλάζουμε τον δείκτη του ποντικιού ενώ περνάει πάνω από την περιοχή τίτλου DBGrid. Το μόνο που έχετε να κάνετε είναι να προσθέσετε τον κώδικα στο συμβάν OnMouseMove για το στοιχείο DBGrid.
Ο παρακάτω κώδικας χρησιμοποιεί απλώς την ιδιότητα MouseCoord του στοιχείου DBGrid για να "υπολογίσει" όπου είναι ο δείκτης του ποντικιού. Αν είναι πάνω από την περιοχή τίτλου DGBrid, το pt.y ισούται με 0, η οποία είναι η πρώτη γραμμή στο DBGrid (η περιοχή τίτλου εμφανίζει τίτλους στηλών / πεδίων).
διαδικασία TForm1.DBGrid1MouseMove
(Αποστολέας: TObject; Μετατόπιση: TShiftState; X, Y: ακέραιος αριθμός).
var
pt: TGridcoord;
ξεκινήσει
pt: = DBGrid1.MouseCoord (χ, γ);
αν pt.y = 0 έπειτα
DBGrid1.Cursor: = crHandPoint
αλλού
DBGrid1.Cursor: = crDefault;
τέλος;
Ταξινόμηση στη στήλη Κλικ και αλλαγή γραμματοσειράς τίτλου στήλης
Αν χρησιμοποιείτε την προσέγγιση ADO για την ανάπτυξη βάσεων δεδομένων Delphi και θέλετε να ταξινομήσετε τις εγγραφές στο σύνολο δεδομένων, πρέπει να ορίσετε την ιδιότητα ταξινόμησης του AdoDataset (ADOQuery, AdoTable).
Η ιδιότητα Ταξινόμηση είναι η ευρύτερη τιμή που υποδεικνύει το τμήμα "ORDER BY" του τυποποιημένου ερωτήματος SQL. Φυσικά, δεν χρειάζεται να γράψετε το ερώτημα SQL για να μπορέσετε να χρησιμοποιήσετε την ιδιότητα Ταξινόμηση. Απλά ορίστε την ιδιότητα Ταξινόμηση στο όνομα ενός μόνο πεδίου ή σε μια λίστα με πεδία χωρισμένα με κόμματα, η κάθε μία ακολουθώντας τη σειρά ταξινόμησης.
Ακολουθεί ένα παράδειγμα:
ADOTable1.Sort: = 'Έτος DESC, ArticleDate ASC'
Το συμβάν OnTitleClick του στοιχείου DBGrid έχει μια παράμετρο στήλης που υποδεικνύει τη στήλη στον οποίο έχει κάνει κλικ ο χρήστης. Κάθε στήλη (αντικείμενο τύπου TColumn) έχει ιδιότητα πεδίου που υποδεικνύει το πεδίο (TField) που αντιπροσωπεύεται από η στήλη και το πεδίο στην ιδιότητα FieldName περιέχει το όνομα του πεδίου στο υποκείμενο σύνολο δεδομένων.
Επομένως, για να ταξινομήσετε ένα σύνολο δεδομένων ADO ανά πεδίο / στήλη, μπορεί να χρησιμοποιηθεί μια απλή γραμμή:
με το TCustomADODataSet (DBGrid1.DataSource. DataSet)
Ταξινόμηση: = Στήλη. Πεδίο. Ονομα πεδίου; // + 'ASC' ή 'DESC'
Παρακάτω είναι ο κώδικας για τον επεξεργαστή Even OnTitleClick που ταξινομεί τις εγγραφές ανά κλικ στη στήλη. Ο κώδικας, όπως πάντα, επεκτείνει την ιδέα.
Κατ 'αρχάς, θέλουμε, με κάποιο τρόπο, να σημειώσουμε τη στήλη που χρησιμοποιείται σήμερα για τη σειρά ταξινόμησης. Στη συνέχεια, εάν κάνουμε κλικ σε έναν τίτλο στήλης και το σύνολο δεδομένων έχει ταξινομηθεί ήδη από αυτήν τη στήλη, θέλουμε να αλλάξουμε τη σειρά ταξινόμησης από ASC (αύξουσα) σε DESC (φθίνουσα) και αντίστροφα. Τέλος, όταν ταξινομούμε το σύνολο δεδομένων από μια άλλη στήλη, θέλουμε να αφαιρέσουμε το σήμα από τη στήλη που επιλέξατε προηγουμένως.
Για λόγους απλότητας, για να επισημάνουμε τη στήλη που "ταξινομεί" τα αρχεία, απλώς θα αλλάξουμε το στυλ γραμματοσειράς του τίτλου στη στήλη Bold και θα την αφαιρέσουμε όταν το σύνολο δεδομένων ταξινομείται με άλλη στήλη.
διαδικασία TForm1.DBGrid1TitleClick (Στήλη: Τόμος);
{$ J +}const PreviousColumnIndex: ακέραιο = -1.
{$ J-}
αρχικά DBGrid1.DataSource. DataSet είναι TCustomADODataSet τότε TCustomADODataSet (DBGrid1.DataSource. DataSet) dobegintry
DBGrid1.Columns [PreviousColumnIndex] .title. Γραμματοσειρά. Στυλ: =
DBGrid1.Columns [PreviousColumnIndex] .title. Γραμματοσειρά. Στυλ - [fsBold];
εξαιρεση;
Column.title. Γραμματοσειρά. Στυλ: =
Column.title. Γραμματοσειρά. Στυλ + [fsBold];
PreviousColumnIndex: = Στήλη. Δείκτης;
αν (Pos (Στήλη. Πεδίο. FieldName, Ταξινόμηση) = 1)
και (Pos ('DESC', Ταξινόμηση) = 0) έπειτα
Ταξινόμηση: = Στήλη. Πεδίο. FieldName + 'DESC'
αλλού
Ταξινόμηση: = Στήλη. Πεδίο. FieldName + 'ASC';
τέλος;
τέλος;
Ο παραπάνω κώδικας χρησιμοποιεί πληκτρολογημένες σταθερές για να διατηρηθεί η τιμή της στήλης που είχε προηγουμένως "επιλεγεί" για τη σειρά ταξινόμησης.