65.9K
CodeProject 正在变化。 阅读更多。
Home

在 Reporting Services 中实现一个丑陋的 Tab 结构

starIconstarIconstarIconstarIconemptyStarIcon

4.00/5 (8投票s)

2008 年 6 月 24 日

CPOL

3分钟阅读

viewsIcon

71082

downloadIcon

871

使用表和文本框在 SQL Server 2005 报表服务报表中实现类似 tab 控件的结构

引言

在本文中,我将展示如何在 SSRS 报告中实现选项卡结构;由于 reporting services 没有提供很多控件来设计我们的报告,因此我们需要使用现有控件来实现我们的目标。为了在报告中创建选项卡控件,我将使用简单的文本框和表格控件以及表格控件的可见性属性。

背景

我最近在 ASP.NET 论坛中看到了一个关于创建包含选项卡控件的报告的帖子 (如何创建类似 Excel 的选项卡布局?)。几个月前我也遇到了类似的情况,当时我们的客户严格要求一次只在一个报告中显示一个表。我花了很多时间来寻找一种方法来实现这一点,但没有成功,最后我想出了这个方法。我必须承认,我对实现这样(丑陋的)选项卡结构一点也不满意,但客户对此表示满意,所以我这样做了。

要求

因此,需求是我们有三个表需要在报告中显示,并且每个表必须与一个选项卡相关联,并且在任何给定时间,报告中只有一个表可见。用户可以选择任何给定的选项卡,并且相应的表将变为可见,而其他表将被隐藏。

挑战

以下是在报告中实现选项卡结构的问题:

  1. 报告中没有选项卡控件。
  2. 我们没有任何方法可以在报告中捕获事件,因此我们无法根据用户的操作来显示/隐藏表。
  3. 即使我们以某种方式实现了这一点,我们也不确定在将报告导出为 Excel、PDF 和其他格式时是否会获得相同的输出。

解决方案

由于报表设计的限制,我们无法满足所有要求,因此我们将实现具有以下行为的选项卡结构:

我们将按照要求提供三个选项卡,但每个选项卡都将具有一个 +/- 符号,单击该符号将显示/隐藏选项卡数据。这个 +/- 符号是因为使用了表格控件的可见性可以通过另一个报表项切换属性。

在开始时,只有一个表可见,用户可以单击任何其他选项卡(+/- 符号)。单击选项卡 (+/-) 将显示/隐藏相应的表。因此,如果所有三个选项卡都处于展开状态(即处于 - 状态),那么所有三个表都将可见;如果所有三个选项卡都处于折叠状态(即处于 + 状态),那么所有三个表都将被隐藏,表也可以根据选项卡状态处于混合状态。

实现

让我们从实现开始:

  1. 创建一个新报告,并向其中添加三个文本框和三个表格,添加表格标题,创建数据集并将它们附加到表格等。
  2. 获取三个选项卡的图像,并将它们设置为相应文本框的BackgroundImage。还要将它们的InitialToggleState设置为Expanded

    TabControl2n.JPG

  3. 选择第一个表,右键单击 -> 属性 -> 可见性,然后选中可见性可以通过另一个报表项切换复选框,并从报表项下拉列表中选择相应的文本框(选项卡)名称。这会将此表的可见性附加到此文本框,并且将在该文本框上显示一个 +/- 符号用于切换。

    TabControl3n.JPG

  4. 对其他两个表重复上述步骤,并将它们的初始可见性设置为隐藏

就是这样,预览报告,结果将如下所示:

TabControl4.JPG

示例报告随附在文章中以供参考。

已知问题

虽然这种选项卡结构足以显示,但在导出时存在一些问题。

  1. 导出的报告在 PDF 和 Excel 中不相同。在 PDF 中,您将看到选项卡(文本框),而在 Excel 中,您将看不到。
  2. 在 PDF 中,只会显示可见的表格(PDF 文档被呈现以匹配报告中任何项目的当前状态),而在 Excel 中,无论表格的可见性状态如何,都会显示所有表格。

历史

  • 2008 年 6 月 24 日:初始帖子
© . All rights reserved.