Wyświetlanie i edytowanie pól MEMO w TDBGrid firmy Delphi
Paul Bradbury/OJO Images/Getty Images
Jeśli tworzysz aplikacje bazodanowe z tabelami zawierającymi pola MEMO, zauważysz, że domyślnie komponent TDBGrid nie pokazuje zawartości pola MEMO wewnątrz komórki DBGrid.
Ten artykuł zawiera pomysł, jak rozwiązać ten problem TMemoField (z kilkoma dodatkowymi sztuczkami)...
Pole TMemo
Pola notatek służą do przedstawiania długiego tekstu lub kombinacji tekstu i liczb. Podczas budowania aplikacji bazodanowych przy użyciu Delphi, obiekt TMemoField jest używany 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 rozmiar pola Nota jest ograniczony 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ć jakiś tekst (z pola MEMO) w odpowiedniej komórce DBGrid, wystarczy dodać prostą linię 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”.
OnGetText
Aby wyświetlić zawartość pola MEMO w DBGrid należy dołączyć prostą linię kodu w polu OnGetText wydarzenie. Najłatwiejszym sposobem utworzenia procedury obsługi zdarzeń OnGetText jest użycie edytora Fields w czasie projektowania w celu utworzenia trwałego składnika pola dla pola notatki:
- Połącz swój komponent potomny TDataset (TTable, TQuery, TADOTable, TADOQuery ....) z tabelą bazy danych „TestTable”.
- Kliknij dwukrotnie komponent zestawu danych, aby otworzyć edytor pól
- Dodaj pole MEMO do listy pól trwałych
- Wybierz pole MEMO w edytorze pól
- Aktywuj zakładkę Zdarzenia w Inspektorze obiektów
- Kliknij dwukrotnie zdarzenie OnGetText, aby utworzyć procedurę obsługi zdarzenia
Dodaj następny wiersz kodu (zapisany poniżej kursywą):
|_+_|
Uwaga: obiekt zbioru danych nazywa się 'DBTable', pole MEMO nosi nazwę 'DATA' i dlatego domyślnie TMemoField połączone z polem bazy danych MEMO nosi nazwę 'DBTableData'. Przypisując DBTableData.AsString do Tekst parametru zdarzenia OnGetText mówimy Delphi, aby wyświetlał CAŁY tekst z pola MEMO w komórce DBGrid.
Możesz także dostosuj szerokość wyświetlacza pola notatki na bardziej odpowiednią wartość.
Uwaga: ponieważ pola MEMO mogą być dość DUŻE, dobrym pomysłem jest pokazanie tylko ich części. W powyższym kodzie wyświetlanych jest tylko pierwszych 50 znaków.
Edycja na osobnym formularzu
Domyślnie TDBGrid nie pozwala na edycję pól MEMO. Jeśli chcesz umożliwić edycję „w miejscu”, możesz dodać kod, który będzie reagował na akcję użytkownika, wyświetlając osobne okno umożliwiające edycję za pomocą komponentu TMemo.
Dla uproszczenia otworzymy okno edycji po naciśnięciu ENTER 'na' polu MEMO w DBGrid.
Użyjmy Skrót zdarzenie komponentu DBGrid:
Uwaga 1: „TMemoEditorForm” jest formularzem pomocniczym zawierającym tylko jeden składnik: „DBMemoEditor” (TMemo).
Uwaga 2: 'TMemoEditorForm' został usunięty z listy 'Automatycznie twórz formularze' w oknie dialogowym Opcje projektu.
Zobaczmy, co dzieje się w obsłudze zdarzeń KeyDown DBGrid1:
- Gdy użytkownik naciśnie klawisz ENTER (porównujemy parametr Key z VK_RETURN kod klucza wirtualnego ) [Klucz = VK_RETURN],
- Jeśli aktualnie wybranym polem w DBGrid jest nasze pole MEMO (DBGrid1.SelectedField = DBTableData),
- Tworzymy TMemoEditorForm [TMemoEditorForm.Create(nil)],
- Prześlij wartość pola MEMO do komponentu TMemo [DBMemoEditor.Text := DBTableData.AsString],
- Wyświetl formularz modalnie [ShowModal],
- Gdy użytkownik zakończy edycję i zamknie formularz, musimy wprowadzić dataste w tryb Edycji [DBTable.Edit],
- Aby móc przypisać edytowaną wartość z powrotem do naszego pola MEMO [DBTableData.AsString := DBMemoEditor.Text].
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.