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 uppfattning om hur man löser den här TMemoFields fråga (med några fler knep) ...
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 visa lite text (från MEMO-fältet) i rätt DBGrid-cell behöver du bara lägga till en enkel kodrad ...
För nästa diskussions syfte, låt oss säga att du har en databastabell med namnet "TestTable" med minst ett MEMO-fält med namnet "Data".
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:
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 parameter för OnGetText-händelsen, ber vi Delphi att visa ALLA texten från MEMO-fältet i en DBGrid-cell.
Du kan också anpassa memo-fältets DisplayWidth 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.
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.Create (noll) gör
Prova
DBMemoEditor.Text: = DBTableData.AsString;
ShowModal;
DBTable.Edit;
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.