Jak wyświetlać i edytować pola MEMO w TDBGrid firmy Delphi

Jeśli tworzysz aplikacje bazodanowe z tabelami zawierającymi pola MEMO, zauważysz, że domyślnie składnik TDBGrid nie wyświetla zawartości pola MEMO w komórce DBGrid.

Ten artykuł zawiera pomysł na rozwiązanie tego problemu TMemoField (z kilkoma dodatkami) ...

TMemoField

Pola notatek służą do przedstawiania długiego tekstu lub kombinacji tekstu i liczb. Podczas budowania aplikacji bazodanowych przy użyciu Delphi, obiekt TMemoField służy do reprezentowania pola notatki w zbiorze danych. TMemoField zawiera podstawowe zachowanie wspólne dla pól zawierających dane tekstowe lub dowolną długość. W większości baz danych wielkość pola Nota jest ograniczona rozmiarem bazy danych.

Chociaż możesz wyświetlić zawartość pola MEMO w komponencie TDBMemo, z założenia TDBGrid wyświetli tylko „(Memo)” dla zawartości takich pól.

Aby faktycznie wyświetlić tekst (z pola MEMO) w odpowiedniej komórce DBGrid, wystarczy dodać prosty wiersz kodu ...

Na potrzeby następnej dyskusji załóżmy, że masz tabelę bazy danych o nazwie „TestTable” z co najmniej jednym polem MEMO o nazwie „Dane”.

instagram viewer

OnGetText

Aby wyświetlić zawartość pola MEMO w DBGrid, musisz dołączyć prosty wiersz kodu w polu OnGetText zdarzenie. Najłatwiejszym sposobem utworzenia modułu obsługi zdarzeń OnGetText jest użycie edytora pól w czasie projektowania do utworzenia trwałego komponentu pola dla pola notatki:

  1. Połącz element potomny TDataset (TTable, TQuery, TADOTable, TADOQuery ...) z tabelą bazy danych „TestTable”.
  2. Kliknij dwukrotnie komponent zestawu danych, aby otworzyć edytor pól
  3. Dodaj pole MEMO do listy trwałych pól
  4. Wybierz pole MEMO w edytorze pól
  5. Aktywuj kartę Zdarzenia w Inspektorze obiektów
  6. Kliknij dwukrotnie zdarzenie OnGetText, aby utworzyć moduł obsługi zdarzeń

Dodaj następny wiersz kodu (kursywą poniżej):

Procedura TForm1.DBTableDataGetText (
Nadawca: TField;
var Tekst: ciąg;
DisplayText: Boolean);
zaczynać
Tekst: = Kopiuj (DBTableData. AsString, 1, 50);

Uwaga: obiekt zestawu danych nosi nazwę „DBTable”, pole MEMO nazywa się „DATA”, a zatem domyślnie pole TMemoField podłączone do pola bazy danych MEMO nazywa się „DBTableData”. Przypisując DBTableData. AsString do Tekst parametr zdarzenia OnGetText, mówimy Delphi, aby wyświetlał CAŁY tekst z pola MEMO w komórce DBGrid.
Możesz także dostosuj DisplayWidth pola notatki do bardziej odpowiedniej wartości.

Uwaga: ponieważ pola MEMO mogą być WIELKIE, dobrym pomysłem jest pokazanie tylko ich części. W powyższym kodzie wyświetlane są tylko pierwsze 50 znaków.

Edycja na osobnym formularzu

Domyślnie TDBGrid nie pozwala na edycję pól MEMO. Jeśli chcesz włączyć edycję „na miejscu”, możesz dodać kod, który zareaguje na akcję użytkownika, która pokazuje osobne okno, które umożliwia edycję za pomocą komponentu TMemo.
Dla uproszczenia otworzymy okno edycji po naciśnięciu ENTER na polu MEMO w DBGrid.
Użyjmy KeyDown zdarzenie komponentu DBGrid:

Procedura TForm1.DBGrid1KeyDown (
Nadawca: TObject;
var Klucz: Word;
Shift: TShiftState);
zaczynać
jeśli klucz = VK_RETURN, to
zaczynać
jeśli DBGrid1.SelectedField = DBTableData, to
z TMemoEditorForm. Utwórz (zero) do
próbować
DBMemoEditor. Tekst: = DBTableData. AsString;
ShowModal;
DBTable. Edytować;
DBTableData. AsString: = DBMemoEditor. Tekst;
Wreszcie
Darmowy;
koniec;
koniec;
koniec;

Uwaga 1: „TMemoEditorForm” jest formularzem wtórnym zawierającym tylko jeden składnik: „DBMemoEditor” (TMemo).
Uwaga 2: „TMemoEditorForm” został usunięty z listy „Automatyczne tworzenie formularzy” w oknie dialogowym Opcje projektu.

Zobaczmy, co dzieje się w module obsługi zdarzeń KeyDown DBGrid1:

  1. Gdy użytkownik naciśnie klawisz ENTER (porównujemy parametr Key z VK_RETURN wirtualny kod klucza) [Key = VK_RETURN],
  2. Jeśli aktualnie wybrane pole w DBGrid jest naszym polem MEMO (DBGrid1.SelectedField = DBTableData),
  3. Tworzymy TMemoEditorForm [TMemoEditorForm. Utwórz (zero)],
  4. Wyślij wartość pola MEMO do komponentu TMemo [DBMemoEditor. Tekst: = DBTableData. AsString],
  5. Wyświetl formularz modalnie [ShowModal],
  6. Kiedy użytkownik kończy edycję i zamyka formularz, musimy wprowadzić dataste w tryb edycji [DBTable. Edytować],
  7. Aby móc przypisać edytowaną wartość z powrotem do naszego pola MEMO [DBTableData. AsString: = DBMemoEditor. Tekst].

Uwaga: jeśli szukasz więcej artykułów związanych z TDBGrid i wskazówek dotyczących użytkowania, odwiedź: „TDBGrid do MAXkolekcja wskazówek.