我正在使用VB.Net 2010和Crystal Reports。我设计了一个数据透视查询,返回所需的摘要信息。
注意:我不想使用交叉表,因为我需要从右到左显示信息。
以下是一个示例结果:
我只是总结每个国籍的每个级别的员工人数。那是当我修改任何员工的国籍时,该国籍将在结果中显示为一列:PIVOT。
我设计了一个使用相同查询并显示相同数据的水晶报表。
我将报告的数据源设置为命令并在命令中添加了查询,但问题是:查询返回的列数仅是在设计时运行查询时检索的列数!也就是说,如果将来自其他国籍的新员工添加到数据库中,则无法在报告中显示。或者甚至,根据列设置的最大列数为3。
我的问题是:
如何根据数据透视查询返回的列数动态添加这些列?
MODIFICATION:
根据以下建议,我设计了一个水晶报告,该报告使用带有一个数据表“DataTable1”的数据集并添加了6列:一列用于已修复的Rank,其他列用于可能存在于员工数据表中的国籍如下图:
现在的问题是如何在这些列中显示数据透视查询返回的数据? 如何隐藏没有数据放在其上的其他列?
答案 0 :(得分:2)
我认为只有在不使用crosstab
的情况下才能使用的解决方案是从右到左创建尽可能多的列报告,然后在从数据库添加新列时有条件地显示和隐藏。
答案 1 :(得分:1)
Crystal Reports在设计时使用静态定义。我知道的动态选项是交叉表。但它在任何情况下都没有参加我,因为有很多设计限制。如果交叉表对你来说足够好,请坚持使用Siva的答案。否则,尝试类似于Abdulrahman_88的解决方案。
当我需要创建动态列时,我会以Abdulrahman_88建议的类似方式模拟此行为。我将尝试描述,因为我习惯,我的意思是,数据源是一个.NET数据集。您可以根据自己的情况进行调整。
更简单的情况是假设您有最大列数。在您的情况下,最多的国籍。
首先,我将创建一个描述列的XSD:
所以,我会在我的代码中创建一个类似的DataSet并填充它。请注意,您可以使用数据透视表查询和DataAdapter在.NET中执行此操作。
然后,我将使用XSD作为我的数据源并使用固定列设计报告并禁止显示空列标签。
如果你不能假设最多的国家/地区,那么你需要一个“更棘手”的解决方案:创建一个页面列。但是,只有当列数比页面宽时才打破页面,我才能工作。
告诉我你是否想要尝试并需要更多细节。