A MEMO mezők megjelenítése és szerkesztése a Delphi TDBGrid programjában

Ha adatbázis-alkalmazásokat fejleszt MEMO mezőket tartalmazó táblákkal, akkor észreveszi, hogy alapértelmezés szerint a TDBGrid összetevő nem jeleníti meg a MEMO mező tartalmát a DBGrid cellában.

Ez a cikk egy ötletet kínál arra, hogyan lehet megoldani ezt a TMemoField problémát (még néhány trükkövel) ...

TMemoField

Az emlékeztető mezőket a hosszú szöveg vagy a szöveg és a szám kombinációinak ábrázolására használják. Amikor adatbázis-alkalmazásokat épít a Delphi segítségével, a TMemoField objektumot egy emlékeztető mező ábrázolására használják az adatkészletben. A TMemoField beágyazza az alapvető viselkedést a mezőkben, amelyek szöveges adatokat vagy tetszőleges hosszúságot tartalmaznak. A legtöbb adatbázisban a Memo mező méretét az adatbázis mérete korlátozza.

Míg a MEMO mező tartalmát megjelenítheti a TDBMemo összetevőben, a TDBGrid csak a "(Memo)" feliratot jeleníti meg az ilyen mezők tartalmánál.

Annak érdekében, hogy ténylegesen megjelenjen egy szöveg (a MEMO mezőből) a megfelelő DBGrid cellában, akkor csak egy egyszerű sor sort kell hozzáadnia ...

instagram viewer

Tegyük fel, hogy a következő beszélgetéshez van egy "TestTable" nevű adatbázistábla, amelyben legalább egy "Data" elnevezésű MEMO mező található.

OnGetText

A MEMO mező tartalmának a DBGridben történő megjelenítéséhez csatolnia kell egy egyszerű kódsorot a mező OnGetText esemény. Az OnGetText eseménykezelő létrehozásának legegyszerűbb módja a Mezők szerkesztő használata a tervezési időpontban, és egy állandó mezőkomponens létrehozásához az emlékeztető mezőhöz:

  1. Csatlakoztassa a TDataset leszármazott összetevőjét (TTable, TQuery, TADOTable, TADOQuery ...) a "TestTable" adatbázis táblához.
  2. Kattintson duplán az adatkészlet-összetevőre a Mezők szerkesztő megnyitásához
  3. Adja hozzá a MEMO mezőt az állandó mezők listájához
  4. Válassza ki a MEMO mezőt a Mezők szerkesztőben
  5. Aktiválja az Object Inspector események lapját
  6. Kattintson duplán az OnGetText eseményre az eseménykezelő létrehozásához

Adja hozzá a következő sor sort (alább dőlt):

eljárás TForm1.DBTableDataGetText (
Feladó: TField;
var szöveg: karakterlánc;
DisplayText: logikai);
kezdődik
Szöveg: = Másolás (DBTableData. AsString, 1, 50);

Megjegyzés: az adatkészlet objektumát "DBTable" -nek hívják, a MEMO mezőt "DATA" -nak, és ezért alapértelmezés szerint a MEMO adatbázis-mezőhöz csatlakoztatott TMemoField neve "DBTableData". Megrendeléssel DBTableData. AsString hoz Szöveg paraméterét, azt mondjuk Delphinek, hogy az összes szöveget megjelenítse a MEMO mezőből egy DBGrid cellában.
Te is adaptálja a DisplayWidth-t az emlékeztető mező megfelelőbb értékére.

Megjegyzés: Mivel a MEMO mezők elég nagyok lehetnek, érdemes csak egy részét megjeleníteni. A fenti kódban csak az első 50 karakter jelenik meg.

Szerkesztés külön űrlapon

Alapértelmezés szerint a TDBGrid nem engedélyezi a MEMO mezők szerkesztését. Ha engedélyezni szeretné a "helyben" történő szerkesztést, hozzáadhat egy kódot, hogy reagáljon egy felhasználói műveletre, amely külön ablakot mutat, amely lehetővé teszi a szerkesztést a TMemo összetevő segítségével.
Az egyszerűség kedvéért megnyitjuk a szerkesztési ablakot, amikor az ENTER billentyűt megnyomjuk egy MEMO mezőbe egy DBGrid-ben.
Használjuk a KeyDown DBGrid összetevő eseménye:

eljárás TForm1.DBGrid1KeyDown (
Feladó: TObject;
var Kulcs: Szó;
Shift: TShiftState);
kezdődik
ha Key = VK_RETURN, akkor
kezdődik
ha DBGrid1.SelectedField = DBTableData, akkor
a TMemoEditorForm segítségével. Létrehozás (nulla) do
próbáld ki
DBMemoEditor. Szöveg: = DBTableData. AsString;
ShowModal;
DBTable. szerkesztése;
DBTableData. AsString: = DBMemoEditor. Szöveg;
végül
Ingyenes;
végén;
végén;
végén;

1. megjegyzés: A "TMemoEditorForm" egy másodlagos forma, amely csak egy összetevőt tartalmaz: "DBMemoEditor" (TMemo).
2. megjegyzés: A „TMemoEditorForm” el lett távolítva az „Űrlapok automatikus létrehozása” listából a Projektbeállítások párbeszédpanelen.

Lássuk, mi történik a DBGrid1 KeyDown eseménykezelőjével:

  1. Amikor a felhasználó megnyomja az ENTER gombot (összehasonlítjuk a Key paramétert a VK_RETURN értékkel) virtuális kulcs kódja) [Kulcs = VK_RETURN],
  2. Ha a DBGrid jelenleg kiválasztott mezője a MEMO mező (DBGrid1.SelectedField = DBTableData),
  3. Hozzuk létre a TMemoEditorForm [TMemoEditorForm. Létrehozás (nulla)],
  4. Küldje el a MEMO mező értékét a TMemo összetevőnek [DBMemoEditor. Szöveg: = DBTableData. AsString],
  5. Jelenítse meg az űrlapot modálisan [ShowModal],
  6. Amikor a felhasználó befejezi a szerkesztést és bezárja az űrlapot, az adatállományt Szerkesztés módba kell helyeznünk [DBTable. Edit],
  7. Annak érdekében, hogy a szerkesztett értéket vissza lehessen rendelni a MEMO mezőbe [DBTableData. AsString: = DBMemoEditor. Szöveg].

Megjegyzés: Ha további TDBGrid-rel kapcsolatos cikkeket és használati tippeket keres, akkor feltétlenül keresse fel: "TDBGrid a MAX-hoz"tippek gyűjteménye.

instagram story viewer