Pokud vyvíjíte databázové aplikace s tabulkami obsahujícími pole MEMO, všimnete si, že ve výchozím nastavení komponenta TDBGrid nezobrazuje obsah pole MEMO uvnitř buňky DBGrid.
Tento článek poskytuje představu o tom, jak vyřešit tento problém TMemoField (s několika dalšími triky) ...
TMemoField
Pole typu Memo se používají k reprezentaci zdlouhavého textu nebo kombinací textu a čísel. Při vytváření databázových aplikací pomocí Delphi se objekt TMemoField používá k reprezentaci pole typu memo v datové sadě. TMemoField zahrnuje základní chování společné pro pole obsahující textová data nebo libovolnou délku. Ve většině databází je velikost pole Memo omezena velikostí databáze.
I když můžete zobrazit obsah pole MEMO v komponentě TDBMemo, TDBGrid podle návrhu zobrazí pouze obsah (Memo) pro obsah takových polí.
Abyste mohli skutečně zobrazit nějaký text (z pole MEMO) v příslušné buňce DBGrid, stačí přidat pouze jednoduchý řádek kódu ...
Pro účely další diskuse řekněme, že máte databázovou tabulku s názvem „TestTable“ s alespoň jedním polem MEMO s názvem „Data“.
OnGetText
Chcete-li zobrazit obsah pole MEMO v DBGrid, musíte do pole připojit jednoduchý řádek kódu OnGetText událost. Nejjednodušší způsob, jak vytvořit obslužný program události OnGetText, je použití editoru Fields v době návrhu k vytvoření trvalé komponenty pole pro pole memo:
- Připojte své potomstvo TDataset (TTable, TQuery, TADOTable, TADOQuery ...) do databázové tabulky "TestTable".
- Poklepáním na komponentu datové sady otevřete Editor polí
- Přidejte pole MEMO do seznamu trvalých polí
- V editoru Fields vyberte pole MEMO
- Aktivujte kartu Události v Inspektoru objektů
- Dvojitým kliknutím na událost OnGetText vytvořte obslužný program události
Přidejte další řádek kódu (kurzívou níže):
procedura TForm1.DBTableDataGetText (
Odesílatel: TField;
var Text: String;
DisplayText: Boolean);
začít
Text: = Kopírovat (DBTableData. AsString, 1, 50);
Poznámka: objekt datové sady se nazývá „DBTable“, pole MEMO se nazývá „DATA“, a proto se ve výchozím nastavení TMemoField připojený k databázovému poli MEMO nazývá „DBTableData“. Přiřazením DBTableData. AsString do Text parametr události OnGetText, řekneme Delphi, aby zobrazoval VŠECHNY text z pole MEMO v buňce DBGrid.
Můžete také přizpůsobte DisplayWidth pole typu memo na vhodnější hodnotu.
Poznámka: Protože pole MEMO mohou být docela velká, je dobré ukázat pouze jejich část. Ve výše uvedeném kódu se zobrazí pouze prvních 50 znaků.
Úpravy na samostatném formuláři
Ve výchozím nastavení TDBGrid neumožňuje úpravy polí MEMO. Pokud chcete povolit úpravy na místě, můžete přidat nějaký kód, který reaguje na akci uživatele, která zobrazuje samostatné okno, které umožňuje úpravy pomocí komponenty TMemo.
Kvůli jednoduchosti otevřeme editační okno, když stisknete ENTER na „MEMO“ poli v DBGrid.
Pojďme použít KeyDown událost komponenty DBGrid:
postup TForm1.DBGrid1KeyDown (
Odesílatel: TObject;
var klíč: slovo;
Shift: TShiftState);
začít
pokud Key = VK_RETURN, pak
začít
if DBGrid1.SelectedField = DBTableData then
s TMemoEditorForm. Vytvořte (žádné)
Snaž se
DBMemoEditor. Text: = DBTableData. AsString;
ShowModal;
DBTable. Upravit;
DBTableData. AsString: = DBMemoEditor. Text;
Konečně
Volný, uvolnit;
konec;
konec;
konec;
Poznámka 1: „TMemoEditorForm“ je sekundární formulář obsahující pouze jednu složku: „DBMemoEditor“ (TMemo).
Poznámka 2: „TMemoEditorForm“ byl odstraněn ze seznamu „Automatické vytváření formulářů“ v dialogovém okně Možnosti projektu.
Podívejme se, co se stane v obslužném programu události KeyDown DBGrid1:
- Když uživatel stiskne klávesu ENTER (porovnáváme parametr Key s VK_RETURN virtuální klíčový kód) [Key = VK_RETURN],
- Pokud je aktuálně vybrané pole v DBGrid naše pole MEMO (DBGrid1.SelectedField = DBTableData),
- Vytváříme TMemoEditorForm [TMemoEditorForm. Vytvořit (bez)],
- Zašlete hodnotu pole MEMO do komponenty TMemo [DBMemoEditor. Text: = DBTableData. AsString],
- Zobrazit formulář modálně [ShowModal],
- Když uživatel dokončí úpravy a zavře formulář, musíme dát dataste do režimu úprav [DBTable. Upravit],
- Aby bylo možné přiřadit editovanou hodnotu zpět do našeho pole MEMO [DBTableData. AsString: = DBMemoEditor. Text].
Poznámka: Pokud hledáte více článků souvisejících s TDBGrid a tipů na použití, navštivte: "TDBGrid na MAX"kolekce tipů.