本指南阐明如何使用 XRChart 控件,在分组报表中形象地显示数据。 关于 XtraReports 中分组功能的信息,请参阅 对数据分组 主题。

每个行分组都有图表的报表是形象而信息丰富的。 GroupFooter(分组脚注) 带区是放置图表最常用也最合适的地方。 为相应的分组标头插入分组脚注 (请参阅 报表带区 主题获得更多信息)。 检查标头带区和脚注带区的 GroupBand.Level 值是否相等。 把 XRChart 控件拖放到带区。 规定 XRChart.DataSource 属性与报表的属性相同 (对于主/从报表 —— 与执行分组的报表的属性相同)。 把数据系列添加到绘图,并按照需要定制其他图表元素。

如果现在正好运行项目,那么每个分组的图表都将是相同的,都显示数据集中的所有数据。 其原因是 XRChart 控件独立于报表带区而取回数据。 要使之与报表的分组同步,则需要为图表实现数据筛选。

通过接管 XRChart 控件的 BeforePrint 事件,可以完成此任务,如下列代码中所示。

C#CopyCode image复制代码
private void xrChart1_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e)
{
    XRChart xrc = (XRChart)sender;

    // Gets the current value of the grouping field.
    // For the master-detail report use DetailBand.GetCurrentColumnValue in detail part instead.
    string filter_value = GetCurrentColumnValue("TheGroupingField").ToString();

    // Clears the filters that may be set before.
    xrc.Series[0].DataFilters.Clear();

    // Creates and adds a new filter on the data field "TheGroupingField"
    // that has the type System.String. 
    // The condition is that the data value equals the filter_value parameter.
    xrc.Series[0].DataFilters.Add(new DataFilter("TheGroupingField", "System.String", 
        DataFilterCondition.Equal, filter_value));
}
Visual BasicCopyCode image复制代码
Private Sub xrChart1_BeforePrint(ByVal sender As Object, _ 
ByVal e As System.Drawing.Printing.PrintEventArgs)
    Dim xrc As XRChart = CType(sender,XRChart)

    ' Gets the current value of the grouping field.
    ' For the master-detail report use DetailBand.GetCurrentColumnValue in detail part instead.
    Dim filter_value As String = GetCurrentColumnValue("TheGroupingField").ToString

    ' Clears the filters that may be set before.
    xrc.Series(0).DataFilters.Clear

    ' Creates and adds a new filter on the data field "TheGroupingField" 
    ' that has the type System.String. 
    ' The condition is that the data value equals the filter_value parameter.
    xrc.Series(0).DataFilters.Add(New DataFilter("TheGroupingField", "System.String", _ 
    DataFilterCondition.Equal, filter_value))
End Sub

可以使用 ANDOR 连接运算符合并几个筛选。 通过 DataFilterCollection.ConjunctionMode 属性 (属于 DataFilterCollection 对象),或者通过系列的 SeriesBase.DataFiltersConjunctionMode 属性来指定它。 当为系列创建一个或多个数据筛选对象时,所显示的系列将只包含满足筛选条件的数据点。

Expand image参阅