这个示例展示了如何使用脚本来计算指定数据字段的最大值、最小值和平均值。 尽管也可以使用在 XtraReports 中可用的标准汇总函数来计算这些值,但是本示例阐明了为自定义汇总而创建和使用脚本的一般方法。
在本例中,报表被绑定到 Products 表 (在与 XtraReports 一起提供的 Northwind Traders 演示数据库中)。 在下面的插图中显示了此报表的设计。
下面是一些脚本,用于计算 Northwind 数据库中 Products 表的 UnitPrice 数据字段的最小值。 注意,为使本示例能正确工作,xrLabel1 应被绑定到 UnitPrice 字段,它的 XRSummary.Running 属性应被设置为 Report,并且它的 XRSummary.Func 属性应被设置为 Custom。 然后,切换到 Scripts 标签页,并接管此标签控件的下列脚本事件。
C# | 复制代码 |
---|---|
System.Decimal minPrice = System.Decimal.MaxValue; private void OnSummaryReset(object sender, System.EventArgs e) { minPrice = System.Decimal.MaxValue; } private void OnSummaryRowChanged(object sender, System.EventArgs e) { minPrice = Math.Min(minPrice, (System.Decimal)GetCurrentColumnValue("UnitPrice")); } private void OnSummaryGetResult(object sender, SummaryGetResultEventArgs e) { e.Result = minPrice; e.Handled = true; } |
Visual Basic | 复制代码 |
---|---|
Dim minPrice As System.Decimal = System.Decimal.MaxValue Private Sub OnSummaryReset(ByVal sender As Object, ByVal e As System.EventArgs) minPrice = System.Decimal.MaxValue End Sub Private Sub OnSummaryRowChanged(ByVal sender As Object, ByVal e As System.EventArgs) minPrice = Math.Min(minPrice, GetCurrentColumnValue("UnitPrice")) End Sub Private Sub OnSummaryGetResult(ByVal sender As Object, ByVal e As SummaryGetResultEventArgs) e.Result = minPrice e.Handled = True End Sub |
下面是一些脚本,用于计算 UnitPrice 数据字段的最大值。 注意,为使本示例能正确工作,xrLabel2 应被绑定到 UnitPrice 字段,它的 XRSummary.Running 属性应被设置为 Report,并且它的 XRSummary.Func 属性应被设置为 Custom。 然后,切换到 Scripts 标签页,并接管此标签控件的下列脚本事件。
C# | 复制代码 |
---|---|
System.Decimal maxPrice = System.Decimal.MinValue; private void OnSummaryReset(object sender, System.EventArgs e) { maxPrice = System.Decimal.MinValue; } private void OnSummaryRowChanged(object sender, System.EventArgs e) { maxPrice = Math.Max(maxPrice, (System.Decimal)GetCurrentColumnValue("UnitPrice")); } private void OnSummaryGetResult(object sender, SummaryGetResultEventArgs e) { e.Result = maxPrice; e.Handled = true; } |
Visual Basic | 复制代码 |
---|---|
Dim maxPrice As System.Decimal = System.Decimal.MinValue Private Sub OnSummaryReset(ByVal sender As Object, ByVal e As System.EventArgs) maxPrice = System.Decimal.MinValue End Sub Private Sub OnSummaryRowChanged(ByVal sender As Object, ByVal e As System.EventArgs) maxPrice = Math.Max(maxPrice, GetCurrentColumnValue("UnitPrice")) End Sub Private Sub OnSummaryGetResult(ByVal sender As Object, ByVal e As SummaryGetResultEventArgs) e.Result = maxPrice e.Handled = True End Sub |
下面是一些脚本,用于计算 UnitPrice 数据字段的平均值。 注意,为使本示例能正确工作,xrLabel3 应被绑定到 UnitPrice 字段,它的 XRSummary.Running 属性应被设置为 Report,并且它的 XRSummary.Func 属性应被设置为 Custom。 然后,切换到 Scripts 标签页,并接管此标签控件的下列脚本事件。
C# | 复制代码 |
---|---|
System.Decimal totalPrice = 0; int productsCount = 0; private void OnSummaryReset(object sender, System.EventArgs e) { totalPrice = 0; productsCount = 0; } private void OnSummaryRowChanged(object sender, System.EventArgs e) { productsCount++; totalPrice += (System.Decimal)GetCurrentColumnValue("UnitPrice"); } private void OnSummaryGetResult(object sender, SummaryGetResultEventArgs e) { e.Result = productsCount > 0 ? totalPrice / productsCount : 0; e.Handled = true; } |
Visual Basic | 复制代码 |
---|---|
Dim totalPrice As System.Decimal = 0 Dim productsCount As Integer = 0 Private Sub OnSummaryReset(ByVal sender As Object, ByVal e As System.EventArgs) totalPrice = 0 productsCount = 0 End Sub Private Sub OnSummaryRowChanged(ByVal sender As Object, ByVal e As System.EventArgs) productsCount += 1 totalPrice += GetCurrentColumnValue("UnitPrice") End Sub Private Sub OnSummaryGetResult(ByVal sender As Object, ByVal e As SummaryGetResultEventArgs) If productsCount > 0 Then e.Result = totalPrice / productsCount Else e.Result = 0 e.Handled = True End Sub |
在下面的插图中显示了结果。