久久―日本道色综合久久,亚洲欧美精品在线,狼狼色丁香久久婷婷综合五月,香蕉人人超,日本网站黄,国产在线观看不卡免费高清,无遮挡的毛片免费

2023信創(chuàng)獨(dú)角獸企業(yè)100強(qiáng)
全世界各行各業(yè)聯(lián)合起來,internet一定要實(shí)現(xiàn)!

在ASP.NET數(shù)據(jù)集中瀏覽多個(gè)相關(guān)表

2004-02-16 eNet&Ciweek

  表達(dá)式列
  除了包含靜態(tài)數(shù)據(jù)外,還可以基于表達(dá)式的結(jié)果為 DataColumn 分配值。表達(dá)式是一個(gè)分配給 DataColumn.Expression 屬性的字符串。

  當(dāng)表達(dá)式與相關(guān)數(shù)據(jù)一同使用時(shí),數(shù)據(jù)列可以包含:

  相關(guān)數(shù)據(jù)列的計(jì)算所得值。
  相關(guān)數(shù)據(jù)列的合計(jì)信息。
  相關(guān)數(shù)據(jù)的邏輯比較結(jié)果。
  為說明處理相關(guān)數(shù)據(jù)時(shí)的值表達(dá)式列,我們將針對每種使用情況介紹一個(gè)示例,并添加到 DataRelationExample 應(yīng)用程序中。

  添加包含計(jì)算值的表達(dá)式列
  計(jì)算的列包含數(shù)學(xué)運(yùn)算結(jié)果??梢詮默F(xiàn)有的列中取值進(jìn)行計(jì)算。訂單明細(xì)表中將添加一個(gè)名為 Total 的新列,它將包含由表達(dá)式 UnitPrice * Quantity 返回的值(訂單的總計(jì)美元值)。

  添加表達(dá)式列

  在 Solution Explorer(解決方案資源管理器)中,右鍵單擊 Form1 并從快捷菜單中選擇 View Code(查看代碼)。
將以下代碼添加到 Form1_Load 事件處理程序中已有代碼之上:

' Visual Basic
' 在訂單明細(xì)表中創(chuàng)建名為 Total 的表達(dá)式列。
Dim dcTotal as DataColumn = new DataColumn("Total")
dcTotal.DataType = System.Type.GetType("System.Decimal")
dcTotal.Expression = "UnitPrice * Quantity"
DsNorthwind1.Order_Details.Columns.Add(dcTotal)
// C#
// 在訂單明細(xì)表中創(chuàng)建名為 Total 的表達(dá)式列。
DataColumn dcTotal = new DataColumn("Total");
dcTotal.DataType = System.Type.GetType("System.Decimal");
dcTotal.Expression = "UnitPrice * Quantity";
dsNorthwind1.Order_Details.Columns.Add(dcTotal);

  運(yùn)行應(yīng)用程序。
  在列表框中選擇一個(gè)訂單,
  檢查 RTF 文本框中的訂單明細(xì),并注意每個(gè)記錄都有一個(gè)新的 Total 列,顯示 UnitPrice 和 Quantity 字段的乘積。

  關(guān)閉窗體。
  添加包含合計(jì)信息的表達(dá)式列
  Expression 屬性支持幾個(gè)合計(jì)功能(Sum、Avg、Count 等)。有關(guān)詳細(xì)信息,請參閱 DataColumn.Expression 屬性。

  為演示如何生成合計(jì)信息,需要在訂單表中添加一個(gè)名為 OrderTotal 的新列。此列將使用 Sum 功能,根據(jù)在列表框 (lbOrders) 中選定的訂單返回所有子訂單明細(xì)記錄的總計(jì)美元值。然后,該值將顯示在 RTF 文本框中每個(gè)訂單明細(xì)的上方。

  創(chuàng)建 OrderTotal 列

  在 Solution Explorer(解決方案資源管理器)中,右鍵單擊 Form1 并從快捷菜單中選擇 View Code(查看代碼)。
  在 Form1_Load 事件處理程序中,將以下代碼添加到在訂單明細(xì)表中創(chuàng)建 Total 列的代碼的下方:

' Visual Basic
' 在訂單表中創(chuàng)建名為 OrderTotal 的表達(dá)式列。
Dim dcOrderTotal as DataColumn = new DataColumn("OrderTotal")
dcOrderTotal.DataType = System.Type.GetType("System.Decimal")
dcOrderTotal.Expression = "Sum(Child.Total)"
DsNorthwind1.Orders.Columns.Add(dcOrderTotal)
// C#
// 在訂單表中創(chuàng)建名為 OrderTotal 的表達(dá)式列。
DataColumn dcTotal2 = new DataColumn("OrderTotal");
dcTotal2.DataType = System.Type.GetType("System.Decimal");
dcTotal2.Expression = "Sum(Child.Total)";
dsNorthwind1.Orders.Columns.Add(dcTotal2);

  將合計(jì)信息顯示在所有訂單明細(xì)的上方

  在 lbOrders_SelectedIndexChanged 事件處理程序中,將以下代碼添加到 Dim details As String = "" 或 string details = "" 行之下:

' Visual Basic
details = "訂單總計(jì): " & String.Format("{0:c}", _
DsNorthwind1.Orders.FindByOrderID(CType(lbOrders.SelectedItem, _
Integer))("OrderTotal")) & ControlChars.CrLf
// C#
details = "訂單總計(jì): " +
String.Format("{0:c}",dsNorthwind1.Orders.FindByOrderID
((int)lbOrders.SelectedItem)["OrderTotal"]) + "\n";

  運(yùn)行應(yīng)用程序。
  在列表框中選擇一個(gè)訂單,
  請注意,選定訂單的所有訂單明細(xì)的總計(jì)金額將顯示在 RTF 文本框中的第一行。

  在列表框中選擇另一個(gè)訂單,將更新顯示以反映新選擇的訂單。
  關(guān)閉窗體。
  添加包含邏輯求值的表達(dá)式列
  Expression 屬性可以基于其他列中的計(jì)算值來填充某個(gè)數(shù)據(jù)列。例如,訂單表中的 OrderSize 列可以包含值“Big”(如果訂單總額大于 1000)或者“Small”(如果訂單總額小于 1000)。

  為演示這類表達(dá)式,需要在 DataRelationExample 應(yīng)用程序中添加代碼以執(zhí)行以下操作:

  在訂單表中添加名為 OrderSize 的數(shù)據(jù)列。
  根據(jù)相關(guān)訂單明細(xì)的值來填充 OrderSize 列。
  在 RTF 文本框的頂部同時(shí)顯示 OrderSize 列的值和 OrderTotal 的值。
  添加創(chuàng)建 OrderSize 列的代碼

  在 Solution Explorer(解決方案資源管理器)中,右鍵單擊 Form1 并從快捷菜單中選擇 View Code(查看代碼)。
  在 Form1_Load 事件處理程序中,將以下代碼添加到在訂單表中創(chuàng)建 OrderTotal 列的代碼的下方:

' Visual Basic
' 在訂單表中創(chuàng)建名為 OrderSize 的表達(dá)式列。
Dim dcOrderSize as DataColumn = new DataColumn("OrderSize")
dcOrderSize.DataType = System.Type.GetType("System.String")
dcOrderSize.Expression = "IIF(Sum(Child.Total)<1000,'Small','Big')"
DsNorthwind1.Orders.Columns.Add(dcOrderSize)
// C#
// 在訂單表中創(chuàng)建名為 OrderSize 的表達(dá)式列。
DataColumn dcOrderSize = new DataColumn("OrderSize");
dcOrderSize.DataType = System.Type.GetType("System.String");
dcOrderSize.Expression = "IIF(Sum(Child.Total)<1000,'Small','Big')";
dsNorthwind1.Orders.Columns.Add(dcOrderSize);

  顯示 OrderSize 的值

  在 lbOrders_SelectedIndexChanged 事件處理程序中,將以下代碼添加到第一個(gè) For Each 行的上方:

' Visual Basic
details &= " (" & CType(DsNorthwind1.Orders.FindByOrderID _
(CType(lbOrders.SelectedItem, Integer))("OrderSize"), String) & ")" _
& ControlChars.CrLf
// C#
details += " (" + dsNorthwind1.Orders.FindByOrderID
((int)lbOrders.SelectedItem)["OrderSize"] + ")\n";

  運(yùn)行應(yīng)用程序。
  在列表框中選擇一個(gè)訂單。
  檢查 RTF 文本框中的第一行。選定訂單的 OrderSize 將顯示在 OrderTotal 的右側(cè)。
  在列表框中選擇另一個(gè)訂單,將更新顯示以反映新選擇的訂單。
  從 Debug(調(diào)試)菜單中,選擇 Stop Debugging(停止調(diào)試)。
  有關(guān)相關(guān)表的其他信息
  這里有必要提及一些其他信息以豐富本文的內(nèi)容。

  填充相關(guān)數(shù)據(jù)表的順序非常重要
  相關(guān)數(shù)據(jù)表的填充順序?qū)?shù)據(jù)的輸出有很大影響,因此必須在設(shè)計(jì)應(yīng)用程序時(shí)予以考慮。例如,請注意最后一個(gè)填充的客戶表的情況。當(dāng)填充客戶表時(shí),組合框?qū)⑻畛淇蛻裘Q值。填充組合框時(shí),會引發(fā) SelectedIndexChanged 事件。這將執(zhí)行事件處理程序中的代碼。由于尚未填充訂單表,GetChildRows 方法將返回零 (0) 個(gè)記錄,窗體的標(biāo)題將顯示錯(cuò)誤信息。試一試:更改代碼以首先填充客戶表,并運(yùn)行應(yīng)用程序。窗體的標(biāo)題顯示 ALFKI 的零 (0) 個(gè)訂單,這是不正確的。

  返回相關(guān)記錄的特定版本
  通過將所需的 DataRowVersion 作為第二個(gè)(可選的)參數(shù)傳遞給 GetChildRows 或 GetParentRow 方法,可以返回?cái)?shù)據(jù)行的特定版本。以該應(yīng)用程序?yàn)槔?,如果只想查看特定客戶的原始訂單,可以將組合框的 SelectedIndexChanged 事件中的代碼更改為類似如下的代碼。由于此應(yīng)用程序中的數(shù)據(jù)并未更改,以下代碼不會產(chǎn)生明顯的效果,這里只是作為一個(gè)說明。

' Visual Basic
' 只用選定客戶的原始子行
' 填充數(shù)組。
Dim draOrders As DataRow() = DsNorthwind1.Customers.FindByCustomerID _
(cbCustomers.SelectedValue.ToString()).GetChildRows _
("CustomersOrders", DataRowVersion.Original)
// C#
// 只用選定客戶的原始子行
// 填充數(shù)組。
DataRow draOrders = dsNorthwind1.Customers.FindByCustomerID
(cbCustomers.SelectedValue.ToString()).GetChildRows
("CustomerOrders", DataRowVersion.Original);


  總結(jié)
  要訪問特定數(shù)據(jù)行的相關(guān)記錄,可以調(diào)用該行的 GetChildRows 或 GetParentRow 方法,以傳遞連接該數(shù)據(jù)行及其相關(guān)記錄的數(shù)據(jù)關(guān)系。然后,便可以通過檢查由該方法調(diào)用返回的數(shù)據(jù)行(或數(shù)據(jù)行數(shù)組)來訪問相關(guān)的記錄。

  通過為 DataColumn.Expression 屬性分配一個(gè)有效的表達(dá)式字符串并將數(shù)據(jù)列添加到相應(yīng)的 DataTable.Columns 集合中,可以對相關(guān)記錄中的值進(jìn)行計(jì)算,合計(jì)和邏輯求值。

相關(guān)頻道: eNews

您對本文或本站有任何意見,請?jiān)谙路教峤唬x謝!

投稿信箱:tougao@enet16.com