在大部分真实的场景中,绑定 到报表的数据源包含的数据行,远远多于报表创建处理必需的数据行。 在这种情况下,必须根据某些筛选标准来筛选数据,筛选标准可以建立在一个或多个数据字段之上。
本文档阐述了在 XtraReports 中筛选数据的不同方式:
限定数据
取决于报表数据源是否为空,可以使用下列属性,来限制在报表文档显示的记录数目。
-
如果报表的数据源不为空,那么 XtraReportBase.DetailPrintCount 属性限定在报表文档中显示的记录数目。 如果此属性值超出数据源中的记录总数,那么所有记录都被打印。
在运行时刻和设计时刻使用大型数据源时,此选项有助于减少报表预览的加载时间。
-
如果报表的数据源为空,那么 XtraReportBase.DetailPrintCountOnEmptyDataSource 属性指定 Detail 带区被打印的次数。
此选项可用于创建 静态报表。
在报表级筛选
第一种方法是使用 XtraReports 提供的内置筛选功能。 为此,需要把所需的筛选设置到报表的 XtraReportBase.FilterString 属性 —— 以以程序方式或在设计时刻使用功能强大的筛选生成器。
注意 |
---|
如果以程序方式设置报表的 FilterString 属性,就不能在报表创建期间设置。 因此,要在调用 XtraReport.CreateDocument 方法之前访问此属性 (因此在 XtraReport.ShowPreview、XtraReport.ShowPreviewDialog、XtraReport.Print、XtraReport.PrintDialog 和所有 导出 方法被 XtraReport.CreateDocument 方法内部调用之前),或者在报表的 XRControl.BeforePrint 事件处理程序中访问此属性。 |
您可能注意到 FilterString 属性是在 XtraReportBase 类中推出的,而不是 XtraReport 类。 这意味着可以为 主报表和从报表 指定不同的筛选。 大体上,以这种方式完成的原因,是这些报表可以有不同的数据源,因为 XtraReportBase.DataSource 属性也是在 XtraReportBase 类中推出的。
当创建筛选标准时,可以创建和编辑逻辑表达式,也可以连接表达式组,从而提供复杂的结构化树状视图。 可以使用 AND、Or、Not And、和 Not Or 运算符结合表达式组。 编辑器提供了详尽的逻辑运算符列表,如下图所示。
注意,实际的运算符集,如同列表中表示的那样,会因变量类型不同而不同。
在每个筛选条件中,左部分包含了同一层级数据源中已有的数据字段名称、或 计算字段 名称。 条件的右部分包含了某一数值或字符串值、或者 报表参数 名称。 要访问参数,则单击右侧的图标,直到它变为问号图标。
本文档中的下列指南描述了如何使用 XtraReportBase.FilterString 属性来筛选数据:
注意,要可视地为报表指定筛选,尽管使用 FilterString 属性是最方便的方式,但是,最好是仅当报表数据源包含少量数据时、或者没有其他执行此任务的其他方式时,才使用这种方式 (例如这种方式仅在 最终用户设计器 中对最终用户可用)。 但是,如果需要达到更好的性能并且减少从数据服务器上的数据加载,我们推荐在数据源级别筛选数据,就如同本文档的下一小节描述的那样。
在数据源级筛选
如果报表数据源包含了大量数据、或者不能够在可容忍的时间期间内加载数据时,那么使用第二种方式。 如果应用程序的数据加载过程要求不高,就使用本文档前一部分介绍的方式。
要在数据源级筛选数据,就需要数据源的 SELECT 语句包含表示筛选标准的 WHERE 子句。 可以以不同的方式来完成此任务,这取决于绑定到报表的数据源类型。 例如,如果 使用 .NET 数据提供程序 把报表绑定到数据,就执行下列操作步骤:
-
把报表的 XtraReportBase.DataAdapter 属性设置为 null (在 Visual Basic 中为 Nothing)。 这样做的原因是报表使用 DataAdapter 属性来填充它的 数据源 数据,而如果人工构造 SELECT 语句,那么也要在需要时人工填充数据源。
-
使用未命名的参数把 WHERE 子句添加到数据适配器的 SELECT 语句。 为达到此目的,使用 OleDbCommand.CommandText 属性。
-
把相应的 报表参数 添加到报表中,并且在报表的 XRControl.BeforePrint 事件处理程序中,使用指定了参数值的数据适配器来填充报表数据源。
注意 |
---|
尽管这些步骤是基于使用 OleDbDataAdapter 对象的,但是,对于 SqlDataAdapter 对象的操作步骤也是类似的。 |
在下列指南中详细说明了这种方式: 如何: 在数据源级筛选数据。
按条件筛选
尽管在本文档前面的小节中描述了两种方式,实际上允许使用任何可行的筛选标准来实现筛选,但是,有时仍然需要使用其他筛选逻辑来筛选报表数据。 为此,XtraReports 提供了下列两种可选的方式:
-
接管确定的 报表带区 的 XRControl.BeforePrint 事件 (通常是 DetailBand 带区),使用 XtraReportBase.GetCurrentRow 或 XtraReportBase.GetCurrentColumnValue 方法来访问当前数据行,分析是否需要隐藏当前带区,如果需要,则把 e.Cancel 属性设置为 true;
-
创建返回 Boolean 值的 计算字段,来指明是否隐藏某一带区或控件,然后在构建的 格式设置规则 的表达式中使用此字段,其中格式设置规则决定了带区或控件的 XRControl.Visible 属性值。 更多信息,请参阅下列指南: 如何: 有条件地筛选数据。
示例
下列指南演示了如何筛选报表数据。