第18章資料感知組件
一、TDBText組件
用來以唯讀、一次一條記錄的方式,顯示DataSet中的某一欄位值。因同樣繼承自TCustomLabel,TDBText組件除了資料感知功能外,與標準組件TLabel幾乎一模一樣。
DataField:設定或取得對應到資料來源的欄位名稱。
DataSource:設定或取得TDBText元件連線到哪一個DataSet的資料來源。
二、TDBEdit組件
與TDBText類似,用來顯示單一記錄的單一欄位;不同的是,只要資料庫允許,它可編輯修改對應的欄位。繼承自TCustomMaskEdit,與TEdit、TMaskEdit有很多共性。
DataField和DataSource:同上。
Field:設定或取得欄位值。
ReadOnly:True可避免資料來源的資料被改變。設為False並不保證資料可被更改,資料來源允許更改時,如TQuery的RequestLive設為True,同時ReadOnly設為False,資料來源的對應欄位值才能被改變。
Clear方法:清除組件內容。同樣的,被清除的內容是否儲存回資料來源,必須由資料來源允許寫入與目前DataSet的狀態決定。
三、TDBMemo組件
與TMemo同繼承自TCustomMemo,因此,除了資料感知功能外,與標準TMemo也幾乎一樣。TDBMemo主要用來顯示、串連較長的文字欄位。
AutoDisplay:用來設定或取得是否自動顯示欄位資料。設為False時,僅顯示欄位名稱,雙擊才顯示欄位資料。Delphi7中未發現設為False起作用。
LoadMemo方法:用來調入TDBMemo的內容。
四、TDBImage組件
用來顯示或提供修改資料來源的大型二進位欄位資料(BLOB),與TDBMemo類似,除非真的有此需求,否則,應避免使用這樣的組件,因它比較耗用系統資源。
五、TDBListBox組件
用來顯示或提供列表讓使用者可以通過列表選擇輸入資料。當DataSet允許修改時,改變清單項目會直接更新DataSet中的欄位值。
Items屬性。
六、TDBComboBox組件
用來顯示或提供下拉式菜單,讓使用者可通過下拉式菜單選擇輸入資料。當DataSet允許修改時,改變清單項目會直接更新DataSet中的欄位值。
Items屬性。
AutoComplete:當使用者於TDBComboBox文本列表輸入文字時,會從Items中找出符合的項目,並自動完成未輸入的文字。
AutoDropDown:當使用者以鍵盤開始輸入時,會自動下拉式功能表。
Style:決定TDBComboBox的外觀與行為。其值如下:
Ø
csDropDown:可接受使用者輸入文字,且各項高度相同。
Ø
csDropDownList:與csDropDown相同,但無文本輸入列表。
Ø
csOwnerDrowFixed:無文本輸入列表,項目高度由ItemHeight決定。
Ø
csOwnerDrawVariable:無文本輸入列表,允許各項目不同高度。
Ø
csSimple:沒有下拉式表徵圖(倒三角形),但允許輸入文字。
OnMeasureItem:在一個csOwnerDrawVariable狀態的TDBComboBox的下拉式菜單,需再次重畫顯示時觸發。
七、TDBLookupList與TDBLookupComboBox組件
TDBLookupList用來即時顯示另一個DataSet的相對應欄位值。舉例說明下:資料庫中的兩個表:
對圖1:左側是TDBGrid控制項,顯示的是表1的資料;右側是TDBLookupList控制項。要想達到這個目的:在TDBGrid中選擇任意一項時,TDBLookupList中顯示TDBGrid選中行對應的學號所關聯的姓名欄位。反之也成立。
DataField和DataSource:DataSource用來指定跟隨哪一個DataSource變動。上例中,DataSource應與TDBGrid的DataSource相同。
KeyField(關聯欄位):指定ListSource和DataSource的關聯欄位。
ListField(要顯示的關聯欄位):指定ListSource顯示的欄位名稱。ListField通常會設定多個欄位,這也是TDBLookupList控制項的最大特色,同時顯示多個相關欄位,方便使用者輸入。ListField的各欄位名稱間,使用分號隔開。
ListFieldIndex:當ListField設定多個欄位時,ListFieldIndex用來指定其顯示的欄位字串(SelectedItem),對DBLookupList來說,除非明確調用SelectedItem屬性,只要關聯欄位、DataField等設定妥當,ListFieldIndex沒什麼用。
ListSource(關聯資料來源):用來提供顯示欄位的資料來源。
八、TDBNavigator組件
ConfirmDelete:設定刪除操作是否需以對話方塊詢問。
VisibleButtons:VisibleButtons集合類型用來設定TDBNavigator組件各按鈕是否顯示,預設全部顯示。
SetBounds方法:一次設定TDBNavigator組件的Left、Top、Width與Height屬性。
BeforeAction和OnClick事件:OnClick發生在按鈕按下後,其對應的操作已完成。如,按下刪除按鈕,OnClick觸發時,刪除操作早已完成。不同於OnClick,BeforeAction觸發在按鈕對應的操作正要發生時,因此,常用此事件,處理詢問或控制操作是否繼續。
Abort和Exit:在BeforeAction中用Abort可阻止指定操作(比如刪除)執行,Exit無此作用。
九、TDBGrid組件
Columns:此屬性對應到TDBGrid由DataSource取得的欄位資料。它是TColumn的集合。TColumn允許對欄位資料設定顯示名稱、欄位寬度、文字對齊、底色、字型等。
常用屬性:
Options:由一組集合常量設定TDBGrid的外觀及行為。其可能值如下:
Ø
dgEditing:允許編輯。當Options包含dgRowSelect時,dgEditing失效。
Ø
dgAlwaysShowEditor:點選網格立即進入編輯模式,當不設定dgAlwaysShowEditor時,必須按[Enter]或[F2]才能編輯。Options包含dgEditing且不包含dgRowSelect時,此屬性才起作用。
Ø
dgRowSelect:是否允許整列顯示。若允許,則dgEditing和dgAlwaysShowEditor失效。
dgIndicator:是否顯示記錄指標符號。即
Ø 圖中黑三角。
Ø
dgColumnResize:同時控制欄寬能否改變、欄位是否允許移位。
Ø
dgRowLines和dgColLines:垂直/水平的列間是否顯示網格間隔線。
Ø
dgAlwaysShowSelect:即使焦點不在網格,網格仍被選取。
SelectedField:設定或取得目前被選取的網格所在的Field。
SelectedIndex:設定或取得被選取網格的欄位索引值,當整列選取時,返回0。
SelectedRows:用來記錄所有被選取的記錄行。此屬性必須在Options包含dgRowSelect和dgMultiSelect時有效。
常用事件:
OnCellClick:編輯模式不會觸發。
OnDrawColumnCell和OnDrawDataCell:重繪時觸發。OnDrawColumnCell用來取代OnDrawDataCell,所有不要兩個同時設定。