數據網格是非常流行的數據輸入和顯示形式,像大家熟悉的Excel97、VFP中的功能強大的BROWS等,為廣大程序員樂於采用。在用Delphi開發數據庫應用系統時,利用數據網格DBGrid輸入數據時,有些字段只允許某幾個固定的字符串,像檔案案卷的保管期限,只有“永久”、“長期”和“短期”三種,可否從一個下拉列表中進行選擇,從而方便輸入和避免輸入錯誤呢?還有一些字段,例如職工信息庫中的單位編號(在另外的單位庫中保存著單位的詳細信息),在輸入和顯示職工數據時,能否不對單位編號進行操作,而代之於更加直觀的單位庫中的單位名稱呢?答案是肯定的,Delphi的數據網格控件DBGrid,支持下拉列表和查找字段的編程,而且,編程的過程都是可視化的,不需要寫一行語句。
一、DBGrid中的下拉列表
在DBGrid網格中實現下拉列表,設置好DBGrid中該字段的PickList字符串列表、初始的序號值DropDownRows即可。以職工信息庫中的籍貫字段(字符串類型)為例,具體設計步驟如下:
1、在窗體上放置Table1、DataSource1、DBGrid1、DBNavigator1等控件對象,按下表設置各個對象的屬性:
對象
屬性
設定值
Table1
DataBase
sy1
TableName
zgk.dbf
//職工信息庫
DataSource1
DataSet
Table1
DbGrid1
DataSource
DataSource1
DBNavigator1
DataSource
Datasource1
2、雙擊Table1
在彈出的Form1.Table1窗口中,用右鍵彈出快捷菜單,單擊AddFields菜單項;選擇所有的字段後,按OK按鈕。
3、修改第2步新增字段的DisplayLabel屬性。以Table1ZGBH字段為例,在ObjectInspector窗口中選擇Table1ZGBH
修改屬性DisplayLabel=職工編號,其余字段類似。
4、雙擊DBGrid1
在彈出的Editing DBGrid1.Columns窗口中,單擊AddallFields按鈕,增加Table1的所有字段。
5、在EditingDBGrid1.Columns窗口,選擇jg這一行,切換到ObjectInspector窗口,修改它的PickList.Strings為“湖北枝江市、北京市、河南平頂山市、浙江德清市”
6、在Form1.Oncreate事件中寫 入語句:
Table1.Open;
7、F9運行,用鼠標點擊某個記錄的籍貫字段,右邊即出現一個按鈕,點擊這個按鈕,可出現一個下拉列表,包含第5步中輸入的四行字符串,可用鼠標進行選擇。當然也可以自行輸入一個並不屬下拉列表中的字符串。
二、DBGrid中的查找字段
所謂查找字段(LookUpField),即DBGrid 中的某個關鍵字段的數值來源於另外一個數據庫的相應字段。運用查找字段技術,不僅可以有效的避免輸入錯誤,而且DBGrid的顯示方式更為靈活,可以不顯示關鍵字段,而顯示源數據庫中相對應的另外一個字段的數據。
例如,我們在DBGrid中顯示和編輯職工信息,包括職工編號、職工姓名、籍貫、所在單位編號,而單位編號來源於另一個數據庫表格——單位庫,稱“單位編號”為關鍵字段。如果我們直接顯示和編輯單位編號的話,將會面對1、2、3等非常不直觀的數字,編輯時極易出錯。但是如果顯示和編輯的是單位庫中對應的單位名稱話,將非常直觀。這就是DBGrid的所支持的查找字段帶來的好處。
實現DBGrid的查找字段同樣不需要任何語句,具體設計步驟如下:
1、在窗體上放置Table1、Table2、DataSource1、DBGrid1、DBNavigator1等控件對象,按下表設置各個對象的屬性:
對象
屬性
設定值
Table1
DataBase
sy1
TableName
zgk.dbf
//職工信息庫
Table2
DataBase
sy1
TablenAME
dwk.dbf
//單位信息庫
DataSource1
DataSet
Table1
DbGrid1
DataSource
DataSource1
DBNavigator1
DataSource
Datasource1
2、雙擊Table1
在彈出的Form1.Table1窗口中,用右鍵彈出快捷菜單,單擊AddFields菜單項;選擇所有的字段後,按OK按鈕。
3、修改第2步新增字段的DisplayLabel屬性。以Table1ZGBH字段為例,在ObjectInspector窗口中選擇Table1ZGBH
修改屬性DisplayLabel=職工編號,其余字段類似。
4、設置Table1DWBH.Visible=False。
5、在Form1.Table1窗口,用右鍵彈出快捷菜單,單擊NewField菜單項,新增一個查找字段DWMC,在彈出的窗口設置相應的屬性
按OK按鈕確認;在ObjectInspector窗口,設置Table1DWMC.DisplayLabel=
單位名稱。
6、在Form1.Oncreate事件中寫 入語句:
Table1.Open;
7、按F9運行,當光標移至某個記錄的單位名稱字段時,用鼠標點擊該字段,即出現一個下拉列表,點擊右邊的下箭頭,可在下拉列表中進行選擇。在這裡可以看出,下拉列表的內容來自於單位信息庫,並且不能輸入其他內容。
三、DBGrid中的下拉列表和查找字段的區別
雖然DBGrid中的下拉列表和查找字段,都是以下拉列表的形式出現的,但兩者有很大的差別。
1、用PickList屬性設置的下拉列表,它的數據是手工輸入的,雖然也可以在程序中修改,但動態特性顯然不如直接由另外數據庫表格提取數據的查找字段。
2、用PickList屬性設置的下拉列表,允許輸入不屬於下拉列表中的數據,但查找字段中只能輸入源數據庫中關鍵字段中的數據,這樣更能保證數據的完整性。
3、用PickList屬性設置的下拉列表設計較為簡單。