VisualBasic中DataCombo和DataList控件的使用

字號(hào):

使用 DataCombo 和 DataList 控件
     DataCombo 和 DataList 控件與標(biāo)準(zhǔn)列表框和組合框控件極為相似,但有一些重要的不同之處,這種不同使這兩個(gè)控件在數(shù)據(jù)庫(kù)應(yīng)用程序中具有極大的適應(yīng)性和用武之地。這兩個(gè)控件都可以被這些控件所綁定的數(shù)據(jù)庫(kù)字段自動(dòng)填充。此外,它們還能有選擇地將一個(gè)選定的字段傳遞給第二個(gè)數(shù)據(jù)控件,從而適合用于創(chuàng)建“查找表”應(yīng)用程序。
     可能的用法
     1.在一個(gè)關(guān)系數(shù)據(jù)庫(kù)中,使用一個(gè)表的數(shù)據(jù)來(lái)提供要輸入給第二個(gè)(相關(guān)的)表值。例如,在一個(gè)存貨清單數(shù)據(jù)庫(kù)中,供應(yīng)商的名稱(chēng)存儲(chǔ)在一個(gè)表中,每個(gè)供應(yīng)商都有一個(gè)的標(biāo)識(shí)符。另一個(gè)顯示產(chǎn)品的表則使用這些標(biāo)識(shí)符來(lái)表明是哪個(gè)供應(yīng)商供應(yīng)的該產(chǎn)品。可以使用 DataList 控件來(lái)顯示供應(yīng)商的名稱(chēng),而(不可見(jiàn)地)將供應(yīng)商的標(biāo)識(shí)符提供給產(chǎn)品表。
     2.允許用戶(hù)通過(guò)從一個(gè)下拉列表中選擇一種標(biāo)準(zhǔn)來(lái)縮小搜索范圍。例如,一個(gè)銷(xiāo)售報(bào)告的數(shù)據(jù)庫(kù)應(yīng)用程序可以使用一個(gè) DataList 控件讓用戶(hù)選擇一個(gè)州 (State) 或一個(gè)銷(xiāo)售區(qū)域。一旦作出選擇,則該選擇項(xiàng)將自動(dòng)傳遞給第二個(gè)數(shù)據(jù)控件,這個(gè)控件負(fù)責(zé)查找選定區(qū)域的銷(xiāo)售記錄。
     與它們對(duì)應(yīng)的內(nèi)在控件一樣,DataList 和 DataCombo 控件之間的主要不同在于 DataCombo 控件提供了一個(gè)可以在其中編輯內(nèi)容的文本框。
     詳細(xì)信息 有關(guān) DataList 和 DataCombo 控件連接數(shù)據(jù)庫(kù)表能力的說(shuō)明,請(qǐng)參閱“使用 DataCombo 和 DataList 控件連接兩個(gè)表”。 要?jiǎng)?chuàng)建一個(gè)簡(jiǎn)單的使用鏈接表的數(shù)據(jù)庫(kù)應(yīng)用程序,請(qǐng)參閱“創(chuàng)建一個(gè)簡(jiǎn)單的 DataCombo 應(yīng)用程序”。
     值得注意的控件屬性
     DataList 和 DataCombo 控件的一些重要屬性包括:
     注意 DataCombo 控件的 DataFormat 屬性是一個(gè) Extender 屬性。因此在屬性表上它總是可見(jiàn)的,并且可以在代碼中設(shè)置。然而,DataCombo 控件僅對(duì)其列表中最上端的項(xiàng)格式化。對(duì)于看到已格式化的頂端項(xiàng)的最終用戶(hù)來(lái)說(shuō),這一點(diǎn)可能不太重要,只要從未格式化的列表中選擇即可。已格式化的項(xiàng)可能也會(huì)誤導(dǎo)最終用戶(hù),使他們以為項(xiàng)目要在格式化之后再輸入數(shù)據(jù)庫(kù)。由于這些原因,建議在使用 DataCombo 控件時(shí)不要設(shè)置 DataFormat 屬性。
     詳細(xì)信息 如果要使用一個(gè)演示 BoundText 屬性用法的循序漸進(jìn)教程,請(qǐng)參閱“創(chuàng)建一個(gè)連接 DataList 控件的 DataGrid”。關(guān)于這些控件的屬性和方法的完整列表,請(qǐng)參閱“DataList 控件”和“DataCombo 控件”。
     使用 DataCombo 和 DataList 控件連接兩個(gè)表
     DataCombo 和 DataList 控件與眾不同的特性是具有訪(fǎng)問(wèn)兩個(gè)不同的表,并且將第一個(gè)表的數(shù)據(jù)鏈接到第二個(gè)表的某個(gè)字段的能力。這是通過(guò)使用兩個(gè)數(shù)據(jù)源完成的(諸如 ADO Data 控件或Data環(huán)境)。
     關(guān)系表和“不友好的”值
     在一個(gè)關(guān)系數(shù)據(jù)庫(kù)中,對(duì)于重復(fù)使用的信息并不是在多個(gè)地方都保存其全部的信息。大多數(shù)這種信息都保存在由多個(gè)字段組成的一個(gè)記錄集中;在這些字段中有一個(gè)“標(biāo)識(shí)符”字段來(lái)地標(biāo)識(shí)這個(gè)記錄集。例如,VisualBasic 提供的 Biblio 數(shù)據(jù)庫(kù)在一個(gè)名為 "Publishers" 的表中存儲(chǔ)了若干個(gè)出版公司的名稱(chēng)。這個(gè)表包括很多字段,諸如地址、城市、郵政編碼以及電話(huà)號(hào)碼等。但是為了簡(jiǎn)單起見(jiàn),只考慮這個(gè)表的兩個(gè)本質(zhì)字段 Name 和PubID 字段。Name 字段存儲(chǔ)一個(gè)出版商的名稱(chēng),而 PubID 字段則存儲(chǔ)一個(gè)相對(duì)“不友好的”值,如一個(gè)數(shù)或代碼。但這個(gè)不友好的值是很重要的,因?yàn)檫@個(gè)值地標(biāo)識(shí)該出版商,并且可以作為一種鏈接整個(gè)記錄集的手段。此外,這個(gè)值會(huì)存儲(chǔ)在第二個(gè)表中的多個(gè)記錄集中。
     第二個(gè)表的名稱(chēng)為 "Titles",其每個(gè)記錄集包含的信息包括標(biāo)題、出版年份、國(guó)際標(biāo)準(zhǔn)書(shū)號(hào) ISBN 等。在這些字段中有一個(gè)字段的名稱(chēng)就是 "PubID"。這個(gè)字段的名稱(chēng)與 Publishers 表中的相應(yīng)字段的名稱(chēng)相同,因?yàn)檫@個(gè)字段存儲(chǔ)了將該標(biāo)題和一個(gè)特定的出版商鏈接在一起的值。
     這種可行方案提出了一個(gè)小問(wèn)題:給定一個(gè)允許用戶(hù)插入新標(biāo)題的數(shù)據(jù)庫(kù)應(yīng)用程序,用戶(hù)必須用某種方法輸入標(biāo)識(shí)出版商的整數(shù)。如果用戶(hù)能記住每個(gè)出版商的標(biāo)識(shí)符,那么也還是可行的,不過(guò)如果一方面用戶(hù)能看到出版商的名稱(chēng),另一方面存入應(yīng)用程序的又是數(shù)據(jù)庫(kù)中相應(yīng)的值,則會(huì)顯得更加方便。而 DataList 和 DataCombo 控件就可以輕松地解決這個(gè)問(wèn)題。
     兩個(gè)數(shù)據(jù)源、三個(gè)字段、無(wú)編碼
     DataList 和 DataCombo 控件使用兩個(gè)數(shù)據(jù)源來(lái)解決這個(gè)問(wèn)題。在只顯示出版商的名稱(chēng)(來(lái)自 Publishers 表)的同時(shí),DataList 或 DataCombo 控件只將 PubID 字段的值寫(xiě)入到 Titles 表。通過(guò)“屬性”窗口,將 RowSource設(shè)置為提供要寫(xiě)入的數(shù)據(jù)的數(shù)據(jù)源(即 Publishers 表)。然后將 DataSource屬性設(shè)置為要寫(xiě)入數(shù)據(jù)的數(shù)據(jù)源(即 Titles 表)。最后,設(shè)置 DataField、ListField以及 BoundColumn 屬性。下圖演示了如何將兩個(gè)數(shù)據(jù)源(以?xún)蓚€(gè)Data 控件的形式)以及三個(gè)字段指定給一個(gè) DataCombo 控件:
    簡(jiǎn)要而言,ListField 屬性決定該控件所顯示的是哪一個(gè)字段。在本例中就是出版商的名稱(chēng)。另一方面,BoundColumn 屬性則決定 Publishers 表中由哪一個(gè)字段向 Title 表供應(yīng)實(shí)際所需的值。注意 Publishers 表中的 PubID字段不能(也不應(yīng)該)被編輯。相反,在 PubID 字段中的值將寫(xiě)入到由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 的值來(lái)填充該列表,且這些值來(lái)自于被更新的同一個(gè)記錄集。如果指定了一個(gè) ListField 屬性,但沒(méi)有設(shè)置 BoundColumn 屬性,則 BoundColumn將自動(dòng)被設(shè)置為 ListField 字段。
     詳細(xì)信息 如果想使用 DataCombo 控件循序漸進(jìn)地創(chuàng)建一個(gè)簡(jiǎn)單的數(shù)據(jù)庫(kù)應(yīng)用程序,請(qǐng)參閱“創(chuàng)建一個(gè)簡(jiǎn)單的 DataCombo 應(yīng)用程序”。