Ako zobraziť a upraviť MEMO polia v Delphiho TDBGrid

Ak vyvíjate databázové aplikácie s tabuľkami obsahujúcimi polia MEMO, všimnete si, že v predvolenom nastavení komponent TDBGrid neukazuje obsah poľa MEMO vo vnútri bunky DBGrid.

Tento článok poskytuje predstavu o tom, ako vyriešiť tento problém TMemoField (s niekoľkými ďalšími trikmi) ...

TMemoField

Polia typu Memo sa používajú na reprezentáciu zdĺhavého textu alebo kombinácií textu a čísel. Pri vytváraní databázových aplikácií pomocou Delphi sa objekt TMemoField používa na reprezentáciu poľa typu memo v množine údajov. TMemoField obsahuje základné správanie spoločné pre polia, ktoré obsahujú textové dáta alebo ľubovoľnú dĺžku. Vo väčšine databáz je veľkosť poľa Memo obmedzená veľkosťou databázy.

Aj keď môžete zobraziť obsah poľa MEMO v komponente TDBMemo, TDBGrid už od návrhu zobrazuje iba obsah (Memo) pre obsah takýchto polí.

Ak chcete skutočne zobraziť nejaký text (z poľa MEMO) v príslušnej bunke DBGrid, stačí pridať iba jednoduchý riadok kódu ...

Na účely ďalšej diskusie povedzme, že máte databázovú tabuľku s názvom „TestTable“ s aspoň jedným poľom MEMO s názvom „Data“.

instagram viewer

OnGetText

Na zobrazenie obsahu poľa MEMO v DBGrid musíte do poľa vložiť jednoduchý riadok kódu OnGetText event. Najjednoduchší spôsob, ako vytvoriť obslužný program udalostí OnGetText, je použiť editor polí v čase návrhu na vytvorenie trvalej komponentu poľa pre pole typu memo:

  1. Pripojte svoju súčasť potomstva TDataset (TTable, TQuery, TADOTable, TADOQuery ...) k databázovej tabuľke „TestTable“.
  2. Dvojitým kliknutím na komponent súboru údajov otvorte Editor polí
  3. Pridajte pole MEMO do zoznamu trvalých polí
  4. V editore polí vyberte pole MEMO
  5. Aktivujte kartu Udalosti v inšpektore objektov
  6. Dvojitým kliknutím na udalosť OnGetText vytvorte obslužný program udalosti

Pridajte nasledujúci riadok kódu (kurzíva je uvedená nižšie):

postup TForm1.DBTableDataGetText (
Odosielateľ: TField;
var Text: String;
DisplayText: Boolean);
začať
Text: = Copy (DBTableData. AsString, 1, 50);

Poznámka: objekt súboru údajov sa nazýva „DBTable“, pole MEMO sa nazýva „DATA“, a preto sa predvolene TMemoField pripojený k poli databázy MEMO nazýva „DBTableData“. Priradením DBTableData. asString do text parameter OnGetText udalosti, povieme Delphi, aby v bunke DBGrid zobrazoval VŠETKY text z poľa MEMO.
Môžete tiež prispôsobiť DisplayWidth poľa typu memo na vhodnejšiu hodnotu.

Poznámka: Keďže polia MEMO môžu byť dosť veľké, je dobré ukázať iba ich časť. Vo vyššie uvedenom kóde sa zobrazuje iba prvých 50 znakov.

Úpravy na samostatnom formulári

TDBGrid štandardne nepovoľuje úpravy polí MEMO. Ak chcete povoliť úpravy na mieste, môžete pridať nejaký kód, ktorý reaguje na akciu používateľa, ktorá zobrazuje samostatné okno, ktoré umožňuje úpravy pomocou súčasti TMemo.
Kvôli jednoduchosti otvoríme editačné okno, keď stlačíte ENTER na poli MEMO v DBGrid.
Poďme použiť KeyDown udalosť komponenty DBGrid:

postup TForm1.DBGrid1KeyDown (
Odosielateľ: TObject;
Var Key: Word;
Shift: TShiftState);
začať
ak Key = VK_RETURN, potom
začať
if DBGrid1.SelectedField = DBTableData then
s TMemoEditorForm. Vytvoriť (bez)
vyskúšať
DBMemoEditor. Text: = DBTableData. asString;
ShowModal;
DBTable. editovať;
DBTableData. AsString: = DBMemoEditor. Text;
konečne
Zadarmo;
koniec;
koniec;
koniec;

Poznámka 1: „TMemoEditorForm“ je sekundárna forma obsahujúca iba jednu zložku: „DBMemoEditor“ (TMemo).
Poznámka 2: „TMemoEditorForm“ bol odstránený zo zoznamu „Automatické vytváranie formulárov“ v dialógovom okne Možnosti projektu.

Pozrime sa, čo sa deje v obsluhe udalosti KeyDown DBGrid1:

  1. Keď užívateľ stlačí kláves ENTER (porovnávame parameter Key s parametrom VK_RETURN) kód virtuálneho kľúča) [Key = VK_RETURN],
  2. Ak je aktuálne vybratým poľom v DBGrid naše pole MEMO (DBGrid1.SelectedField = DBTableData),
  3. Vytvárame TMemoEditorForm [TMemoEditorForm. Vytvoriť (nulové)],
  4. Odošlite hodnotu poľa MEMO komponentu TMemo [DBMemoEditor. Text: = DBTableData. AsString],
  5. Zobraziť formulár modálne [ShowModal],
  6. Keď používateľ dokončí úpravy a zatvorí formulár, musíme dať dátové súbory do režimu úprav [DBTable. Edit],
  7. Aby sme mohli priradiť upravenú hodnotu späť do nášho poľa MEMO [DBTableData. AsString: = DBMemoEditor. Text].

Poznámka: Ak hľadáte ďalšie články súvisiace s TDBGrid a tipy na používanie, určite navštívte: "TDBGrid na MAX"zbierka tipov.