国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

在ADO.NET數據集中瀏覽多個相關表(6)

2024-07-10 13:02:57
字體:
來源:轉載
供稿:網友

表達式列
  除了包含靜態數據外,還可以基于表達式的結果為 datacolumn 分配值。表達式是一個分配給 datacolumn.expression 屬性的字符串。
  
  當表達式與相關數據一同使用時,數據列可以包含:
  
  相關數據列的計算所得值。
  相關數據列的合計信息。
  相關數據的邏輯比較結果。
  為說明處理相關數據時的值表達式列,我們將針對每種使用情況介紹一個示例,并添加到 datarelationexample 應用程序中。
  
  添加包含計算值的表達式列
  計算的列包含數學運算結果。可以從現有的列中取值進行計算。訂單明細表中將添加一個名為 total 的新列,它將包含由表達式 unitprice * quantity 返回的值(訂單的總計美元值)。
  
  添加表達式列
  
  在 solution explorer(解決方案資源管理器)中,右鍵單擊 form1 并從快捷菜單中選擇 view code(查看代碼)。
  將以下代碼添加到 form1_load 事件處理程序中已有代碼之上:
  
  ' visual basic
  ' 在訂單明細表中創建名為 total 的表達式列。
  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#
  // 在訂單明細表中創建名為 total 的表達式列。
  datacolumn dctotal = new datacolumn("total");
  dctotal.datatype = system.type.gettype("system.decimal");
  dctotal.expression = "unitprice * quantity";
  dsnorthwind1.order_details.columns.add(dctotal);
  
  
  
  運行應用程序。
  在列表框中選擇一個訂單,
  檢查 rtf 文本框中的訂單明細,并注意每個記錄都有一個新的 total 列,顯示 unitprice 和 quantity 字段的乘積。
  
  關閉窗體。
  添加包含合計信息的表達式列
  expression 屬性支持幾個合計功能(sum、avg、count 等)。有關詳細信息,請參閱 datacolumn.expression 屬性。
  
  為演示如何生成合計信息,需要在訂單表中添加一個名為 ordertotal 的新列。此列將使用 sum 功能,根據在列表框 (lborders) 中選定的訂單返回所有子訂單明細記錄的總計美元值。然后,該值將顯示在 rtf 文本框中每個訂單明細的上方。
  
  創建 ordertotal 列
  
  在 solution explorer(解決方案資源管理器)中,右鍵單擊 form1 并從快捷菜單中選擇 view code(查看代碼)。
  在 form1_load 事件處理程序中,將以下代碼添加到在訂單明細表中創建 total 列的代碼的下方:
  
  ' visual basic
  ' 在訂單表中創建名為 ordertotal 的表達式列。
  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#
  // 在訂單表中創建名為 ordertotal 的表達式列。
  datacolumn dctotal2 = new datacolumn("ordertotal");
  dctotal2.datatype = system.type.gettype("system.decimal");
  dctotal2.expression = "sum(child.total)";
  dsnorthwind1.orders.columns.add(dctotal2);
  
  
  
  將合計信息顯示在所有訂單明細的上方
  
  在 lborders_selectedindexchanged 事件處理程序中,將以下代碼添加到 dim details as string = "" 或 string details = "" 行之下:
  
  ' visual basic
  details = "訂單總計: " & string.format("{0:c}", _
  dsnorthwind1.orders.findbyorderid(ctype(lborders.selecteditem, _
  integer))("ordertotal")) & controlchars.crlf
  // c#
  details = "訂單總計: " +
  string.format("{0:c}",dsnorthwind1.orders.findbyorderid
  ((int)lborders.selecteditem)["ordertotal"]) + "/n";
  
  
  運行應用程序。
  在列表框中選擇一個訂單,
  請注意,選定訂單的所有訂單明細的總計金額將顯示在 rtf 文本框中的第一行。
  
  在列表框中選擇另一個訂單,將更新顯示以反映新選擇的訂單。
  關閉窗體。
  添加包含邏輯求值的表達式列
  expression 屬性可以基于其他列中的計算值來填充某個數據列。例如,訂單表中的 ordersize 列可以包含值“big”(如果訂單總額大于 1000)或者“small”(如果訂單總額小于 1000)。
  
  為演示這類表達式,需要在 datarelationexample 應用程序中添加代碼以執行以下操作:
  
  在訂單表中添加名為 ordersize 的數據列。
  根據相關訂單明細的值來填充 ordersize 列。
  在 rtf 文本框的頂部同時顯示 ordersize 列的值和 ordertotal 的值。
  添加創建 ordersize 列的代碼
  
  在 solution explorer(解決方案資源管理器)中,右鍵單擊 form1 并從快捷菜單中選擇 view code(查看代碼)。
  在 form1_load 事件處理程序中,將以下代碼添加到在訂單表中創建 ordertotal 列的代碼的下方:
  
  ' visual basic
  ' 在訂單表中創建名為 ordersize 的表達式列。
  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#
  // 在訂單表中創建名為 ordersize 的表達式列。
  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 事件處理程序中,將以下代碼添加到第一個 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";
  
  
  
  運行應用程序。
  在列表框中選擇一個訂單。
  檢查 rtf 文本框中的第一行。選定訂單的 ordersize 將顯示在 ordertotal 的右側。
  在列表框中選擇另一個訂單,將更新顯示以反映新選擇的訂單。
  從 debug(調試)菜單中,選擇 stop debugging(停止調試)。
  有關相關表的其他信息
  這里有必要提及一些其他信息以豐富本文的內容。
  
  填充相關數據表的順序非常重要
  相關數據表的填充順序對數據的輸出有很大影響,因此必須在設計應用程序時予以考慮。例如,請注意最后一個填充的客戶表的情況。當填充客戶表時,組合框將填充客戶名稱值。填充組合框時,會引發 selectedindexchanged 事件。這將執行事件處理程序中的代碼。由于尚未填充訂單表,getchildrows 方法將返回零 (0) 個記錄,窗體的標題將顯示錯誤信息。試一試:更改代碼以首先填充客戶表,并運行應用程序。窗體的標題顯示 alfki 的零 (0) 個訂單,這是不正確的。
  
  返回相關記錄的特定版本
  通過將所需的 datarowversion 作為第二個(可選的)參數傳遞給 getchildrows 或 getparentrow 方法,可以返回數據行的特定版本。以該應用程序為例,如果只想查看特定客戶的原始訂單,可以將組合框的 selectedindexchanged 事件中的代碼更改為類似如下的代碼。由于此應用程序中的數據并未更改,以下代碼不會產生明顯的效果,這里只是作為一個說明。
  
  ' visual basic
  ' 只用選定客戶的原始子行
  ' 填充數組。
  dim draorders as datarow() = dsnorthwind1.customers.findbycustomerid _
  (cbcustomers.selectedvalue.tostring()).getchildrows _
  ("customersorders", datarowversion.original)
  // c#
  // 只用選定客戶的原始子行
  // 填充數組。
  datarow draorders = dsnorthwind1.customers.findbycustomerid
  (cbcustomers.selectedvalue.tostring()).getchildrows
  ("customerorders", datarowversion.original);
  
  
  總結
  要訪問特定數據行的相關記錄,可以調用該行的 getchildrows 或 getparentrow 方法,以傳遞連接該數據行及其相關記錄的數據關系。然后,便可以通過檢查由該方法調用返回的數據行(或數據行數組)來訪問相關的記錄。
  
  通過為 datacolumn.expression 屬性分配一個有效的表達式字符串并將數據列添加到相應的 datatable.columns 集合中,可以對相關記錄中的值進行計算,合計和邏輯求值。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 增城市| 维西| 隆尧县| 泰顺县| 望都县| 兴仁县| 滕州市| 鄯善县| 闽侯县| 宜宾市| 柳州市| 华阴市| 突泉县| 威宁| 新晃| 吴川市| 绥中县| 达日县| 买车| 霞浦县| 九龙城区| 乌拉特前旗| 汉沽区| 宣恩县| 犍为县| 武城县| 商城县| 皮山县| 南雄市| 舒兰市| 天水市| 玛曲县| 卢氏县| 奉贤区| 灵台县| 富川| 花莲县| 察隅县| 麻江县| 泸溪县| 沂源县|