位於元件面板 Data Controls 頁,透過 TDataSource 連接 TTable/TQuery,實現資料庫欄位與 UI 控件的雙向繫結。
| 元件 | 核心功能 | 適用欄位類型 |
|---|---|---|
TDBGrid | 格狀顯示/編輯多筆記錄 | 所有非 BLOB |
TDBNavigator | 記錄導航、編輯狀態控制 | 無 (操作資料集) |
TDBText | 唯讀顯示單一欄位 | 字串、數值、日期 |
TDBEdit | 單行編輯單一欄位 | 字串、數值、日期 |
TDBMemo | 多行文字/BLOB 文字編輯 | Memo、BLOB Text |
TDBImage | 圖片/BLOB 圖像顯示編輯 | Graphic、BLOB Image |
TDBListBox | 下拉選單式欄位選擇 | 字串、數值 (設計期 Items) |
TDBComboBox | 編輯框+下拉清單 | 同上 |
TDBLookupListBox | 從關聯表查詢選項 (List) | 外鍵欄位 |
TDBLookupComboBox | 從關聯表查詢選項 (Combo) | 外鍵欄位 |
DataSource:指定 TDataSource 名稱DataField:對應資料集欄位名 (TDBGrid/DBNavigator 除外)ReadOnly:True 唯讀,False 可編輯 (預設)Enabled:受 DataSource.Enabled、DataSet.Active 聯動影響DisplayLabel)、格式 (DisplayFormat/EditFormat)Visible = False 隱藏不需顯示欄位Required = True 強制輸入| 子屬性 | 預設 | 效果 |
|---|---|---|
dgEditing | True | 允許網格內編輯/新增/刪除 |
dgTitles | True | 顯示欄位標題列 |
dgIndicator | True | 左側顯示當前記錄指示箭頭 |
dgRowSelect | False | 整列選取模式 |
dgConfirmDelete | True | 刪除前彈出確認 |
OnDrawDataCell:自繪儲存格 (需 DefaultDrawing = False)OnColEnter/OnColExit:進入/離開欄位觸發驗證OnDblClick:雙擊彈出選單 (如國別選擇)procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
begin
if (Field.DataType = ftFloat) and (Field.AsFloat < 0) then
begin
DBGrid1.Canvas.Font.Color := clRed;
DBGrid1.DefaultDrawDataCell(Rect, Field, State);
end;
end;
| 按鈕 | 動作 | 對應方法 |
|---|---|---|
| First | 移至第一筆 | First |
| Prior | 上一筆 | Prior |
| Next | 下一筆 | Next |
| Last | 最後一筆 | Last |
| Insert | 新增空白記錄 | Insert |
| Delete | 刪除當前記錄 | Delete |
| Edit | 進入編輯模式 | Edit |
| Post | 寫入修改 | Post |
| Cancel | 取消修改 | Cancel |
| Refresh | 重新整理顯示 | Refresh |
VisibleButtons 控制顯示哪些按鈕;ShowHint = True 顯示動態提示;Hints 自訂提示文字。
AutoDisplay = False:不自動載入大量文字/圖片,雙擊才載入,提升游標移動效能CutToClipboard/CopyToClipboard/PasteFromClipboardReadOnly 控制是否允許編輯Items 設計期指定選項Style:csDropDown (預設可輸入)、csDropDownList (僅選不可輸入)TTable,不支援 TQueryListSource:關聯表 DataSourceListField:顯示欄位 (可多欄 Field1;Field2)KeyField:關聯鍵值欄位DataField:主表外鍵欄位規則:多個 DataSource 共用單一 DataSet。
{ Form2 建立時 }
DataSource2.DataSet := Form1.Table1; // 共用 Form1 的 Table1
{ 兩個表單的 DBGrid/DBEdit 綁定各自 DataSource 即可同步 }
範例專案:C:\Delphi\Demos\DB\TwoForms