Delphi 憑藉精妙的 VCL 架構與強大的資料庫開發能力,長期深受開發者喜愛。其中 DBGrid 是最常用的資料感知組件,提供清晰的二維表格檢視。然而,預設情況下,DBGrid 對 MEMO(備註型)欄位 僅顯示 (MEMO) 字樣,無法直接呈現內容,這在實務開發中極不方便。

要在 DBGrid 中顯示 MEMO 實際內容,需對資料集的 MEMO 欄位撰寫 OnGetText 事件處理程序。步驟如下:
TestTable,包含 MEMO 型欄位 Data。Data。procedure TForm1.DBTableDataGetText(Sender: TField;
var Text: String; DisplayText: Boolean);
begin
// 僅顯示前 50 字元,避免格子過大影響版面
Text := Copy(DBTableData.AsString, 1, 50);
end;

注意: MEMO 欄位可儲存大量文字,若完整顯示會撐大 DBGrid,故建議限制顯示長度(如前 50 字元)。
DBGrid 預設不支援直接編輯 MEMO 欄位。解決方法是建立一個包含 DBMemo 組件的獨立視窗,透過鍵盤 Enter 鍵 觸發編輯:
procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
// 按下 Enter 鍵且當前欄位為 MEMO 欄位時觸發
if (Key = VK_RETURN) and (DBGrid1.SelectedField = DBTableData) then
with TMemoEditorForm.Create(nil) do
try
// 將 MEMO 內容載入 DBMemo 顯示
DBMemoEditor.Text := DBTableData.AsString;
ShowModal;
// 使用者確認後寫回資料集
DBTable.Edit;
DBTableData.AsString := DBMemoEditor.Text;
finally
Free;
end;
end;

透過 OnGetText 限制顯示長度 搭配 獨立視窗 + DBMemo 進行完整編輯,即可在 DBGrid 中完美處理 MEMO 欄位。這種「列表概覽 + 詳細編輯分離」的模式,也是專業資料庫應用的常見設計模式。