Hur man visar och redigerar MEMO-fält i Delphis TDBGrid

Om du utvecklar databasapplikationer med tabeller som innehåller MEMO-fält kommer du att märka att TDBGrid-komponenten som standard inte visar innehållet i ett MEMO-fält i en DBGrid-cell.

Den här artikeln ger en idé om hur man löser den här TMemoFields fråga (med några fler knep) ...

TMemoField

Memofält används för att representera lång text eller kombinationer av text och siffror. När man bygger databasapplikationer som använder Delphi, används TMemoField-objektet för att representera ett memo-fält i ett dataset. TMemoField kapslar in det grundläggande beteende som är vanligt för fält som innehåller textdata eller godtycklig längd. I de flesta databaser är storleken på Memo-fältet begränsad av databasens storlek.

Medan du kan visa innehållet i ett MEMO-fält i en TDBMemo-komponent, kommer TDBGrid genom att designa endast att visa "(Memo)" för innehållet i sådana fält.

För att faktiskt kunna visa lite text (från MEMO-fältet) i rätt DBGrid-cell behöver du bara lägga till en enkel kodrad ...

instagram viewer

För nästa diskussions syfte, låt oss säga att du har en databastabell med namnet "Testtabell" med minst ett MEMO-fält med namnet "Data".

OnGetText

För att visa innehållet i ett MEMO-fält i DBGrid måste du bifoga en enkel kodrad i fältets OnGetText händelse. Det enklaste sättet att skapa händelsehanteraren OnGetText är att använda Fields-redigeraren vid designtid för att skapa en ihållande fältkomponent för memo-fältet:

  1. Anslut din TDataset-efterkommerkomponent (TTable, TQuery, TADOTable, TADOQuery ...) till databasen "TestTable".
  2. Dubbelklicka på datakomponenten för att öppna Fields-redigeraren
  3. Lägg till MEMO-fältet i listan med ihållande fält
  4. Välj MEMO-fältet i Fields-redigeraren
  5. Aktivera fliken Händelser i objektinspektören
  6. Dubbelklicka på OnGetText-händelsen för att skapa händelseshanteraren

Lägg till nästa kodrad (kursiverad nedan):

procedur TForm1.DBTableDataGetText (
Avsändare: TField;
var Text: String;
DisplayText: Boolean);
Börja
Text: = Kopiera (DBTableData. AsString, 1, 50);

Obs: datasetobjektet kallas "DBTable", MEMO-fältet kallas "DATA" och därför kallas TMemoField som är anslutet till MEMO-databasfältet som standard "DBTableData". Genom att tilldela DBTableData. AsString till Text parametern för händelsen OnGetText ber vi Delphi att visa ALLA texten från MEMO-fältet i en DBGrid-cell.
Du kan också anpassa DisplayWidth av memo-fältet till ett mer lämpligt värde.

Obs! Eftersom MEMO-fält kan vara ganska STORA, är det en bra idé att bara visa en del av det. I ovanstående kod visas bara de första 50 tecknen.

Redigering på ett separat formulär

Som standard tillåter inte TDBGrid redigering av MEMO-fält. Om du vill aktivera redigering "på plats" kan du lägga till en kod för att reagera på en användaråtgärd som visar ett separat fönster som tillåter redigering med en TMemo-komponent.
För enkelhets skull öppnar vi ett redigeringsfönster när ENTER trycks in "på" ett MEMO-fält i ett DBGrid.
Låt oss använda Nyckel ner händelse av en DBGrid-komponent:

procedur TForm1.DBGrid1KeyDown (
Avsändare: TObject;
var Nyckel: Word;
Skift: TShiftState);
Börja
om nyckel = VK_RETURN då
Börja
om DBGrid1.SelectedField = DBTableData då
med TMemoEditorForm. Skapa (noll) do
Prova
DBMemoEditor. Text: = DBTableData. AsString;
ShowModal;
DBTABLE. Redigera;
DBTableData. AsString: = DBMemoEditor. Text;
till sist
Fri;
slutet;
slutet;
slutet;

Not 1: "TMemoEditorForm" är en sekundär form som endast innehåller en komponent: "DBMemoEditor" (TMemo).
Obs 2: "TMemoEditorForm" togs bort från listan "Skapa automatiskt formulär" i dialogrutan Projektalternativ.

Låt oss se vad som händer i DBGrid1s KeyDown-evenemangshanterare:

  1. När en användare trycker på ENTER-knappen (jämför vi Key-parametern med VK_RETURN virtuell nyckelkod) [Nyckel = VK_RETURN],
  2. Om det för närvarande valda fältet i DBGrid är vårt MEMO-fält (DBGrid1.SelectedField = DBTableData),
  3. Vi skapar TMemoEditorForm [TMemoEditorForm. Skapa (noll)],
  4. Skicka värdet på MEMO-fältet till TMemo-komponenten [DBMemoEditor. Text: = DBTableData. AsString],
  5. Visa formuläret modellt [ShowModal],
  6. När en användare avslutar med redigering och stänger formuläret måste vi lägga dataställningen i redigeringsläget [DBTable. Redigera],
  7. För att kunna tilldela det redigerade värdet tillbaka till vårt MEMO-fält [DBTableData. AsString: = DBMemoEditor. Text].

Obs! Om du letar efter fler TDBGrid-relaterade artiklar och användartips, se till att besöka: "TDBGrid till MAX"tipssamling.

instagram story viewer