在 ADO.NET 數(shù)據(jù)集中瀏覽多個(gè)相關(guān)表(4)
2024-07-10 13:02:55
供稿:網(wǎng)友
顯示相關(guān)記錄
現(xiàn)在您已經(jīng)有了選定客戶的相關(guān)記錄(存儲在數(shù)據(jù)行數(shù)組中),您可以顯示它們以便與用戶進(jìn)行交互。應(yīng)用程序?qū)⒅鹨辉L問 getchildrows 方法返回的數(shù)據(jù)行數(shù)組中的數(shù)據(jù),并將每個(gè)相關(guān)記錄的“訂單 id”作為單獨(dú)的項(xiàng)添加到列表框中。
注意:雖然此示例將逐一訪問相關(guān)數(shù)據(jù)行數(shù)組中的數(shù)據(jù),但列表框可能已經(jīng)使用屬性窗口,通過 datasource 屬性、datamember 屬性和 valuemember 屬性被綁定到相關(guān)的記錄。
在列表框中顯示相關(guān)記錄
在 solution explorer(解決方案資源管理器)中,右鍵單擊 form1 并從快捷菜單中選擇 view code(查看代碼)。
在前面步驟中創(chuàng)建的組合框的 selectedindexchanged 事件處理程序中,將以下代碼添加到處理程序中已有代碼之下:
' visual basic
' 當(dāng)更改選定客戶時(shí),清除訂單列表。
lborders.items.clear()
rtbdetails.text = ""
' 將每個(gè)相關(guān)訂單的訂單 id 添加到列表框中。
dim drorder as datarow
for each drorder in draorders
lborders.items.add(drorder("orderid"))
next
// c#
// 當(dāng)更改選定客戶時(shí),清除訂單列表。
lborders.items.clear();
rtbdetails.text = "";
// 將每個(gè)相關(guān)訂單的訂單 id 添加到列表框中。
foreach(datarow drorder in draorders)
{
lborders.items.add(drorder["orderid"]);
}
保存項(xiàng)目。
運(yùn)行應(yīng)用程序。
列表框中將顯示訂單列表。在組合框中選擇另一個(gè)客戶,訂單列表將被更新。
關(guān)閉窗體。
在三個(gè)或更多表中瀏覽相關(guān)記錄
瀏覽三個(gè)或更多表與處理兩個(gè)表一樣簡單。要了解如何處理兩個(gè)以上的表,請將訂單明細(xì)表和產(chǎn)品表添加到 dsnorthwind 數(shù)據(jù)集中。在列表框中選定一個(gè)訂單后,該訂單的詳細(xì)信息即顯示在 rtf 文本框中。
為了滿足約束規(guī)則,您需要?jiǎng)h除現(xiàn)有的數(shù)據(jù)關(guān)系,將來再重新創(chuàng)建。
暫時(shí)刪除 dsnorthwind 數(shù)據(jù)集中的 datarelation
在 solution explorer(解決方案資源管理器)中,雙擊 dsnorthwind.xsd 以在 xml designer(xml 設(shè)計(jì)器)中打開它。
選擇現(xiàn)有的 customersorders 關(guān)系并將其刪除。
保存項(xiàng)目。
現(xiàn)在您需要將另外兩個(gè)表添加到現(xiàn)有數(shù)據(jù)集中,并創(chuàng)建新的 datarelation 對象以將所有表連在一起。
將訂單明細(xì)表和產(chǎn)品表添加到 dsnorthwind 數(shù)據(jù)集中
在 solution explorer(解決方案資源管理器)中,右鍵單擊 form1 并從快捷菜單中選擇 view designer(視圖設(shè)計(jì)器)。
將“訂單明細(xì)”表從 server explorer(服務(wù)器資源管理器)中拖到窗體上。組件欄中將顯示一個(gè)新的數(shù)據(jù)適配器。
選擇該新的數(shù)據(jù)適配器并將其 name 屬性設(shè)置為 daorderdetails。
將“產(chǎn)品”表從 server explorer(服務(wù)器資源管理器)中拖到窗體上。組件欄中將顯示一個(gè)新的數(shù)據(jù)適配器。
選擇該新的數(shù)據(jù)適配器并將其 name 屬性設(shè)置為 daproducts。
新表只是被添加到了窗體上,因此每次添加額外的表時(shí),都必須重新生成數(shù)據(jù)集。
重新生成 dsnorthwind 數(shù)據(jù)集
從 data(數(shù)據(jù))菜單中,選擇 generate dataset(生成數(shù)據(jù)集)。
提示:將光標(biāo)移到窗體上即可使用 data(數(shù)據(jù))菜單。
單擊 existing(現(xiàn)有),然后選擇 dsnorthwind 數(shù)據(jù)集。
選擇所有四個(gè)表(客戶表、訂單表、訂單明細(xì)表和產(chǎn)品表)。
清除 add this dataset to the designer(將此數(shù)據(jù)集添加到設(shè)計(jì)器)復(fù)選框,然后單擊 ok(確定)。將生成帶有附加表的數(shù)據(jù)集。
注意:如果出現(xiàn)一個(gè)對話框,其中說明“the file has been modified outside of the source editor. do you want to reload it?”(文件已在源編輯器之外被修改。是否要重新加載?),請單擊 yes(是)。
請記住,生成數(shù)據(jù)集并不能自動(dòng)創(chuàng)建數(shù)據(jù)集中各表之間的關(guān)系。