在 ADO.NET 資料集中瀏覽多個相關表(5)

來源:互聯網
上載者:User
ado|資料 建立關係
  
  在 Solution Explorer(方案總管)中,雙擊 dsNorthwind.xsd 檔案。檔案將在 XML Designer(XML 設計器)中開啟。
  從工具列的 XML Schema(XML 結構描述)選項卡中,將 Relation(關係)拖到訂單表上。
  在 Edit Relation(編輯關係)對話方塊中,設定以下屬性:
  
  元素 設定
  Name CustomersOrders
  Parent Customers
  Child Orders
  Key Fields CustomerID
  Foreign Key Fields CustomerID
  
  
  單擊 OK(確定)以建立關係並關閉對話方塊。
  從工具列的 XML Schema(XML 結構描述)選項卡中,將 Relation(關係)拖到訂單明細表上。
  在 Edit Relation(編輯關係)對話方塊中,設定以下屬性:
  
  元素 設定
  Name OrdersOrderDetails
  Parent Orders
  Child OrderDetails
  Key Fields OrderID
  Foreign Key Fields OrderID
  
  
  單擊 OK(確定)以建立關係並關閉對話方塊。
  從工具列的 XML Schema(XML 結構描述)選項卡中,將 Relation(關係)拖到訂單明細表上。
  在 Edit Relation(編輯關係)對話方塊中,設定以下屬性:
  
  元素 設定
  Name ProductsOrderDetails
  Parent Products
  Child OrderDetails
  Key Fields ProductID
  Foreign Key Fields ProductID
  
  
  單擊 OK(確定)以建立關係並關閉對話方塊。
  儲存項目。
  訂單明細表和產品表已被添加到資料集中,但是您仍需要添加代碼,以便在運行時用資料來填充它們。
  
  用資料填充表
  
  在 Solution Explorer(方案總管)中,按右鍵 Form1 並從捷徑功能表中選擇 View Code(查看代碼)。
  在 Form1_Load 事件處理常式中,將以下代碼添加到注釋“用資料填充表”與 daOrders.Fill(dsNorthwind1) 行之間:
  
  ' Visual Basic
  daOrderDetails.Fill(dsNorthwind1)
  daProducts.Fill(dsNorthwind1)
  // C#
  daOrderDetails.Fill(dsNorthwind1);
  daProducts.Fill(dsNorthwind1);
  
  
  
  用資料填充 RTF 文字框
  現在您要為項目添加代碼,以便在列表框中選定某個訂單時,可以在 RTF 文字框中顯示所有訂單明細。
  
  以下代碼將基於列表框中的選定訂單調用 GetChildRows 方法。訂單明細表中的所有相關記錄都將分配給名為 draOrderDetails 的資料行數組。每個資料行的內容將顯示在 RTF 文字框中。
  
  注意:請注意嵌套的 For Each 迴圈是如何首先選取一個資料行,然後在該資料行的所有列中迴圈以訪問整個相關記錄的。
  設定 RTF 文字框以顯示所有訂單明細
  
  在 Solution Explorer(方案總管)中,按右鍵 Form1 並從捷徑功能表中選擇 View Designer(視圖設計器)。
  雙擊列表框為列表框 lbOrders 的 SelectedIndexChanged 事件建立事件處理常式。
  添加以下代碼:
  
  ' Visual Basic
  Private Sub lbOrders_SelectedIndexChanged _
  (ByVal sender As System.Object, ByVal e As System.EventArgs) _
  Handles lbOrders.SelectedIndexChanged
  ' 選擇新訂單時,清除 RTF 文字框。
  rtbDetails.Clear()
  ' 聲明一個用來儲存選定的訂單 ID 的整數。
  Dim SelectedOrderID As Integer
  ' 將選定的項目設定為整數。
  SelectedOrderID = CType(lbOrders.SelectedItem, Integer)
  
  ' 聲明一個用來儲存選定訂單的記錄的資料行。
  Dim drSelectedOrder As DataRow
  drSelectedOrder = _
  DsNorthwind1.Orders.FindByOrderID(SelectedOrderID)
  
  ' 聲明一個用來儲存相關記錄的資料行數組。
  Dim draOrderDetails() As DataRow
  draOrderDetails = _
  drSelectedOrder.GetChildRows("OrdersOrderDetails")
  
  Dim details As String = ""
  Dim drDetails As DataRow
  Dim dcDetails As DataColumn
  For Each drDetails In draOrderDetails
  For Each dcDetails In drDetails.Table.Columns
  details &= dcDetails.ColumnName & ": "
  details &= drDetails(dcDetails).ToString()
  details &= ControlChars.CrLf
  Next
  details &= ControlChars.CrLf
  Next
  rtbDetails.Text = details
  End Sub
  
  // C#
  private void lbOrders_SelectedIndexChanged
  (object sender, System.EventArgs e)
  {
  // 選擇新訂單時,清除 RTF 文字框。
  rtbDetails.Clear();
  
  // 聲明一個用來儲存選定的訂單 ID 的整數。
  int SelectedOrderID;
  // 將選定的項目設定為整數。
  SelectedOrderID = (int)lbOrders.SelectedItem;
  
  // 聲明一個用來儲存選定訂單的記錄的資料行。
  DataRow drSelectedOrder;
  drSelectedOrder =
  dsNorthwind1.Orders.FindByOrderID(SelectedOrderID);
  
  // 聲明一個用來儲存相關記錄的資料行數組。
  DataRow[] draOrderDetails;
  draOrderDetails =
  drSelectedOrder.GetChildRows("OrdersOrderDetails");
  
  string details = "";
  foreach(DataRow drDetails in draOrderDetails)
  {
  foreach(DataColumn dcDetails in drDetails.Table.Columns)
  {
  details += dcDetails.ColumnName + ": ";
  details += drDetails[dcDetails].ToString() + "\n";
  }
  details += "\n";
  }
  rtbDetails.Text = details;
  }
  
  
  
  儲存項目。
  運行應用程式。
  在列表框中選擇一個訂單,其訂單明細將顯示在 RTF 文字框中。
  在列表框中選擇另一個訂單。RTF 文字框中的訂單明細將被更新。
  瀏覽多對多關係
  構成多對多關係的表通常通過保證資料完整性的第三方表進行串連。在羅斯文資料庫中,訂單表和產品表就是這樣相關的。因為有些訂單可能包含很多產品,而有些產品又在很多訂單中銷售。這兩個表是通過訂單明細表串連的,訂單明細表利用這兩個表中的列建立自己特定的列,並使這些資料相關。瀏覽構成多對多關係的三個表與處理一對多關聯性的表並沒有太大區別。
  
  要瀏覽多對多關係,您可以基於訂單明細表中的單個記錄來訪問產品,這將返回產品名稱並顯示在訂單明細中。
  
  您可以使用 GetParentRow 方法從產品表中訪問產品名稱。調用 GetParentRow 方法將返回單個資料行,而調用 GetChildRows 方法將返回資料行數組(如上例所示)。
  
  從訂單明細記錄中擷取產品名稱
  
  在 Solution Explorer(方案總管)中,按右鍵 Form1 並從捷徑功能表中選擇 View Code(查看代碼)。
  在列表框 (lbOrders) 的 SelectedIndexChanged 事件處理常式中,將以下代碼添加到 For Each 行之間:
  
  ' Visual Basic
  details &= "產品名稱: " & _
  CType(drDetails.GetParentRow("ProductsOrderDetails") _
  ("ProductName"), String) & ControlChars.CrLf
  // C#
  details += "產品名稱: " +
  drDetails.GetParentRow("ProductsOrderDetails")["ProductName"]
  + "\n";
  
  
  
  儲存項目。
  運行應用程式。
  在列表框中選擇一個訂單,
  RTF 文字框中將顯示產品名稱和詳細資料。現在表單中顯示來自所有四個表的相關資料。
  
  
  
  圖 2:顯示產品名稱和訂單明細的表單
  
  在列表框中選擇另一個訂單。RTF 文字框中的訂單明細將被更新。


相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。