Cum să afișați și să editați câmpurile MEMO în Delphi's TDBGrid

Dacă dezvoltați aplicații de bază de date cu tabele care conțin câmpuri MEMO, veți observa că, în mod implicit, componenta TDBGrid nu arată conținutul unui câmp MEMO în interiorul unei celule DBGrid.

Acest articol oferă o idee despre cum să rezolvați problema acestui TMemoField (cu alte câteva trucuri) ...

TMemoField

Câmpurile memo sunt utilizate pentru a reprezenta text lung sau combinații de text și numere. Când construiți aplicații de baze de date folosind Delphi, obiectul TMemoField este utilizat pentru a reprezenta un câmp memo într-un set de date. TMemoField încapsulează comportamentul fundamental comun câmpurilor care conțin date text sau lungime arbitrară. În majoritatea bazelor de date, dimensiunea câmpului Memo este limitată de dimensiunea bazei de date.

În timp ce puteți afișa conținutul unui câmp MEMO într-o componentă TDBMemo, prin proiectare TDBGrid va afișa doar „(Memo)” pentru conținutul acestor câmpuri.

Pentru a afișa efectiv un text (din câmpul MEMO) în celula DBGrid corespunzătoare, va trebui doar să adăugați o linie simplă de cod ...

instagram viewer

Pentru următoarea discuție, să spunem că aveți un tabel de baze de date numit „TestTable” cu cel puțin un câmp MEMO numit „Date”.

OnGetText

Pentru a afișa conținutul unui câmp MEMO în DBGrid, trebuie să atașați o linie simplă de cod în câmpul OnGetText eveniment. Cel mai simplu mod de a crea gestionatorul de evenimente OnGetText este de a utiliza editorul Fields la momentul proiectării pentru a crea o componentă de câmp persistentă pentru câmpul de memorie:

  1. Conectați componenta descendentă TDataset (TTable, TQuery, TADOTable, TADOQuery ...) la tabelul bazei de date „TestTable”.
  2. Faceți dublu clic pe componenta setului de date pentru a deschide editorul Fields
  3. Adăugați câmpul MEMO la lista câmpurilor persistente
  4. Selectați câmpul MEMO în editorul Fields
  5. Activați fila Evenimente din Inspectorul de obiecte
  6. Faceți dublu clic pe evenimentul OnGetText pentru a crea gestionatorul de evenimente

Adăugați următoarea linie de cod (cu caractere italice mai jos):

procedura TForm1.DBTableDataGetText (
Expeditor: TField;
var Text: șir;
DisplayText: Boolean);
începe
Text: = Copiere (DBTableData. AsString, 1, 50);

Notă: obiectul setului de date se numește "DBTable", câmpul MEMO se numește "DATA" și, prin urmare, în mod implicit, TMemoField conectat la câmpul bazei de date MEMO se numește "DBTableData". Prin atribuire DBTableData. AsString la Text parametrul evenimentului OnGetText, îi spunem lui Delphi să afișeze TOATE textul din câmpul MEMO într-o celulă DBGrid.
Poti de asemenea adaptați DisplayWidth a câmpului memo la o valoare mai potrivită.

Notă: întrucât câmpurile MEMO pot fi destul de mari, este bine să arătați doar o parte din acesta. În codul de mai sus, sunt afișate doar primele 50 de caractere.

Editarea pe un formular separat

În mod implicit, TDBGrid nu permite editarea câmpurilor MEMO. Dacă doriți să activați editare „în loc”, puteți adăuga unele coduri pentru a reacționa la o acțiune a utilizatorului care arată o fereastră separată care permite editarea folosind o componentă TMemo.
Din simplitate, vom deschide o fereastră de editare atunci când ENTER este apăsat „pe” un câmp MEMO dintr-un DBGrid.
Să folosim Tasta în jos eveniment al unei componente DBGrid:

procedura TForm1.DBGrid1KeyDown (
Expeditor: TObject;
var Cheie: Cuvânt;
Shift: TShiftState);
începe
dacă cheie = VK_RETURN atunci
începe
dacă DBGrid1.SelectedField = DBTableData atunci
cu TMemoEditorForm. Create (nil) do
încerca
DBMemoEditor. Text: = DBTableData. AsString;
ShowModal;
DBTable. Editați | ×;
DBTableData. AsString: = DBMemoEditor. Text;
in cele din urma
Liber;
Sfârșit;
Sfârșit;
Sfârșit;

Nota 1: „TMemoEditorForm” este o formă secundară care conține o singură componentă: „DBMemoEditor” (TMemo).
Nota 2: „TMemoEditorForm” a fost eliminat din lista „Formulare de creare automată” din fereastra de dialog Opțiuni de proiect.

Haideți să vedem ce se întâmplă în managerul de evenimente KeyDown al DBGrid1:

  1. Când un utilizator apasă tasta ENTER (comparăm parametrul Key cu VK_RETURN cod cheie virtuală) [Cheie = VK_RETURN],
  2. Dacă câmpul selectat în prezent în DBGrid este câmpul nostru MEMO (DBGrid1.SelectedField = DBTableData),
  3. Creăm TMemoEditorForm [TMemoEditorForm. Creați (nil)],
  4. Trimiteți valoarea câmpului MEMO componentei TMemo [DBMemoEditor. Text: = DBTableData. AsString],
  5. Afișați formularul în mod [ShowModal],
  6. Când un utilizator termină cu editarea și închide formularul, trebuie să introducem informația în modul Editare [DBTable. Editați | ×],
  7. Pentru a putea atribui valoarea editată câmpului MEMO [DBTableData. AsString: = DBMemoEditor. Text].

Notă: dacă căutați mai multe articole și sfaturi de utilizare legate de TDBGrid, asigurați-vă că vizitați: "TDBGrid la MAX„colecție de sfaturi.