这个示例展示了如何使用脚本来计算指定数据字段的最大值、最小值和平均值。 尽管也可以使用在 XtraReports 中可用的标准汇总函数来计算这些值,但是本示例阐明了为自定义汇总而创建和使用脚本的一般方法。

在本例中,报表被绑定到 Products 表 (在与 XtraReports 一起提供的 Northwind Traders 演示数据库中)。 在下面的插图中显示了此报表的设计。

下面是一些脚本,用于计算 Northwind 数据库中 Products 表的 UnitPrice 数据字段的最小值。 注意,为使本示例能正确工作,xrLabel1 应被绑定到 UnitPrice 字段,它的 XRSummary.Running 属性应被设置为 Report,并且它的 XRSummary.Func 属性应被设置为 Custom。 然后,切换到 Scripts 标签页,并接管此标签控件的下列脚本事件。

C#CopyCode image复制代码
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 BasicCopyCode image复制代码
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#CopyCode image复制代码
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 BasicCopyCode image复制代码
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#CopyCode image复制代码
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 BasicCopyCode image复制代码
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

在下面的插图中显示了结果。

Expand image参阅