Hvordan vise og redigere MEMO-felt i Delphis TDBGrid

Hvis du utvikler databaseapplikasjoner med tabeller som inneholder MEMO-felt, vil du merke at TDBGrid-komponenten som standard ikke viser innholdet i et MEMO-felt i en DBGrid-celle.

Denne artikkelen gir en ide om hvordan du løser problemet med TMemoField (med noen flere triks) ...

TMemoField

Notefelt brukes til å representere lang tekst eller kombinasjoner av tekst og tall. Når du bygger databaseapplikasjoner som bruker Delphi, brukes TMemoField-objektet til å representere et memo-felt i et datasett. TMemoField innkapsler den grunnleggende oppførselen som er vanlig for felt som inneholder tekstdata eller vilkårlig lengde. I de fleste databaser er størrelsen på Memo-feltet begrenset av størrelsen på databasen.

Selv om du kan vise innholdet i et MEMO-felt i en TDBMemo-komponent, viser TDBGrid bare "(Memo)" for innholdet i slike felt ved å designe.

For å faktisk vise litt tekst (fra MEMO-feltet) i den aktuelle DBGrid-cellen, trenger du bare å legge til en enkel kodelinje ...

La oss si at du har en databasetabell som heter "TestTable" med minst ett MEMO-felt med navnet "Data" for den neste diskusjonen.

instagram viewer

OnGetText

For å vise innholdet i et MEMO-felt i DBGrid, må du legge ved en enkel kodelinje i feltets OnGetText begivenhet. Den enkleste måten å opprette OnGetText-hendelsesbehandleren er å bruke Fields-redigereren på designtidspunktet for å lage en vedvarende feltkomponent for memo-feltet:

  1. Koble din TDataset-etterkommerkomponent (TTable, TQuery, TADOTable, TADOQuery ...) til databasen "TestTable".
  2. Dobbeltklikk på datasettkomponenten for å åpne Fields-redigereren
  3. Legg til MEMO-feltet i listen over vedvarende felt
  4. Velg MEMO-feltet i Fields-redigereren
  5. Aktiver kategorien Hendelser i objektinspektøren
  6. Dobbeltklikk på OnGetText-hendelsen for å opprette hendelsesbehandleren

Legg til neste kodelinje (kursiv nedenfor):

prosedyre TForm1.DBTableDataGetText (
Avsender: TField;
var Tekst: String;
DisplayText: Boolean);
begynne
Tekst: = Copy (DBTableData. AsString, 1, 50);

Merk: datasettobjektet heter "DBTable", MEMO-feltet kalles "DATA", og derfor kalles TMemoField som er koblet til MEMO-databasefeltet som standard "DBTableData". Ved å tildele DBTableData. AsString til Tekst parameteren for OnGetText-hendelsen, ber vi Delphi om å vise ALLE teksten fra MEMO-feltet i en DBGrid-celle.
Du kan også tilpasse DisplayWidth av notatfeltet til en mer passende verdi.

Merk: Siden MEMO-felt kan være ganske STORE, er det lurt å bare vise en del av det. I koden over vises bare de første 50 tegnene.

Redigering på et eget skjema

Som standard tillater ikke TDBGrid redigering av MEMO-felt. Hvis du vil aktivere "på plass" redigering, kan du legge til en kode for å reagere på en brukerhandling som viser et eget vindu som tillater redigering ved hjelp av en TMemo-komponent.
For enkelhets skyld åpner vi et redigeringsvindu når ENTER trykkes "på" et MEMO-felt i et DBGrid.
La oss bruke KeyDown hendelse av en DBGrid-komponent:

prosedyre TForm1.DBGrid1KeyDown (
Avsender: TObject;
var Nøkkel: Word;
Skift: TShiftState);
begynne
hvis nøkkel = VK_RETURN da
begynne
hvis DBGrid1.SelectedField = DBTableData da
med TMemoEditorForm. Opprett (null) gjør
prøve
DBMemoEditor. Tekst: = DBTableData. AsString;
ShowModal;
DBTable. Redigere;
DBTableData. AsString: = DBMemoEditor. Tekst;
endelig
Gratis;
slutt;
slutt;
slutt;

Merknad 1: "TMemoEditorForm" er en sekundær form som bare inneholder en komponent: "DBMemoEditor" (TMemo).
Merknad 2: "TMemoEditorForm" ble fjernet fra listen "Auto-create forms" i dialogboksen Project Options.

La oss se hva som skjer i DBGrid1s KeyDown-hendelsesbehandler:

  1. Når en bruker trykker på ENTER-tasten (sammenligner vi nøkkelparameteren til VK_RETURN virtuell nøkkelkode) [Nøkkel = VK_RETURN],
  2. Hvis det valgte feltet i DBGrid er vårt MEMO-felt (DBGrid1.SelectedField = DBTableData),
  3. Vi oppretter TMemoEditorForm [TMemoEditorForm. Opprett (null)],
  4. Send verdien av MEMO-feltet til TMemo-komponenten [DBMemoEditor. Tekst: = DBTableData. AsString]
  5. Vis skjemaet modalt [ShowModal],
  6. Når en bruker avslutter med redigering og lukker skjemaet, må vi sette datastoffet i redigeringsmodus [DBTable. Redigere],
  7. For å kunne tilordne den redigerte verdien tilbake til vårt MEMO-felt [DBTableData. AsString: = DBMemoEditor. Tekst].

Merk: Hvis du er ute etter flere TDBGrid-relaterte artikler og brukstips, må du huske å besøke: "TDBGrid til MAX"tipssamling.