使用DataCombo和DataList控件
DataCombo和DataList控制項與標準列錶框和組合框控制項極為相似,但有一些重要的不同之處,這種不同性使這兩個控制項在資料庫應用程式中具有極大的適應性和用武之地。這兩個控制項都可以被這些控制項所綁定的資料庫欄位自動填入。此外,它們還能選擇性地將一個選定的欄位傳遞給第二個資料控件,從而適合用於建立「查找表」應用程式。
可能的用法
1.在一個關聯式資料庫中,使用一個表格的資料來提供要輸入給第二個(相關的)表值。例如,在一個存貨清單資料庫中,供應商的名稱儲存在一個表中,每個供應商都有一個唯一的識別碼。另一個顯示產品的表則使用這些標識符來表示是哪個供應商供應的該產品。可以使用DataList控制項來顯示供應商的名稱,而(不可見地)將供應商的識別碼提供給產品表。
2.允許使用者從一個下拉清單中選擇一種標準來縮小搜尋範圍。例如,一個銷售報表的資料庫應用程式可以使用一個DataList控制項讓使用者選擇一個州(State)或一個銷售區域。一旦做出選擇,則該選擇項將自動傳遞給第二個資料控件,該控件負責查找選定區域的銷售記錄。
與它們對應的內在控制項一樣,DataList和DataCombo控制項之間的主要差異在於DataCombo控制項提供了一個可以在其中編輯內容的文字方塊。
詳細資訊有關DataList和DataCombo控制項連接資料庫表能力的說明,請參閱「使用DataCombo和DataList控制項連接兩個表」。要建立一個簡單的使用連結表的資料庫應用程序,請參閱「建立一個簡單的DataCombo應用程式」。
值得注意的控制項屬性
DataList和DataCombo控制項的一些重要屬性包括:
注意DataCombo控制項的DataFormat屬性是一個Extender屬性。因此在屬性表上它總是可見的,並且可以在程式碼中設定。然而,DataCombo控制項僅對其清單中最上端的項目格式化。對於看到已格式化的頂端項目的最終用戶來說,這一點可能不太重要,只要從未格式化的清單中選擇即可。已格式化的項目可能也會誤導最終用戶,使他們以為項目要在格式化之後再輸入資料庫。由於這些原因,建議在使用DataCombo控制項時不要設定DataFormat屬性。
詳細資訊如果要使用一個示範BoundText屬性用法的循序漸進教學,請參閱「建立一個連接DataList控制項的DataGrid」。關於這些控制項的屬性和方法的完整列表,請參閱「DataList控制項」和「DataCombo控制項」。
使用DataCombo和DataList控制項連接兩個表
DataCombo和DataList控制項與眾不同的特性是具有存取兩個不同的表,並且將第一個表的資料連結到第二個表的某個欄位的能力。這是透過使用兩個資料來源完成的(諸如ADOData控製或Data環境)。
關係表和“不友善”的值
在一個關聯式資料庫中,對於重複使用的資訊並不是在多個地方都保存其全部的資訊。大多數這種資訊都保存在由多個欄位組成的一個記錄集中;在這些欄位中有一個「標識符」欄位來唯一地識別這個記錄集。例如,VisualBasic提供的Biblio資料庫在一個名為Publishers的表中儲存了若干個出版公司的名稱。這個表包括很多字段,諸如地址、城市、郵政編碼以及電話號碼等。但為了簡單起見,只考慮這個表的兩個本質欄位Name和PubID欄位。 Name欄位儲存一個出版商的名稱,而PubID欄位則儲存一個相對「不友善」的值,如一個數或程式碼。但這個不友善的值是很重要的,因為這個值唯一地標識該出版商,並且可以作為一種連結整個記錄集的手段。此外,這個值會儲存在第二個表中的多個記錄集中。
第二個表的名稱為Titles,其每個記錄集包含的資訊包括標題、出版年份、國際標準書號ISBN等。在這些欄位中有一個欄位的名稱就是PubID。這個欄位的名稱與Publishers表中的相應欄位的名稱相同,因為這個欄位儲存了將該標題和一個特定的出版商連結在一起的值。
這個可行方案提出了一個小問題:給定一個允許用戶插入新標題的資料庫應用程序,用戶必須用某種方法輸入標識出版商的整數。如果使用者能記住每個出版商的唯一標識符,那麼也還是可行的,不過如果一方面使用者能看到出版商的名稱,另一方面存入應用程式的又是資料庫中對應的值,則會顯得更加方便。而DataList和DataCombo控制項可以輕鬆解決這個問題。
兩個資料來源、三個欄位、無編碼
DataList和DataCombo控制項使用兩個資料來源來解決這個問題。在只顯示出版商的名稱(來自Publishers表)的同時,DataList或DataCombo控制項只將PubID欄位的值寫入到Titles表。透過「屬性」窗口,將RowSource設定為提供要寫入的資料的資料來源(即Publishers表)。然後將DataSource屬性設定為要寫入資料的資料來源(即Titles表)。最後,設定DataField、ListField以及BoundColumn屬性。下圖示範如何將兩個資料來源(以兩個Data控制項的形式)以及三個欄位指定給一個DataCombo控制項:
簡要而言,ListField屬性決定該控制項所顯示的是哪一個欄位。在本例中就是出版商的名稱。另一方面,BoundColumn屬性則決定Publishers表中由哪一個欄位向Title表供應實際所需的值。注意Publishers表中的PubID欄位不能(也不應該)被編輯。相反,在PubID欄位中的值將寫入到DataField屬性所指定的欄位。在本例中,這個屬性就是Titles表中的PubID欄位。
下表概要地介紹這些屬性及其使用方法。
注意DataList和DataCombo控制項也可以與單一資料控制項一起使用。要實現這一點,可以將DataSource和RowSource屬性設定為同一個資料控件,並且將DataField和BoundColumn屬性設定為該資料控制項的記錄集中的同一個欄位。在這種情況下,將使用ListField的值來填入該列表,且這些值來自於已更新的同一個記錄集。如果指定了一個ListField屬性,但沒有設定BoundColumn屬性,則BoundColumn將自動被設定為ListField欄位。
詳細資訊如果想使用DataCombo控制項循序漸進地建立一個簡單的資料庫應用程序,請參閱「建立一個簡單的DataCombo應用程式」。
->