Kuinka näyttää ja muokata MEMO-kenttiä Delphin TDBGridissä

click fraud protection

Jos kehität tietokantasovelluksia, joissa on MEMO-kenttiä sisältäviä taulukoita, huomaat, että TDBGrid-komponentti ei oletuksena näytä MEMO-kentän sisältöä DBGrid-solussa.

Tämä artikkeli tarjoaa idean kuinka ratkaista tämä TMemoField-ongelma (vielä muutamalla temppulla) ...

TMemoField

Huomautuskenttiä käytetään esittämään pitkää tekstiä tai teksti- ja numeroyhdistelmiä. Kun rakennat tietokantasovelluksia Delphiä käyttämällä, TMemoField-objektia käytetään kuvaamaan tietokokoonpanon memo-kenttä. TMemoField kapseloi peruskäyttäytymisen, joka on yhteinen kenttiin, jotka sisältävät tekstitietoja tai mielivaltaisen pituuden. Useimmissa tietokannoissa Memo-kentän kokoa rajoittaa tietokannan koko.

Vaikka voit näyttää MEMO-kentän sisällön TDBMemo-komponentissa, TDBGrid näyttää suunnittelulla vain "(Memo)" kyseisten kenttien sisällöstä.

Jotta voit näyttää jonkin verran tekstiä (MEMO-kentästä) asianmukaisessa DBGrid-solussa, sinun on lisättävä vain yksinkertainen koodirivi ...

Oletetaan seuraavaa keskustelua varten, että sinulla on "TestTable" -niminen tietokantataulukko, jossa on ainakin yksi MEMO-kenttä nimeltä "Data".

instagram viewer

OnGetText

MEMO-kentän sisällön näyttämiseksi DBGridissä sinun on liitettävä yksinkertainen koodirivi kentän OnGetText tapahtuma. Helpoin tapa luoda OnGetText-tapahtumakäsittelijä on käyttää Kenttäeditoria suunnitteluaikana luoda pysyvä kenttäkomponentti muistikenttään:

  1. Kytke TDataset-laskeutuva komponentti (TTable, TQuery, TADOTable, TADOQuery ...) "TestTable" -tietokantataulukkoon.
  2. Kaksoisnapsauta tietojoukkomponenttia avataksesi Kenttäeditori
  3. Lisää MEMO-kenttä pysyvien kenttien luetteloon
  4. Valitse MEMO-kenttä Kenttäeditorissa
  5. Aktivoi Object Inspector -tapahtumat-välilehti
  6. Kaksoisnapsauta OnGetText-tapahtumaa luodaksesi tapahtumakäsittelijän

Lisää seuraava koodirivi (kursivoitu alla):

menettely TForm1.DBTableDataGetText (
Lähettäjä: TField;
var Teksti: merkkijono;
DisplayText: Boolean);
alkaa
Teksti: = Kopioi (DBTableData. AsString, 1, 50);

Huomaa: tietojoukko-objekti on nimeltään "DBTable", MEMO-kenttää kutsutaan "DATA", ja siksi MEMO-tietokantakenttään yhdistetty TMemoField on nimeltään "DBTableData". Antamalla DBTableData. AsString että Teksti OnGetText-tapahtuman parametrina, käsketään Delphiä näyttämään KAIKKI teksti MEMO-kentästä DBGrid-solussa.
Voit myös mukauta DisplayWidth memo-kentästä sopivampaan arvoon.

Huomaa: Koska MEMO-kentät voivat olla melko suuria, on hyvä idea näyttää vain osa niistä. Yllä olevassa koodissa näytetään vain 50 ensimmäistä merkkiä.

Editointi erilliselle lomakkeelle

Oletusarvoisesti TDBGrid ei salli MEMO-kenttien muokkaamista. Jos haluat ottaa "paikallaan" -editoinnin käyttöön, voit lisätä koodin reagoidaksesi käyttäjän toimintoon, joka näyttää erillisen ikkunan, joka mahdollistaa editoinnin TMemo-komponentin avulla.
Yksinkertaisuuden vuoksi avaamme muokkausikkunan, kun ENTER-painiketta painetaan "päällä" MEMO-kenttään DBGridissä.
Käytämme KeyDown tapahtuma DBGrid-komponentista:

menettely TForm1.DBGrid1KeyDown (
Lähettäjä: TObject;
var Avain: Sana;
Vaihto: TShiftState);
alkaa
jos avain = VK_RETURN sitten
alkaa
jos DBGrid1.SelectedField = DBTableData sitten
kanssa TMemoEditorForm. Luo (nolla) tee
yrittää
DBMemoEditor. Teksti: = DBTableData. AsString;
ShowModal;
DBTable. Muokata;
DBTableData. AsString: = DBMemoEditor. Teksti;
vihdoin
Vapaa;
end;
end;
end;

Huomautus 1: "TMemoEditorForm" on toissijainen muoto, joka sisältää vain yhden komponentin: "DBMemoEditor" (TMemo).
Huomautus 2: "TMemoEditorForm" poistettiin Projektiasetukset-valintaikkunan "Luo lomakkeet automaattisesti" -luettelosta.

Katsotaan mitä tapahtuu DBGrid1: n KeyDown-tapahtumakäsittelyohjelmassa:

  1. Kun käyttäjä painaa ENTER-näppäintä (vertaamme avainparametria VK_RETURN: iin virtuaalinen avainkoodi) [Avain = VK_RETURN],
  2. Jos tällä hetkellä valittu kenttä DBGridissä on MEMO-kenttämme (DBGrid1.SelectedField = DBTableData),
  3. Luomme TMemoEditorForm [TMemoEditorForm. Luo (nolla)],
  4. Lähetä MEMO-kentän arvo TMemo-komponentille [DBMemoEditor. Teksti: = DBTableData. AsString]
  5. Näytä lomake modaalisesti [ShowModal],
  6. Kun käyttäjä lopettaa muokkaamisen ja sulkee lomakkeen, meidän on asetettava aineisto muokkaustilaan [DBTable. Muokata],
  7. Jotta muokattu arvo voidaan osoittaa takaisin MEMO-kenttään [DBTableData. AsString: = DBMemoEditor. Teksti].

Huomaa: Jos etsit lisää TDBGrid-aiheisia artikkeleita ja käyttövinkkejä, muista käydä täällä: "TDBGrid MAXiin"vinkkien kokoelma.

instagram story viewer