当前实现将所有数据从数据库中提取出来,为组织和计算报告所需的数据做了大量工作,并将所有这些数据存储在几个不同的对象中.然后使用Quick Report OnNeedData事件填充波段,直到没有更多数据(通过设置MoreData = false表示)
我遇到的问题是Fast Reports似乎需要一个频段连接到一个我没有的实际数据源.此外,fastReports似乎没有类似于OnNeedData的事件.
无论如何都要在代码中填写数据带的值并重新打印,直到打印完所有数据而不将带连接到数据集?
我为这个问题的模糊性而道歉,我对报告软件非常陌生,任何有关去哪里和看什么的建议将不胜感激.
解决方法
要将报表连接到由程序本身管理的数据源,可以使用TfrxUserDataSet组件,让您在报表中看到数据集,但是您可以在Fields(TStrings)属性中手动指定列名称并管理和提供值以编程方式为以下事件编写事件处理程序:
> OnCheckEOF在功能上等同于OnNeedData,如果没有更多内容要打印,则将EOF var参数设置为true
> OnFirst,您可以做任何必须做的事情来开始行走数据.
> OnGetValue和OnNewGetValue为当前行的每个不同列提供值
> OnNext,OnPrior将当前行移动到下一个或前一个位置.
如您所见,行/列概念(DataSet)用于向报表提供数据,但您可以从用于存储计算结果的任何结构中提取数据(列表,数组或任何其他对象) /结构/文件等)
在报表中,您将波段链接到此逻辑DataSet,并使用标准组件来打印此DataSet的列值.
如果您已经在DataSet中拥有数据,例如计算后的内存中DataSet,则最好使用TfrxDBDataset直接将报表绑定到该数据源.