數據網格是資料庫應用中最常見的資料輸入與顯示介面,Delphi 的 DBGrid 控件功能強大,支援下拉選單與查找字段編程,且全程可視化操作,無需撰寫任何代碼即可實現。本文將詳細說明如何在 DBGrid 中應用這兩項實用功能,並比較它們的差異。
一、DBGrid 中的下拉選單應用
下拉選單適用於字段值固定的情況,例如職工籍貫、檔案保管期限(永久、長期、短期)等。透過設定 PickList 屬性,使用者可從預設清單中選擇,避免輸入錯誤,同時仍允許自行輸入清單外的值。
實作步驟:
- 佈局控件:在表單放置 Table1、DataSource1、DBGrid1、DBNavigator1,屬性設定如下:
- Table1.Database = sy1,TableName = zgk.dbf(職工信息庫)
- DataSource1.DataSet = Table1
- DBGrid1.DataSource = DataSource1
- DBNavigator1.DataSource = DataSource1
- 建立字段:雙擊 Table1,右鍵選「Add Fields」,全選確定。
- 修改顯示標籤:在 Object Inspector 中逐一修改字段的 DisplayLabel,如 Table1ZGBH 改為「職工編號」。
- 設定 DBGrid 欄位:雙擊 DBGrid1,點擊「Add all Fields」加入所有字段。
- 設定下拉清單:在 Columns 編輯器選擇「jg」(籍貫)字段,切換到 Object Inspector,將 PickList.Strings 設為:
「湖北枝江市、北京市、河南平頂山市、浙江德清市」
- 啟用資料集:在 Form1.OnCreate 事件寫入
Table1.Open;
- 執行測試:按 F9 執行,點擊籍貫欄位右側按鈕即可彈出下拉選單供選擇。
二、DBGrid 中的查找字段應用
查找字段適用於外鍵關聯情境,例如職工表的「單位編號」對應「單位信息庫」的詳細資料。使用查找字段可直接顯示並選擇「單位名稱」,而非枯燥的編號,直觀且能確保資料完整性。
實作步驟:
- 佈局控件:新增 Table2 指向單位庫,屬性設定:
- Table1.Database = sy1,TableName = zgk.dbf
- Table2.Database = sy1,TableName = dwk.dbf
- DataSource1.DataSet = Table1,DBGrid1/DBNavigator1 同前
- 建立主表字段:雙擊 Table1,Add Fields 全選,修改 DisplayLabel。
- 隱藏外鍵欄位:設定 Table1DWBH.Visible = False。
- 新增查找字段:在 Table1 字段編輯器右鍵選「New Field」,建立 Lookup 字段 DWMC,屬性設定:
- KeyFields = DWBH(主表外鍵)
- LookupDataSet = Table2(單位表)
- LookupKeyFields = DWBH(單位表主鍵)
- LookupResultField = DWMC(單位名稱)
- 設定顯示標籤:Table1DWMC.DisplayLabel =「單位名稱」。
- 啟用資料集:Form1.OnCreate 寫入
Table1.Open; Table2.Open;
- 執行測試:運行時點擊單位名稱欄位,下拉清單自動載入單位庫資料,且限制只能選擇清單內容。
三、下拉選單與查找字段的核心差異
| 比較項目 | PickList 下拉選單 | Lookup Field 查找字段 |
| 資料來源 | 手工輸入靜態字串 | 動態關聯另一資料表 |
| 輸入限制 | 允許輸入清單外的值 | 僅能選擇來源表現有值 |
| 資料完整性 | 較弱 | 強(外鍵約束) |
| 維護彈性 | 需修改代碼或屬性 | 資料表異動即時生效 |
| 適用場景 | 固定枚舉值(如性別、狀態) | 主從表關聯(如客戶、產品、部門) |
總結:PickList 適合簡單固定選項,Lookup Field 則是處理主從表關聯的利器,能大幅提升資料輸入的準確性與使用者體驗。兩者皆屬可視化設計,無需撰寫 SQL 或事件代碼,極大降低了開發門檻。