Kā parādīt un rediģēt MEMO laukus Delphi TDBGrid

Ja jūs izstrādājat datu bāzes lietojumprogrammas ar tabulām, kurās ir MEMO lauki, pamanīsit, ka pēc noklusējuma TDBGrid komponents neuzrāda MEMO lauka saturu DBGrid šūnā.

Šis raksts sniedz ideju, kā atrisināt šo TMemoField problēmu (ar vēl dažiem trikiem) ...

TMemoField

Atgādinājumu laukus izmanto, lai attēlotu garu tekstu vai teksta un numuru kombinācijas. Veidojot datu bāzes lietojumprogrammas, izmantojot Delphi, TMemoField objekts tiek izmantots, lai attēlotu piezīmju lauku datu kopā. TMemoField iekapsulē pamata uzvedību laukiem, kas satur teksta datus vai patvaļīgu garumu. Lielākajā daļā datu bāzu lauka Memo lielumu ierobežo datu bāzes lielums.

Lai gan jūs varat parādīt MEMO lauka saturu TDBMemo komponentā, pēc dizaina TDBGrid šādu lauku saturam parādīs tikai "(Memo)".

Lai faktiski attiecīgajā DBGrid šūnā parādītu kādu tekstu (no lauka MEMO), jums būs jāpievieno tikai vienkārša koda rinda ...

Nākamās diskusijas nolūkos pieņemsim, ka jums ir datu bāzes tabula ar nosaukumu "TestTable" ar vismaz vienu MEMO lauku ar nosaukumu "Data".

instagram viewer

OnGetText

Lai DBGrid parādītu MEMO lauka saturu, lauka laukā jāpievieno vienkārša koda rinda. OnGetText notikums. Vienkāršākais veids, kā izveidot OnGetText notikumu apstrādātāju, ir Lauku redaktora izmantošana projektēšanas laikā, lai noturīgā lauka komponentu izveidotu piezīmju laukam:

  1. Savienojiet savu TDataset pēcnācēju komponentu (TTable, TQuery, TADOTable, TADOQuery ...) datu bāzes tabulā "TestTable".
  2. Veiciet dubultklikšķi uz datu kopas komponenta, lai atvērtu lauku Lauku redaktors
  3. Pievienojiet MEMO lauku pastāvīgo lauku sarakstam
  4. Lauku redaktorā atlasiet lauku MEMO
  5. Objektu inspektorā aktivizējiet cilni Notikumi
  6. Veiciet dubultklikšķi uz OnGetText notikuma, lai izveidotu notikumu apstrādātāju

Pievienojiet nākamo koda rindu (kursīvā zemāk):

procedūra TForm1.DBTableDataGetText (
Sūtītājs: TField;
var teksts: stīga;
DisplayText: Būla);
sākt
Teksts: = Kopēt (DBTableData. AsStrings, 1, 50);

Piezīme: datu kopas objekts tiek saukts par "DBTable", MEMO lauks tiek saukts par "DATA", un tāpēc pēc noklusējuma TMemoField, kas savienots ar MEMO datu bāzes lauku, tiek saukts par "DBTableData". Piešķirot DBTableData. AsString uz Teksts OnGetText notikuma parametru, mēs liekam Delphi parādīt VISU tekstu no lauka MEMO DBGrid šūnā.
Jūs varat arī pielāgojiet displeja platumu no piezīmju lauka līdz piemērotākai vērtībai.

Piezīme: tā kā MEMO lauki var būt diezgan lieli, ir laba ideja parādīt tikai daļu no tiem. Iepriekš minētajā kodā tiek parādītas tikai pirmās 50 rakstzīmes.

Rediģēšana uz atsevišķas veidlapas

Pēc noklusējuma TDBGrid neatļauj rediģēt MEMO laukus. Ja vēlaties iespējot rediģēšanu "savā vietā", jūs varētu pievienot kādu kodu, lai reaģētu uz lietotāja darbībām, kurās tiek parādīts atsevišķs logs, kas ļauj rediģēt, izmantojot TMemo komponentu.
Vienkāršības labad mēs atvērsim rediģēšanas logu, kad taustiņš ENTER būs nospiests "uz" MEMO lauka DBGrid.
Izmantosim KeyDown notikums DBGrid komponentā:

procedūra TForm1.DBGrid1KeyDown (
Sūtītājs: TObject;
var Taustiņš: Vārds;
Shift: TShiftState);
sākt
ja taustiņš = VK_RETURN, tad
sākt
ja DBGrid1.SelectedField = DBTableData, tad
ar TMemoEditorForm. Izveidot (nulle) darīt
mēģiniet
DBMemoEditor. Teksts: = DBTableData. AsString;
ShowModal;
DBTable. Rediģēt;
DBTableData. AsString: = DBMemoEditor. Teksts;
beidzot
Bezmaksas;
beigas;
beigas;
beigas;

1. piezīme. “TMemoEditorForm” ir sekundāra forma, kurā ir tikai viens komponents: “DBMemoEditor” (TMemo).
2. piezīme: “TMemoEditorForm” tika noņemts no saraksta “Automātiski izveidot veidlapas” dialoglodziņā Projekta opcijas.

Redzēsim, kas notiek DBGrid1 KeyDown notikumu apstrādātājā:

  1. Kad lietotājs nospiež taustiņu ENTER (atslēgas parametru mēs salīdzinām ar VK_RETURN) virtuālās atslēgas kods) [Taustiņš = VK_RETURN],
  2. Ja pašreiz atlasītais lauks DBGrid ir mūsu MEMO lauks (DBGrid1.SelectedField = DBTableData),
  3. Mēs izveidojam TMemoEditorForm [TMemoEditorForm. Izveidot (nulle)],
  4. Nosūtiet lauka MEMO vērtību uz TMemo komponentu [DBMemoEditor. Teksts: = DBTableData. AsString],
  5. Parādiet veidlapu modāli [ShowModal],
  6. Kad lietotājs pabeidz rediģēšanu un aizver veidlapu, mums jāievieto datu kopija rediģēšanas režīmā [DBTable. Rediģēt],
  7. Lai rediģēto vērtību varētu piešķirt atpakaļ mūsu MEMO laukam [DBTableData. AsString: = DBMemoEditor. Teksts].

Piezīme: ja jūs meklējat vairāk ar TDBGrid saistītus rakstus un lietošanas padomus, noteikti apmeklējiet: "TDBGrid līdz MAX"padomu kolekcija.

instagram story viewer