上一篇 | 下一篇

ADO.NET 数据集中浏览多个相关表 6

发布: 2008-6-29 23:20 | 作者: admin | 来源: | 查看: 4次

>表达式列

除了包含静态数据外,还可以基于表达式的结果为 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 列,显示 Uni

tPrice 和 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 deta

ils 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 文本框中的第一行。

在列表框中选择另一个订单,将更新显示以反映新选择的订单

字号: | 推荐给好友

31/3123>

评分:0

我来说两句