首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 图形图象-> Maya教程
在 ADO.NET 数据集中浏览多个相关表(6)-.NET教程,数据库应用
作者:网友供稿 点击:12
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 
表达式列
  除了包含静态数据外,还可以基于表达式的结果为 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 集合中,可以对相关记录中的值进行计算,合计和逻辑求值。

文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·C# 1.x 实现 "强类型元素唯一的 ArrayList"-.NET教程,C#语言
·NET(C#)连接各类数据库-集锦-.NET教程,C#语言
·快速測試 Tomcat + Oracle 9i + JSP-JSP教程,Jsp/Servlet
·使用.NET读取XML文件-.NET教程,XML应用
·XML 实用工具类-JSP教程,Java与XML
·如何把ASP编写成DLL-ASP教程,ASP应用
·vb.net中不需要EXCEL导出成XSL-.NET教程,VB.Net语言
·Asp之Request对象(1)-ASP教程,ASP应用
·C#读硬盘序列号的原代码-.NET教程,C#语言
·取得的IP/用户名等信息-ASP教程,ASP应用
最新文章
·linux操作系统上摄像头的使用小技巧_linux教程
·c#动态生成树型结构的web程序设计_c#应用
·一个联盟该如何来吸引站长加盟_网赚技巧
·童之磊:中文在线的“二次创业”_站长访谈
·实体店铺如何与网店结合提高销售额的经验_站长心得
·20年之后,个人站长发展项目的一些奇思怪想_站长心得
·google adsense的菜鸟常识_google推广
·如何利用google增加你的网站访问量_google推广
·专业的seo,为什么不承诺排名_seo网站优化
·用专业代码给网站增加搜索引擎_站长心得
相关主题
  • 在 ADO.NET 数据集中浏览多个相关表(5)-.NET教程,数据库应用
  • 在 ADO.NET 数据集中浏览多个相关表(4)-.NET教程,数据库应用
  • 在 ADO.NET 数据集中浏览多个相关表(3)-.NET教程,数据库应用
  • 在 ADO.NET 数据集中浏览多个相关表(2)-.NET教程,数据库应用
  • 在 ADO.NET 数据集中浏览多个相关表(1)-.NET教程,数据库应用
  • 西部数码虚拟主机

    友情链接
    CNNIC 西部数码
    万网 自助建站
    虚拟主机 asp空间
    域名注册 域名
    域名申请 主页空间
    论坛空间 网站空间
    国际域名 虚拟空间
    空间租用 DDOS防火墙
    成都主机托管 四川主机托管
    主机租用 服务器租用
    网站目录 自助建站
    虚拟主机 网址大全
    软件下载
    自助链接
    虚拟主机资讯 特价虚拟主机
    版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
    关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
    发表评论 打印  刷新     关闭