VB中DataCombo 和 DataList 控件的使...
使用 DataCombo 和 DataList 控件
DataCombo 和 DataList 控件與標(biāo)準(zhǔn)列表框和組合框控件極為相似,但有一些重要的不同之處,這種不同使這兩個(gè)控件在數(shù)據(jù)庫應(yīng)用程序中具有極大的適應(yīng)性和用武之地。這兩個(gè)控件都可以被這些控件所綁定的數(shù)據(jù)庫字段自動(dòng)填充。此外,它們還能有選擇地將一個(gè)選定的字段傳遞給第二個(gè)數(shù)據(jù)控件,從而適合用于創(chuàng)建“查找表”應(yīng)用程序。
可能的用法
1.在一個(gè)關(guān)系數(shù)據(jù)庫中,使用一個(gè)表的數(shù)據(jù)來提供要輸入給第二個(gè)(相關(guān)的)表值。例如,在一個(gè)存貨清單數(shù)據(jù)庫中,供應(yīng)商的名稱存儲在一個(gè)表中,每個(gè)供應(yīng)商都有一個(gè)唯一的標(biāo)識符。另一個(gè)顯示產(chǎn)品的表則使用這些標(biāo)識符來表明是哪個(gè)供應(yīng)商供應(yīng)的該產(chǎn)品。可以使用 DataList 控件來顯示供應(yīng)商的名稱,而(不可見地)將供應(yīng)商的標(biāo)識符提供給產(chǎn)品表。
2.允許用戶通過從一個(gè)下拉列表中選擇一種標(biāo)準(zhǔn)來縮小搜索范圍。例如,一個(gè)銷售報(bào)告的數(shù)據(jù)庫應(yīng)用程序可以使用一個(gè) DataList 控件讓用戶選擇一個(gè)州 (State) 或一個(gè)銷售區(qū)域。一旦作出選擇,則該選擇項(xiàng)將自動(dòng)傳遞給第二個(gè)數(shù)據(jù)控件,這個(gè)控件負(fù)責(zé)查找選定區(qū)域的銷售記錄。
與它們對應(yīng)的內(nèi)在控件一樣,DataList 和 DataCombo 控件之間的主要不同在于 DataCombo 控件提供了一個(gè)可以在其中編輯內(nèi)容的文本框。
詳細(xì)信息 有關(guān) DataList 和 DataCombo 控件連接數(shù)據(jù)庫表能力的說明,請參閱“使用 DataCombo 和 DataList 控件連接兩個(gè)表”。 要?jiǎng)?chuàng)建一個(gè)簡單的使用鏈接表的數(shù)據(jù)庫應(yīng)用程序,請參閱“創(chuàng)建一個(gè)簡單的 DataCombo 應(yīng)用程序”。
值得注意的控件屬性
DataList 和 DataCombo 控件的一些重要屬性包括:
注意 DataCombo 控件的 DataFormat 屬性是一個(gè) Extender 屬性。因此在屬性表上它總是可見的,并且可以在代碼中設(shè)置。然而,DataCombo 控件僅對其列表中最上端的項(xiàng)格式化。對于看到已格式化的頂端項(xiàng)的最終用戶來說,這一點(diǎn)可能不太重要,只要從未格式化的列表中選擇即可。已格式化的項(xiàng)可能也會(huì)誤導(dǎo)最終用戶,使他們以為項(xiàng)目要在格式化之后再輸入數(shù)據(jù)庫。由于這些原因,建議在使用 DataCombo 控件時(shí)不要設(shè)置 DataFormat 屬性。
詳細(xì)信息 如果要使用一個(gè)演示 BoundText 屬性用法的循序漸進(jìn)教程,請參閱“創(chuàng)建一個(gè)連接 DataList 控件的 DataGrid”。關(guān)于這些控件的屬性和方法的完整列表,請參閱“DataList 控件”和“DataCombo 控件”。
使用 DataCombo 和 DataList 控件連接兩個(gè)表
DataCombo 和 DataList 控件與眾不同的特性是具有訪問兩個(gè)不同的表,并且將第一個(gè)表的數(shù)據(jù)鏈接到第二個(gè)表的某個(gè)字段的能力。這是通過使用兩個(gè)數(shù)據(jù)源完成的(諸如 ADO Data 控件或Data環(huán)境)。
關(guān)系表和“不友好的”值
在一個(gè)關(guān)系數(shù)據(jù)庫中,對于重復(fù)使用的信息并不是在多個(gè)地方都保存其全部的信息。大多數(shù)這種信息都保存在由多個(gè)字段組成的一個(gè)記錄集中;在這些字段中有一個(gè)“標(biāo)識符”字段來唯一地標(biāo)識這個(gè)記錄集。例如,VisualBasic 提供的 Biblio 數(shù)據(jù)庫在一個(gè)名為 "Publishers" 的表中存儲了若干個(gè)出版公司的名稱。這個(gè)表包括很多字段,諸如地址、城市、郵政編碼以及電話號碼等。但是為了簡單起見,只考慮這個(gè)表的兩個(gè)本質(zhì)字段 Name 和PubID 字段。Name 字段存儲一個(gè)出版商的名稱,而 PubID 字段則存儲一個(gè)相對“不友好的”值,如一個(gè)數(shù)或代碼。但這個(gè)不友好的值是很重要的,因?yàn)檫@個(gè)值唯一地標(biāo)識該出版商,并且可以作為一種鏈接整個(gè)記錄集的手段。此外,這個(gè)值會(huì)存儲在第二個(gè)表中的多個(gè)記錄集中。
第二個(gè)表的名稱為 "Titles",其每個(gè)記錄集包含的信息包括標(biāo)題、出版年份、國際標(biāo)準(zhǔn)書號 ISBN 等。在這些字段中有一個(gè)字段的名稱就是 "PubID"。這個(gè)字段的名稱與 Publishers 表中的相應(yīng)字段的名稱相同,因?yàn)檫@個(gè)字段存儲了將該標(biāo)題和一個(gè)特定的出版商鏈接在一起的值。
這種可行方案提出了一個(gè)小問題:給定一個(gè)允許用戶插入新標(biāo)題的數(shù)據(jù)庫應(yīng)用程序,用戶必須用某種方法輸入標(biāo)識出版商的整數(shù)。如果用戶能記住每個(gè)出版商的唯一標(biāo)識符,那么也還是可行的,不過如果一方面用戶能看到出版商的名稱,另一方面存入應(yīng)用程序的又是數(shù)據(jù)庫中相應(yīng)的值,則會(huì)顯得更加方便。而 DataList 和 DataCombo 控件就可以輕松地解決這個(gè)問題。
兩個(gè)數(shù)據(jù)源、三個(gè)字段、無編碼
DataList 和 DataCombo 控件使用兩個(gè)數(shù)據(jù)源來解決這個(gè)問題。在只顯示出版商的名稱(來自 Publishers 表)的同時(shí),DataList 或 DataCombo 控件只將 PubID 字段的值寫入到 Titles 表。通過“屬性”窗口,將 RowSource設(shè)置為提供要寫入的數(shù)據(jù)的數(shù)據(jù)源(即 Publishers 表)。然后將 DataSource屬性設(shè)置為要寫入數(shù)據(jù)的數(shù)據(jù)源(即 Titles 表)。最后,設(shè)置 DataField、ListField以及 BoundColumn 屬性。下圖演示了如何將兩個(gè)數(shù)據(jù)源(以兩個(gè)Data 控件的形式)以及三個(gè)字段指定給一個(gè) DataCombo 控件:
簡要而言,ListField 屬性決定該控件所顯示的是哪一個(gè)字段。在本例中就是出版商的名稱。另一方面,BoundColumn 屬性則決定 Publishers 表中由哪一個(gè)字段向 Title 表供應(yīng)實(shí)際所需的值。注意 Publishers 表中的 PubID字段不能(也不應(yīng)該)被編輯。相反,在 PubID 字段中的值將寫入到由DataField 屬性所指定的字段。在本例中,這個(gè)屬性就是 Titles 表中的 PubID字段。
下表概要地介紹這些屬性及其使用方法。
注意 DataList 和 DataCombo 控件也可以與單個(gè)數(shù)據(jù)控件一起使用。要實(shí)現(xiàn)這一點(diǎn),可以將 DataSource 和 RowSource 屬性設(shè)置為同一個(gè)數(shù)據(jù)控件,并且將 DataField 和 BoundColumn 屬性設(shè)置為該數(shù)據(jù)控件的記錄集中的同一個(gè)字段。在這種情形下,將使用 ListField 的值來填充該列表,且這些值來自于被更新的同一個(gè)記錄集。如果指定了一個(gè) ListField 屬性,但沒有設(shè)置 BoundColumn 屬性,則 BoundColumn將自動(dòng)被設(shè)置為 ListField 字段。
詳細(xì)信息 如果想使用 DataCombo 控件循序漸進(jìn)地創(chuàng)建一個(gè)簡單的數(shù)據(jù)庫應(yīng)用程序,請參閱“創(chuàng)建一個(gè)簡單的 DataCombo 應(yīng)用程序”。
創(chuàng)建一個(gè)簡單的 DataCombo 應(yīng)用程序
下面的示例使用 DataCombo 控件為 Northwind.mdb 示例數(shù)據(jù)庫的 Titles表創(chuàng)建一個(gè)數(shù)據(jù)輸入界面。這個(gè)輸入界面使用戶可以輸入新的產(chǎn)品,并通過提供一個(gè)包括所有供應(yīng)商名稱的查找表將這些新產(chǎn)品指定到已有的供應(yīng)商。當(dāng)用戶在輸入窗體中要輸入供應(yīng)商字段的值時(shí),他們可以從一個(gè)列表框中選擇一個(gè)供應(yīng)商。當(dāng)他們選定一個(gè)供應(yīng)商后,該供應(yīng)商的 SupplierID 字段值就復(fù)制到 Products 表的 SupplierID 字段。
要使用 DataCombo 控件來創(chuàng)建一個(gè)查找表
1. 給 Northwind 數(shù)據(jù)庫創(chuàng)建一個(gè)OLEDB 數(shù)據(jù)源。如果還沒有創(chuàng)建數(shù)據(jù)源,請按照“創(chuàng)建 Northwind 的OLEDB 數(shù)據(jù)源”中的步驟進(jìn)行。
2. 在Visual Basic 中創(chuàng)建一個(gè)新的標(biāo)準(zhǔn)的 EXE 工程。如果DataGrid、DataCombo或ADO Data控件不在“工具箱”中,則右鍵單擊“工具箱”,然后使用“部件”對話框來添加控件。
3. 添加一個(gè) DataCombo 控件、兩個(gè) ADO Data 控件以及一個(gè) DataGrid 控件到窗體中。4. 在“屬性”窗口中,如下表所示設(shè)置第一個(gè)數(shù)據(jù)控件 (Adodc1) 的屬性。
4. 在“屬性”窗口中,如下表所示設(shè)置第一個(gè)數(shù)據(jù)控件 (Adodc1) 的屬性。
5. 在“屬性”窗口中,如下表所示設(shè)置第二個(gè)數(shù)據(jù)控件 (Adodc2) 的屬性。
6. 在“屬性”窗口中,如下表所示設(shè)置 DataGrid 控件的屬性。
7. 在“屬性”窗口中,如下表所示設(shè)置 DataCombo 控件的屬性。
8. 最后,將下述代碼添加到該窗體的代碼模塊中:
Private Sub Form_Load()
' 在 DataGrid 控件中隱藏 SupplierID 字段,使用戶
' 不會(huì)混淆到底該更改哪一個(gè)值。
grdProducts.Columns("SupplierID").Visible = False
End Sub
9. 運(yùn)行該工程。
可以通過單擊可視的 ADO Data 控件上的箭頭來瀏覽記錄集。如果這樣做,DataCombo 控件將更新和顯示每一個(gè)產(chǎn)品的供應(yīng)商的名稱。如果要編輯SupplierID 字段,則單擊 DataCombo 控件的箭頭來顯示一個(gè)下拉列表,然后再單擊一個(gè)不同的供應(yīng)商,來改變寫入到 SupplierID 字段的值。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點(diǎn)擊舉報(bào)。