MEMO väljade kuvamine ja redigeerimine Delphi TDBGridis

Kui arendate andmebaasirakendusi MEMO väljadega tabelitega, märkate, et vaikimisi ei näita TDBGrid komponent DBGrid lahtris MEMO välja sisu.

See artikkel annab idee, kuidas seda TMemoFieldi küsimust lahendada (koos veel mõne nipiga) ...

TMemoField

Märkmevälju kasutatakse pika teksti või teksti ja numbrikombinatsioonide tähistamiseks. Andmebaasirakenduste ehitamisel Delphi abil kasutatakse TMemoFieldi objekti andmekogu andme memovälja esitamiseks. TMemoField kapseldab põhimõttelise käitumise, mis on tavaline tekstiandmeid või suvalist pikkust sisaldavatele väljadele. Enamikus andmebaasides on Memo välja suurus piiratud andmebaasi suurusega.

Ehkki saate TDBMemo komponendis kuvada MEMO välja sisu, kuvab TDBGrid selliste väljade sisu jaoks ainult "(memo)".

Mõne teksti (väljalt MEMO) kuvamiseks vastavas DBGrid-lahtris peate lisama ainult lihtsa koodirida ...

Järgmise arutelu jaoks oletame, et teil on andmebaasi tabel nimega "TestTable", millel on vähemalt üks MEMO väli nimega "Data".

OnGetText

instagram viewer

MEMO välja sisu kuvamiseks DBGridis peate väljale lisama lihtsa koodirea OnGetText sündmus. Lihtsaim viis OnGetText sündmuste käitleja loomiseks on kasutada väljade redaktorit projekteerimise ajal, et luua memoväljale püsiv väljakomponent:

  1. Ühendage oma TDataset järeltulijakomponent (TTable, TQuery, TADOTable, TADOQuery ...) andmebaasi tabeliga "TestTable".
  2. Väljade redaktori avamiseks topeltklõpsake andmestiku komponenti
  3. Lisage MEMO väli püsivate väljade loendisse
  4. Valige väljade redaktoris väli MEMO
  5. Aktiveerige Objektiinspektoris vahekaart Sündmused
  6. Sündmuse käitleja loomiseks topeltklõpsake sündmusel OnGetText

Lisage järgmine koodirida (allpool kaldkirjas):

protseduur TForm1.DBTableDataGetText (
Saatja: TField;
var tekst: keelpill;
DisplayText: Boolean);
alustada
Tekst: = Kopeeri (DBTableData. AsString, 1, 50);

Märkus: andmestiku objekti nimetatakse "DBTable", välja MEMO nimetatakse "DATA" ja seetõttu nimetatakse vaikimisi MEMO andmebaasi väljaga ühendatud TMemoFieldi "DBTableData". Määramisega DBTableData. AsString juurde Tekst OnGetText sündmuse parameetri korral käsime Delphil kuvada kogu tekst väljalt MEMO DBGrid-lahtris.
Sa saad ka kohandage kuvari laiust meeldetuletusvälja sobivama väärtuseni.

Märkus: kuna MEMO väljad võivad olla üsna suured, on hea mõte näidata ainult osa neist. Ülaltoodud koodis kuvatakse ainult esimesed 50 tähemärki.

Redigeerimine eraldi vormil

Vaikimisi ei luba TDBGrid MEMO väljade redigeerimist. Kui soovite redigeerimise "paigas" lubada, võite lisada mõne koodi, et reageerida kasutaja toimingutele, mis näitavad eraldi akent, mis võimaldab redigeerimist TMemo komponendi abil.
Lihtsuse huvides avame redigeerimise akna, kui ENTER vajutatakse DBGridis MEMO väljal "sisse".
Kasutagem KeyDown komponendi DBGrid sündmus:

protseduur TForm1.DBGrid1KeyDown (
Saatja: TObject;
var võti: sõna;
Shift: TShiftState);
alustada
kui võti = VK_RETURN, siis
alustada
kui DBGrid1.SelectedField = DBTableData, siis
koos TMemoEditorForm-iga. Loo (null) tee
proovida
DBMemoEditor. Tekst: = DBTableData. AsString;
ShowModal;
DBTable. Redigeeri;
DBTableData. AsString: = DBMemoEditor. Tekst;
lõpuks
Tasuta;
lõpp;
lõpp;
lõpp;

Märkus 1: "TMemoEditorForm" on teisene vorm, mis sisaldab ainult ühte komponenti: "DBMemoEditor" (TMemo).
Märkus 2: "TMemoEditorForm" eemaldati dialoogi aknas Projekti suvandid loendist "Vormide automaatne loomine".

Vaatame, mis juhtub DBGrid1 KeyDown'i sündmuste käitlejas:

  1. Kui kasutaja vajutab nuppu ENTER (võrdleme võtmeparameetrit VK_RETURN-iga) virtuaalse võtme kood) [Võti = VK_RETURN],
  2. Kui DBGridis praegu valitud väli on meie MEMO väli (DBGrid1.SelectedField = DBTableData),
  3. Loome TMemoEditorForm [TMemoEditorForm. Loo (null)],
  4. Saatke välja MEMO väärtus TMemo komponendile [DBMemoEditor. Tekst: = DBTableData. AsString],
  5. Kuva vorm modaalselt [ShowModal],
  6. Kui kasutaja on redigeerimise lõpetanud ja vormi sulgeb, peame panema andmestiku redigeerimisrežiimi [DBTable. Redigeeri],
  7. Et saaksime redigeeritud väärtuse tagasi meie väljale MEMO määrata [DBTableData. AsString: = DBMemoEditor. Tekst].

Märkus. Kui otsite rohkem TDBGridiga seotud artikleid ja nõuandeid, külastage kindlasti järgmist: "TDBGrid MAX-i"näpunäidete kogumine.

instagram story viewer