Kako prikazati in urediti polja MEMO v TDBGrid Delfi

Če razvijate aplikacije baz podatkov s tabelami, ki vsebujejo polja MEMO, boste opazili, da komponenta TDBGrid privzeto ne prikazuje vsebine polja MEMO znotraj celice DBGrid.

Ta članek ponuja idejo, kako rešiti to težavo TMemoField (z nekaj več trikov) ...

TMemoField

Spominska polja se uporabljajo za prikaz dolgega besedila ali kombinacij besedila in številk. Pri gradnji aplikacij baze podatkov z uporabo Delphija objekt TMemoField uporablja za predstavljanje beležkega polja v naboru podatkov. TMemoField zajema osnovno vedenje, ki je skupno za polja, ki vsebujejo besedilne podatke ali poljubno dolžino. V večini baz je velikost polja Opomba omejena z velikostjo baze podatkov.

Medtem ko lahko vsebino polja MEMO prikažete v komponenti TDBMemo, TDBGrid pri načrtovanju prikaže samo "(Memo)" za vsebino takih polj.

Če želite dejansko prikazati nekaj besedila (iz polja MEMO) v ustrezni celici DBGrid, morate dodati le preprosto vrstico kode ...

Za namen naslednje razprave recimo, da imate tabelo baze podatkov z imenom "TestTable" z vsaj enim poljem MEMO z imenom "Data".

instagram viewer

OnGetText

Če želite prikazati vsebino polja MEMO v DBGridu, morate v polje tega polja priložiti preprosto vrstico kode OnGetText dogodek. Najlažji način za ustvarjanje obdelovalca dogodkov OnGetText je uporaba urejevalnika polja v času načrtovanja za ustvarjanje obstojne komponente polja za beležko:

  1. Povežite svojo potomčno komponento TDataset (TTable, TQuery, TADOTable, TADOQuery ...) v tabelo baze podatkov "TestTable".
  2. Dvokliknite komponento nabora, da odprete urejevalnik polja
  3. Dodajte polje MEMO na seznam obstojnih polj
  4. V urejevalniku Polja izberite polje MEMO
  5. Aktivirajte zavihek Dogodki v inšpektorju objektov
  6. Dvokliknite dogodek OnGetText, da ustvarite orodje za obdelavo dogodkov

Dodajte naslednjo vrstico kode (poševno spodaj):

postopek TForm1.DBTableDataGetText (
Pošiljatelj: TField;
var Besedilo: String;
DisplayText: Boolean);
začeti
Besedilo: = Kopiraj (DBTableData AsString, 1, 50);

Opomba: objekt nabora podatkov se imenuje "DBTable", polje MEMO se imenuje "DATA", zato se privzeto TMemoField, povezano s poljem baze podatkov MEMO, imenuje "DBTableData". Z dodelitvijo DBTableData. AsString na Besedilo parametra dogodka OnGetText, povemo Delphiju, naj prikaže VSE besedilo iz polja MEMO v celici DBGrid.
Lahko tudi prilagodite širino zaslona zabeležnega polja na ustreznejšo vrednost.

Opomba: ker so polja MEMO lahko precej VELIKA, je dobro pokazati le del nje. V zgornji kodi je prikazanih samo prvih 50 znakov.

Urejanje na ločenem obrazcu

TDBGrid privzeto ne dovoljuje urejanja polj MEMO. Če želite omogočiti urejanje "na mestu", lahko dodate kodo za odzivanje na uporabniško dejanje, ki prikazuje ločeno okno, ki omogoča urejanje s pomočjo komponente TMemo.
Zaradi poenostavitve odpremo okno za urejanje, ko ENTER v DBGrid pritisnemo "na" polje MEMO.
Izkoristimo KeyDown dogodek komponente DBGrid:

postopek TForm1.DBGrid1KeyDown (
Pošiljatelj: TObject;
var Ključ: Word;
Shift: TShiftState);
začeti
če je Key = VK_RETURN, potem
začeti
če je DBGrid1.SelectedField = DBTableData, potem
s TMemoEditorForm. Ustvari (nič) narediti
poskusi
DBMemoEditor. Besedilo: = DBTableData. AsString;
ShowModal;
DBTable. Uredi;
DBTableData. AsString: = DBMemoEditor. Besedilo;
končno
Prost;
konec;
konec;
konec;

Opomba 1: "TMemoEditorForm" je sekundarna oblika, ki vsebuje samo eno komponento: "DBMemoEditor" (TMemo).
Opomba 2: "TMemoEditorForm" je bil odstranjen s seznama "Samodejno ustvari obrazce" v pogovornem oknu Možnosti projekta.

Poglejmo, kaj se zgodi v upravljalniku dogodkov KeyDown DBGrid1:

  1. Ko uporabnik pritisne tipko ENTER (primerjamo parameter Key z VK_RETURN virtualna koda ključa) [Tipka = VK_RETURN],
  2. Če je trenutno izbrano polje v DBGrid naše polje MEMO (DBGrid1.SelectedField = DBTableData),
  3. Ustvarimo TMemoEditorForm [TMemoEditorForm. Ustvari (nič)],
  4. Vrednost polja MEMO pošljite komponenti TMemo [DBMemoEditor. Besedilo: = DBTableData. AsString],
  5. Oblika prikažite modalno [ShowModal],
  6. Ko uporabnik konča z urejanjem in zapre obrazec, moramo dataste prestaviti v način urejanja [DBTable. Uredi],
  7. Da bi lahko uredili dodeljeno vrednost nazaj v polje MEMO [DBTableData. AsString: = DBMemoEditor. Besedilo].

Opomba: če iščete več povezanih člankov in nasvetov za uporabo, povezane s TDBGrid, ne pozabite obiskati: "TDBGrid na MAX"zbirka nasvetov.

instagram story viewer