使用TDBGrid
TDBGrid構件以柵格的形式顯示和編輯數據集中的數據它的外觀很大程度上取決於下面三個因素l 一是永久的列對象 二是永久的字段對象 三是數據集構件的ObjectView屬性將影響ADT和數組字段的顯示方式對於TDBGrid構件來說最重要的屬性是Columns這是一個TDBGridColumns對象用於管理一組TColumn對象在設計期可以打開一個編輯器建立永久的列對象然後在對象觀察器中設置列對象的屬性
動態的列對象
如果TDBGridColumns的State屬性設為csDefault列是動態生成的列的屬性取決於字段的屬性當字段的屬性發生變化時列的屬性也跟著變化讓列動態生成的好處是可以在運行期動態地選擇其他數據集而不用擔心柵格是否適合於顯示新的數據集例如可以用同一個TDBGrid構件先顯示一個Paradox表再顯示查詢另一個數據庫的結果在設計期無法直接修改動態列對象的屬性只能修改字段對象的屬性從而間接地修改動態列對象的屬性
動態列對象的生存期也取決於字段對象的生存期如果數據集沒有建立永久的字段對象那麼當數據集關閉時所有的動態列對象也將消失注意如果在運行期把TDBGridColumns的State屬性設為csDefault將刪除所有的列對象然後根據數據集中的字段對象重建列對象
要能夠在設計期自定義柵格就要用到永久的列對象建立了永久的列對象後如果TDBGridColumns的State屬性設為csCustomized就可以獨立設置每一列的屬性例如默認情況下列的標題顯示字段的標簽即DisplayLabel屬性通過修改TColumnTitle的Caption屬性可以重新指定列的標題而TField的DisplayLabel屬性則不會受到影響TDBGridColumns的State屬性設為csCustomized適合於那些數據集的結構是固定不變的情況如果需要在運行期切換不同的數據集就不能把State屬性設為csCustomized要創建永久的列對象首先要在窗體上選擇TDBGrid構件然後對象觀察器中單擊Columns屬性邊上的省略號按鈕將打開編輯器
剛開始的時候這個編輯器是空白的這是因為默認情況下柵格中的列對象都是動態生成的還沒有永久的列對象要基於數據集中的每一個字段分別創建一個永久的列對象可以單擊鼠標右鍵在彈出的菜單中選擇Add All Fields命令要創建一個獨立的永久列對象可以單擊工具欄上的(Add New)按鈕選擇這個剛創建的列對象然後在對象觀察器中設置FieldName屬性指定一個字段設置Caption屬性指定列的標題要刪除一個列對象可以單擊工具欄上的(Delete Selected)按鈕如果把永久的列都刪掉柵格反而能顯示數據集中所有的字段這是因為永久的列刪掉以後Delphi 會自動把TDBGridColumns的State屬性設為csDefault並且動態生成所有的列
要調整列在柵格中顯示的順序可以用鼠標把列對象前移或後移對於永久的列對象來說它的屬性的默認值仍然取自於字段除非您修改了永久列對象的屬性例如默認的情況下列的標題就是字段的DisplayLabel屬性如果修改字段的DisplayLabel屬性列的標題將隨之改變但是一旦您修改了列對象的Caption屬性列的標題不再與字段的DisplayLabel屬性存在聯動關系它們彼此是獨立的
前面講過創建一個永久的列對象時需要設置FieldName屬性指定一個字段不過您也可以讓FieldName屬性為空此時TColumn對象的Field屬性將返回NULL並且該列在柵格中是空白的空白的列往往用於用戶顯示一些自定義的內容如圖像或圖表等幾個列對象的FieldName屬性可以設為同一個字段由此可見TDBGrid的FieldCount屬性可能小於柵格的列數
數據源
TDataSource構件是一個非可視的構件它充當了數據集和數據控件之間的橋梁每一個數據控件都必須指定一個數據源(TDataSource構件)相應地TDataSource構件的DataSet屬性必須指定一個數據集下面簡單介紹一下TDataSource構件的屬性和事件DataSet屬性用於指定一個數據集在設計期可以在對象觀察器中為DataSet屬性選擇一個數據集在運行期可以通過代碼動態地選擇數據集程序示例如下
With CustSource Do
Begin
If DataSet = Customers then
DataSet := Orders
Else
DataSet := Customers;
End;
也可以指定另一個窗體上的數據集構件例如
Procedure TForm FormCreate (Sender : TObject);
Begin
DataSourceDataset := FormTable;
End;
一般情況下TDataSource構件的名稱是無關緊要的不過TDataSource構件的名稱應當能反映它所連接的數據集例如假設TDataSource構件連接的數據集叫Customers相應地TDataSource構件的名稱最好叫CustomersSource
Enabled屬性用於控制TDataSource構件是否與數據集連接設為True表示連接設為False表示暫時斷開連接如果Enabled屬性設為False凡是連接於這個數據源的數據控件將變成空白如果AutoEdit屬性設為True當用戶在數據控件中鍵入字符時數據集就自動進入dsEdit狀態如果AutoEdit屬性設為False程序必須調用Edit函數才能進入dsEdit狀態
當數據集的當前記錄的位置發生變化時將觸發OnDataChange事件這可能是因為程序調用了NextPreviousInsert等方法當前記錄的數據將要被更新時將觸發OnUpdateData事件這可能是因為調用了Post在處理這個事件的句柄中可以對數據進行校驗
From:http://tw.wingwit.com/Article/program/Delphi/201311/8450.html