Affichage et modification des champs MEMO dans TDBGrid de Delphi

Affichage et modification des champs MEMO dans TDBGrid de Delphi

Si vous développez des applications de base de données avec des tables contenant des champs MEMO, vous remarquerez que, par défaut, le composant TDBGrid n'affiche pas le contenu d'un champ MEMO dans une cellule DBGrid.

TMemoField

Les champs mémo sont utilisés pour représenter un texte long ou des combinaisons de texte et de nombres. Lors de la création d'applications de base de données à l'aide de Delphi, l'objet TMemoField est utilisé pour représenter un champ mémo dans un ensemble de données. TMemoField encapsule le comportement fondamental commun aux champs qui contiennent des données texte ou une longueur arbitraire. Dans la plupart des bases de données, la taille du champ Mémo est limitée par la taille de la base de données.

Bien que vous puissiez afficher le contenu d'un champ MEMO dans un composant TDBMemo, par sa conception, le TDBGrid affichera uniquement "(Mémo)" pour le contenu de ces champs.

Afin d'afficher réellement du texte (du champ MEMO) dans la cellule DBGrid appropriée, vous n'aurez qu'à ajouter une simple ligne de code…

Aux fins de la discussion suivante, disons que vous disposez d'une table de base de données nommée "TestTable" avec au moins un champ MEMO nommé "Data".

OnGetText

Pour afficher le contenu d'un champ MEMO dans DBGrid, vous devez attacher une simple ligne de code dans le champOnGetText un événement. La façon la plus simple de créer le gestionnaire d'événements OnGetText consiste à utiliser l'éditeur de champs au moment du design pour créer un composant de champ persistant pour le champ mémo:

  1. Connectez votre composant descendant TDataset (TTable, TQuery, TADOTable, TADOQuery…) à la table de base de données "TestTable".
  2. Double-cliquez sur le composant de l'ensemble de données pour ouvrir l'éditeur de champs
  3. Ajoutez le champ MEMO à la liste des champs persistants
  4. Sélectionnez le champ MEMO dans l'éditeur de champs
  5. Activez l'onglet Événements dans l'inspecteur d'objets
  6. Double-cliquez sur l'événement OnGetText pour créer le gestionnaire d'événements

Ajoutez la ligne de code suivante (en italique ci-dessous):

procédure TForm1.DBTableDataGetText (expéditeur: TField; var Texte: chaîne; DisplayText: Boolean); commencer Texte: = Copier (DBTableData.AsString, 1, 50);

Remarque: l'objet d'ensemble de données est appelé "DBTable", le champ MEMO est appelé "DATA", et par conséquent, le TMemoField connecté au champ de base de données MEMO est appelé "DBTableData". En attribuantDBTableData.AsString auTexte paramètre de l'événement OnGetText, nous demandons à Delphi d'afficher TOUT le texte du champ MEMO dans une cellule DBGrid.
Vous pouvez également adapter la largeur d'affichage du champ mémo à une valeur plus appropriée.

Remarque: étant donné que les champs MEMO peuvent être assez GRANDS, c'est une bonne idée de n'en afficher qu'une partie. Dans le code ci-dessus, seuls les 50 premiers caractères sont affichés.

Modification sur un formulaire séparé

Par défaut, le TDBGrid n'autorise pas la modification des champs MEMO. Si vous souhaitez activer l'édition "sur place", vous pouvez ajouter du code pour réagir à une action de l'utilisateur qui affiche une fenêtre distincte qui permet l'édition à l'aide d'un composant TMemo.
Par souci de simplicité, nous allons ouvrir une fenêtre d'édition lorsque vous appuyez sur ENTRÉE "sur" un champ MEMO dans un DBGrid.
Utilisons leTouche Bas événement d'un composant DBGrid:

procédure TForm1.DBGrid1KeyDown (expéditeur: TObject; var Mot-clé; Shift: TShiftState); commencer si Clé = VK_RETURN puis commencer si DBGrid1.SelectedField = DBTableData puis avec TMemoEditorForm.Create (néant) faire essayer DBMemoEditor.Text: = DBTableData.AsString; ShowModal; DBTable.Edit; DBTableData.AsString: = DBMemoEditor.Text; enfin Libre; fin; fin; fin;

Remarque 1: le "TMemoEditorForm" est une fiche secondaire contenant un seul composant: "DBMemoEditor" (TMemo).
Remarque 2: le "TMemoEditorForm" a été supprimé de la liste "Création automatique de formulaires" dans la boîte de dialogue Options du projet.

Voyons ce qui se passe dans le gestionnaire d'événements KeyDown de DBGrid1:

  1. Lorsqu'un utilisateur appuie sur la touche ENTER (nous comparons le paramètre Key au code de clé virtuelle VK_RETURN) Key = VK_RETURN,
  2. Si le champ actuellement sélectionné dans DBGrid est notre champ MEMO (DBGrid1.SelectedField = DBTableData),
  3. Nous créons le TMemoEditorForm TMemoEditorForm.Create (nil),
  4. Envoyez la valeur du champ MEMO au composant TMemo DBMemoEditor.Text: = DBTableData.AsString,
  5. Affichez le formulaire de façon modale ShowModal,
  6. Lorsqu'un utilisateur termine l'édition et ferme le formulaire, nous devons mettre le dataste en mode Edit DBTable.Edit,
  7. Afin de pouvoir attribuer la valeur modifiée à notre champ MEMO DBTableData.AsString: = DBMemoEditor.Text.

Remarque: si vous recherchez plus d'articles et de conseils d'utilisation liés à TDBGrid, assurez-vous de visiter la collection de conseils "TDBGrid to the MAX".