【问题标题】:Select or Deselect Report Columns in Runtime在运行时选择或取消选择报告列
【发布时间】:2013-07-17 09:50:54
【问题描述】:

我想构建一个工资单报告,用户可以根据需要选择或取消选择列。例如,对于每个员工,用户可以选择代表列表中每一列的复选框,例如 - Nic、净工资、无薪日等任意组合。我认为所有列都在 SP 中返回并且只显示选定的列。你能给我一些想法怎么做..

【问题讨论】:

  • 您可以根据这些参数隐藏报告中的每一列(和标题),但我认为您不能将剩余的列移动到一起。几年前我解决了这个问题,并最终制作了一个允许这种级别自定义的新演示应用程序,因为我不知道如何在运行时调整报表的布局。
  • 有没有我可以得到的演示应用程序?

标签: c# winforms crystal-reports


【解决方案1】:

提兰。我不知道您可以获得一个水晶报告演示应用程序,它会使您的工作变得更轻松,但如果您被宠坏了选择,我不会感到惊讶。 SAP 提供的报告服务软件及其在 Dashboard Design 和 Crystal Server 上的资料可能值得一看 (SAP Crystal Reports)。但是,对于您的目的而言,这可能是多余的。

另一种方法是尝试定义“松散”列(我不知道专业术语!)。我清楚地记得几年前完成了这项工作,但不记得具体细节,也无法再访问该报告(以前的雇主)。 This article 涵盖了这些步骤。它很丑,并且有一系列缺点(列被抑制的巨大间隙是一个很大的间隙),但它可能会解决您的问题。

This guy 在他的报告中创建通用列,然后动态构建他的查询。他的表格只适用于一份报告,但我认为您可以调整他的解决方案以满足您的需求。

Cross-tabs 可能会被利用来满足您的目的(我认为)。我对这些没有什么经验,但似乎稍作调整可能会允许动态列。

更好的选择(到目前为止)是在您的演示文稿中处理这个问题。你已经标记了 WinForms 和 C#,所以我可以假设你已经创建了一个带有报表查看器的 win 应用程序。假设您在报表中定义数据集,您的代码应该能够通过查看报表的 DataDefinition 在运行时处理列的创建(或抑制/启用和重新定位)。我读过,在运行时创建列在某种程度上取决于您的 CR/VS 版本,我只能猜测。

希望这会有所帮助。

【讨论】:

  • 感谢您的简短回复,我会尝试锻炼您的建议
  • 如果我可以根据复选框值隐藏列,那么上述要求可以实现吗?(Sp返回所有列)
  • 是的,它可以这样做,你的输出只会有很大的差距。抑制一列并不意味着它右侧的列将移动以填充新清空的空间。文章(“这个人”)展示了如何动态构建查询并将其适应通用布局将避免该问题。它可以修改到何种程度以适应您的情况至少部分取决于查询的复杂性。您的存储过程是否在其他地方使用也是一个考虑因素。
  • 我有大约 35 列是否值得写 35 sp's
  • 必须是 35 个 SP 35 个报告。我会说不,这不值得。修改表格,您需要进行 35 (x2) 次修改。有更有效和更经济的方法来实现这一目标。我很遗憾地说,如果我建议的这些方法超出了你的掌握范围,你可能已经咬得比你能咀嚼的多。 This guy 建议创建多个标题和详细信息部分。我认为他的意思是每个列的组合。就您而言,这听起来就像创建 35 个不同的 SP/报告一样糟糕!
【解决方案2】:

如果您可以将所选列的组合缩小到可管理的最小值,您可以为每个组合创建一个子报表并禁止显示除正确的子报表之外的所有子报表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-17
    • 2013-11-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-05
    • 1970-01-01
    • 2017-03-31
    相关资源
    最近更新 更多