Πώς να εμφανίσετε και να επεξεργαστείτε τα πεδία MEMO στο TDBGrid των Δελφών

Αν αναπτύσσετε εφαρμογές βάσεων δεδομένων με πίνακες που περιέχουν πεδία MEMO, θα παρατηρήσετε ότι από προεπιλογή το στοιχείο TDBGrid δεν εμφανίζει τα περιεχόμενα ενός πεδίου MEMO μέσα σε ένα κελί DBGrid.

Αυτό το άρθρο παρέχει μια ιδέα για το πώς να λύσει αυτό το ζήτημα του TMemoField (με μερικά ακόμα κόλπα) ...

TMemoField

Τα πεδία υπομνήματος χρησιμοποιούνται για να αντιπροσωπεύουν μακρύ κείμενο ή συνδυασμούς κειμένου και αριθμών. Όταν δημιουργείτε εφαρμογές βάσεων δεδομένων χρησιμοποιώντας Delphi, το αντικείμενο TMemoField χρησιμοποιείται για να αντιπροσωπεύει ένα πεδίο σημειώσεων σε ένα σύνολο δεδομένων. Το TMemoField ενσωματώνει τη θεμελιώδη συμπεριφορά που είναι κοινή σε πεδία που περιέχουν δεδομένα κειμένου ή αυθαίρετο μήκος. Στις περισσότερες βάσεις δεδομένων, το μέγεθος του πεδίου σημειώσεων περιορίζεται από το μέγεθος της βάσης δεδομένων.

Ενώ μπορείτε να εμφανίσετε τα περιεχόμενα ενός πεδίου MEMO σε μια συνιστώσα TDBMemo, ο σχεδιασμός του TDBGrid θα εμφανίσει μόνο "(Memo)" για το περιεχόμενο τέτοιων πεδίων.

instagram viewer

Για να εμφανιστεί πραγματικά κάποιο κείμενο (από το πεδίο MEMO) στο κατάλληλο κελί DBGrid, θα χρειαστεί να προσθέσετε μόνο μια απλή γραμμή κώδικα ...

Για τους σκοπούς της επόμενης συζήτησης, ας υποθέσουμε ότι έχετε έναν πίνακα βάσης δεδομένων με τίτλο "TestTable" με τουλάχιστον ένα πεδίο MEMO με το όνομα "Δεδομένα".

OnGetText

Για να εμφανίσετε τα περιεχόμενα ενός πεδίου MEMO στο DBGrid, πρέπει να επισυνάψετε μια απλή γραμμή κώδικα στο πεδίο του OnGetText Εκδήλωση. Ο ευκολότερος τρόπος για να δημιουργήσετε το χειριστήριο συμβάντων OnGetText είναι να χρησιμοποιήσετε τον επεξεργαστή πεδίων κατά την ώρα σχεδιασμού για να δημιουργήσετε ένα στοιχείο επίμονου πεδίου για το πεδίο σημειώσεων:

  1. Συνδέστε το συστατικό του απογόνου TDataset (TTable, TQuery, TADOTable, TADOQuery ...) στον πίνακα βάσης δεδομένων "TestTable".
  2. Κάντε διπλό κλικ στο στοιχείο συνόλου δεδομένων για να ανοίξετε τον επεξεργαστή Πεδία
  3. Προσθέστε το πεδίο MEMO στη λίστα σταθερών πεδίων
  4. Επιλέξτε το πεδίο MEMO στον επεξεργαστή πεδίων
  5. Ενεργοποιήστε την καρτέλα Συμβάντα στον Επιθεωρητή αντικειμένων
  6. Κάντε διπλό κλικ στο συμβάν OnGetText για να δημιουργήσετε το πρόγραμμα χειρισμού συμβάντων

Προσθέστε την επόμενη γραμμή κώδικα (παρακάτω):

διαδικασία TForm1.DBTableDataGetText (
Αποστολέας: TField;
var Κείμενο: String;
DisplayText: Boolean);
ξεκινήσει
Κείμενο: = Αντιγραφή (DBTableData. AsString, 1, 50).

Σημείωση: Το αντικείμενο ομάδας δεδομένων ονομάζεται "DBTable", το πεδίο MEMO καλείται "DATA" και ως εκ τούτου από προεπιλογή το TMemoField που είναι συνδεδεμένο στο πεδίο βάσης δεδομένων MEMO ονομάζεται "DBTableData". Με την εκχώρηση DBTableData. AsString στο Κείμενο παραμέτρου του συμβάντος OnGetText, λέμε στους Delphi να εμφανίσουν ΟΛΑ το κείμενο από το πεδίο MEMO σε ένα κελί DBGrid.
Μπορείτε επίσης να προσαρμόστε το DisplayWidth του πεδίου υπομνήματος σε μια πιο κατάλληλη τιμή.

Σημείωση: επειδή τα πεδία MEMO μπορούν να είναι αρκετά μεγάλα, είναι καλή ιδέα να δείξετε μόνο ένα μέρος από αυτό. Στον παραπάνω κώδικα εμφανίζονται μόνο οι πρώτοι 50 χαρακτήρες.

Επεξεργασία σε ξεχωριστή φόρμα

Από προεπιλογή, το TDBGrid δεν επιτρέπει την επεξεργασία των πεδίων MEMO. Εάν θέλετε να ενεργοποιήσετε την επεξεργασία "στη θέση", μπορείτε να προσθέσετε κάποιο κώδικα για να αντιδράσετε σε μια ενέργεια χρήστη που εμφανίζει ένα ξεχωριστό παράθυρο που επιτρέπει την επεξεργασία χρησιμοποιώντας ένα στοιχείο TMemo.
Για λόγους απλότητας θα ανοίξουμε ένα παράθυρο επεξεργασίας όταν πατηθεί το πλήκτρο "on" στο πεδίο MEMO στο DBGrid.
Ας χρησιμοποιήσουμε το KeyDown περίπτωση συμβάντος DBGrid:

διαδικασία TForm1.DBGrid1KeyDown (
Αποστολέας: TObject;
λέξη var: λέξη;
Shift: TShiftState);
ξεκινήσει
εάν το κλειδί = VK_RETURN τότε
ξεκινήσει
αν DBGrid1.SelectedField = DBTableData τότε
με το TMemoEditorForm. Δημιουργία (μηδέν) κάνουμε
δοκιμάστε
DBMemoEditor. Κείμενο: = DBTableData. AsString;
ShowModal;
DBTable. Επεξεργασία;
DBTableData. AsString: = DBMemoEditor. Κείμενο;
τελικά
Ελεύθερος;
τέλος;
τέλος;
τέλος;

Σημείωση 1: Το "TMemoEditorForm" είναι δευτερεύουσα φόρμα που περιέχει μόνο ένα στοιχείο: "DBMemoEditor" (TMemo).
Σημείωση 2: Το "TMemoEditorForm" καταργήθηκε από τη λίστα "Αυτόματη δημιουργία φορμών" στο παράθυρο διαλόγου "Επιλογές έργου".

Ας δούμε τι συμβαίνει στο χειριστήριο συμβάντων KeyDown του DBGrid1:

  1. Όταν ένας χρήστης πιέσει το πλήκτρο ENTER (συγκρίνουμε την παράμετρο Key με το VK_RETURN κωδικό εικονικού κλειδιού) [Πλήκτρο = VK_RETURN],
  2. Εάν το τρέχον επιλεγμένο πεδίο στο DBGrid είναι το πεδίο MEMO μας (DBGrid1.SelectedField = DBTableData),
  3. Δημιουργούμε το TMemoEditorForm [TMemoEditorForm. Δημιουργία (μηδέν)],
  4. Στείλτε την τιμή του πεδίου MEMO στο στοιχείο TMemo [DBMemoEditor. Κείμενο: = DBTableData. AsString],
  5. Εμφανίστε τη μορφή με τρόπο [ShowModal],
  6. Όταν ένας χρήστης ολοκληρώσει την επεξεργασία και κλείσει τη φόρμα, πρέπει να βάλετε το dataste στη λειτουργία επεξεργασίας [DBTable. Επεξεργασία],
  7. Για να μπορέσουμε να εκχωρήσουμε την επεξεργασμένη τιμή στο πεδίο MEMO [DBTableData. AsString: = DBMemoEditor. Κείμενο].

Σημείωση: εάν αναζητάτε περισσότερα άρθρα σχετικά με το TDBGrid και συμβουλές χρήσης, φροντίστε να επισκεφτείτε: "TDBGrid στο MAX"συλλογή συμβουλών.

instagram story viewer