VisualBasic中DataCombo和DataList控件的使用

字號:

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