Hvis du udvikler databaseapplikationer med tabeller, der indeholder MEMO-felter, vil du bemærke, at TDBGrid-komponenten som standard ikke viser indholdet af et MEMO-felt i en DBGrid-celle.
Denne artikel giver en idé om, hvordan man løser dette TMemoFields problem (med et par flere tricks) ...
TMemoField
Notafelter bruges til at repræsentere langvarig tekst eller kombinationer af tekst og tal. Når du bygger databaseapplikationer, der bruger Delphi, bruges TMemoField-objektet til at repræsentere et memo-felt i et datasæt. TMemoField indkapsler den grundlæggende opførsel, der er fælles for felter, der indeholder tekstdata eller vilkårlig længde. I de fleste databaser er størrelsen på Memo-feltet begrænset af databasens størrelse.
Mens du kan vise indholdet af et MEMO-felt i en TDBMemo-komponent, viser TDBGrid kun ved at designe "(Memo)" for indholdet af sådanne felter.
For faktisk at få vist noget tekst (fra MEMO-feltet) i den relevante DBGrid-celle, skal du kun tilføje en simpel kodelinje ...
Til formålet med den næste diskussion, lad os sige, at du har en databasetabel med navnet "TestTable" med mindst et MEMO-felt med navnet "Data".
OnGetText
For at vise indholdet af et MEMO-felt i DBGrid skal du vedhæfte en simpel kodelinie i feltets OnGetText begivenhed. Den nemmeste måde at oprette OnGetText-begivenhedshåndtereren er at bruge Fields-editoren på designtidspunktet til at oprette en vedvarende feltkomponent til memo-feltet:
- Tilslut din TDataset-efterkommerkomponent (TTable, TQuery, TADOTable, TADOQuery ...) til "TestTable" databasetabellen.
- Dobbeltklik på datasættets komponent for at åbne Fields-editoren
- Føj MEMO-feltet til listen over vedvarende felter
- Vælg MEMO-feltet i Fields-editoren
- Aktivér fanen Begivenheder i objektinspektøren
- Dobbeltklik på begivenheden OnGetText for at oprette begivenhedshåndtereren
Tilføj den næste kodelinje (kursiveret nedenfor):
procedure TForm1.DBTableDataGetText (
Afsender: TField;
var Tekst: String;
DisplayTekst: Boolsk);
begynde
Tekst: = Copy (DBTableData. AsString, 1, 50);
Bemærk: datasætobjektet kaldes "DBTable", MEMO-feltet kaldes "DATA", og derfor kaldes TMemoField, der er tilsluttet MEMO-databasefeltet, som standard "DBTableData". Ved at tildele DBTableData. AsString til Tekst parameter for OnGetText-begivenheden, vi fortæller Delphi at vise ALLE teksten fra MEMO-feltet i en DBGrid-celle.
Du kan også tilpas DisplayWidth af memo-feltet til en mere passende værdi.
Bemærk: Da MEMO-felter kan være ret STORE, er det en god ide at kun vise en del af det. I ovenstående kode vises kun de første 50 tegn.
Redigering på en separat form
Som standard tillader TDBGrid ikke redigering af MEMO-felter. Hvis du vil aktivere "på plads" redigering, kan du tilføje en kode til at reagere på en brugerhandling, der viser et separat vindue, der tillader redigering ved hjælp af en TMemo-komponent.
For enkelhedens skyld åbner vi et redigeringsvindue, når der trykkes på ENTER "på" et MEMO-felt i et DBGrid.
Lad os bruge KeyDown begivenhed af en DBGrid-komponent:
procedure TForm1.DBGrid1KeyDown (
Afsender: TObject;
var Nøgle: Word;
Skift: TShiftState);
begynde
hvis nøgle = VK_RETURN derefter
begynde
hvis DBGrid1.SelectedField = DBTableData derefter
med TMemoEditorForm. Opret (nul) gør
prøve
DBMemoEditor. Tekst: = DBTableData. AsString;
ShowModal;
DBTable. Redigere;
DBTableData. AsString: = DBMemoEditor. Tekst;
endelig
Gratis;
ende;
ende;
ende;
Bemærk 1: "TMemoEditorForm" er en sekundær form, der kun indeholder en komponent: "DBMemoEditor" (TMemo).
Bemærk 2: "TMemoEditorForm" blev fjernet fra listen "Auto-create forms" i dialogboksen Project Options.
Lad os se, hvad der sker i DBGrid1s KeyDown-begivenhedshåndterer:
- Når en bruger trykker på ENTER-tasten (sammenligner vi nøgleparameteren med VK_RETURN virtuel nøglekode) [Key = VK_RETURN],
- Hvis det aktuelt valgte felt i DBGrid er vores MEMO-felt (DBGrid1.SelectedField = DBTableData),
- Vi opretter TMemoEditorForm [TMemoEditorForm. Opret (nul)],
- Send værdien af MEMO-feltet til TMemo-komponenten [DBMemoEditor. Tekst: = DBTableData. AsString],
- Vis formularen modalt [ShowModal],
- Når en bruger slutter med redigering og lukker formularen, er vi nødt til at sætte datastikken i redigeringsfunktionen [DBTable. Redigere],
- For at kunne tildele den redigerede værdi tilbage til vores MEMO-felt [DBTableData. AsString: = DBMemoEditor. Tekst].
Bemærk: Hvis du leder efter flere TDBGrid-relaterede artikler og brugstips, skal du huske at besøge: "TDBGrid til MAX"tipsamling.