Как отображать и редактировать поля MEMO в TDBGrid Delphi

Если вы разрабатываете приложения базы данных с таблицами, содержащими поля MEMO, вы заметите, что по умолчанию компонент TDBGrid не показывает содержимое поля MEMO внутри ячейки DBGrid.

Эта статья дает представление о том, как решить эту проблему TMemoField (с несколькими дополнительными приемами) ...

TMemoField

Мемо-поля используются для представления длинного текста или комбинации текста и чисел. При создании приложений базы данных с использованием Delphi объект TMemoField используется для представления мемо-поля в наборе данных. TMemoField инкапсулирует фундаментальное поведение, общее для полей, которые содержат текстовые данные или произвольной длины. В большинстве баз данных размер поля Memo ограничен размером базы данных.

В то время как вы можете отображать содержимое поля MEMO в компоненте TDBMemo, в соответствии с проектом TDBGrid будет отображать только «(Memo)» для содержимого таких полей.

Чтобы отобразить некоторый текст (из поля MEMO) в соответствующей ячейке DBGrid, вам нужно всего лишь добавить простую строку кода ...

instagram viewer

Для целей следующего обсуждения предположим, что у вас есть таблица базы данных с именем «TestTable», по крайней мере, с одним полем MEMO с именем «Данные».

OnGetText

Чтобы показать содержимое поля MEMO в DBGrid, вам нужно прикрепить простую строку кода в поле OnGetText событие. Самый простой способ создать обработчик события OnGetText - это использовать редактор полей во время разработки, чтобы создать постоянный компонент поля для поля memo:

  1. Подключите ваш дочерний компонент TDataset (TTable, TQuery, TADOTable, TADOQuery ...) к таблице базы данных «TestTable».
  2. Дважды щелкните компонент набора данных, чтобы открыть редактор полей
  3. Добавьте поле MEMO в список постоянных полей
  4. Выберите поле MEMO в редакторе полей
  5. Активируйте вкладку «События» в Инспекторе объектов.
  6. Дважды щелкните событие OnGetText, чтобы создать обработчик события.

Добавьте следующую строку кода (выделенный курсивом ниже):

процедура TForm1.DBTableDataGetText (
Отправитель: TField;
var Text: String;
DisplayText: Boolean);
начать
Текст: = Копировать (DBTableData. AsString, 1, 50);

Примечание: объект набора данных называется «DBTable», поле MEMO называется «DATA», и, следовательно, по умолчанию TMemoField, подключенный к полю базы данных MEMO, называется «DBTableData». Назначая DBTableData. AsString к Текст Параметр события OnGetText, мы сообщаем Delphi отображать ВСЕ текст из поля MEMO в ячейке DBGrid.
Вы также можете адаптировать DisplayWidth из мемо-поля к более подходящему значению.

Примечание: поскольку поля MEMO могут быть довольно БОЛЬШИМИ, рекомендуется показывать только часть из них. В приведенном выше коде отображаются только первые 50 символов.

Редактирование на отдельной форме

По умолчанию TDBGrid не позволяет редактировать поля MEMO. Если вы хотите включить редактирование «на месте», вы можете добавить некоторый код для реагирования на действие пользователя, которое показывает отдельное окно, которое позволяет редактировать с использованием компонента TMemo.
Для простоты мы откроем окно редактирования, когда нажата ENTER «на» поле MEMO в DBGrid.
Давайте использовать KeyDown событие компонента DBGrid:

процедура TForm1.DBGrid1KeyDown (
Отправитель: TObject;
var Key: Word;
Shift: TShiftState);
начать
если ключ = VK_RETURN то
начать
если DBGrid1.SelectedField = DBTableData, то
с TMemoEditorForm. Создать (ноль) сделать
пытаться
DBMemoEditor. Текст: = DBTableData. AsString;
ShowModal;
DBTable. Редактировать;
DBTableData. AsString: = DBMemoEditor. Текст;
наконец
Свободно;
конец;
конец;
конец;

Примечание 1: «TMemoEditorForm» является вторичной формой, содержащей только один компонент: «DBMemoEditor» (TMemo).
Примечание 2: «TMemoEditorForm» был удален из списка «Автоматическое создание форм» в диалоговом окне «Параметры проекта».

Давайте посмотрим, что происходит в обработчике событий KeyDown DBGrid1:

  1. Когда пользователь нажимает клавишу ENTER (мы сравниваем параметр Key с VK_RETURN код виртуального ключа) [Key = VK_RETURN],
  2. Если текущее выбранное поле в DBGrid является нашим полем MEMO (DBGrid1.SelectedField = DBTableData),
  3. Мы создаем TMemoEditorForm [TMemoEditorForm. Создать (ноль)],
  4. Отправьте значение поля MEMO в компонент TMemo [DBMemoEditor. Текст: = DBTableData. AsString],
  5. Показать форму модально [ShowModal],
  6. Когда пользователь заканчивает редактирование и закрывает форму, нам нужно перевести набор данных в режим редактирования [DBTable. Редактировать],
  7. Чтобы иметь возможность присвоить отредактированное значение обратно нашему полю MEMO [DBTableData. AsString: = DBMemoEditor. Текст].

Примечание: если вы ищете другие статьи и советы по использованию TDBGrid, обязательно посетите: "TDBGrid для МАКСколлекция советов.

instagram story viewer