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".
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:
- Kytke TDataset-laskeutuva komponentti (TTable, TQuery, TADOTable, TADOQuery ...) "TestTable" -tietokantataulukkoon.
- Kaksoisnapsauta tietojoukkomponenttia avataksesi Kenttäeditori
- Lisää MEMO-kenttä pysyvien kenttien luetteloon
- Valitse MEMO-kenttä Kenttäeditorissa
- Aktivoi Object Inspector -tapahtumat-välilehti
- 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:
- Kun käyttäjä painaa ENTER-näppäintä (vertaamme avainparametria VK_RETURN: iin virtuaalinen avainkoodi) [Avain = VK_RETURN],
- Jos tällä hetkellä valittu kenttä DBGridissä on MEMO-kenttämme (DBGrid1.SelectedField = DBTableData),
- Luomme TMemoEditorForm [TMemoEditorForm. Luo (nolla)],
- Lähetä MEMO-kentän arvo TMemo-komponentille [DBMemoEditor. Teksti: = DBTableData. AsString]
- Näytä lomake modaalisesti [ShowModal],
- Kun käyttäjä lopettaa muokkaamisen ja sulkee lomakkeen, meidän on asetettava aineisto muokkaustilaan [DBTable. Muokata],
- 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.