1

我有一个 xml 数据,我正在使用报表查看器将其转换为 PDF。我有嵌套数据,所以我正在使用子报表。在其中一种情况下,我有两个子报表 Sub1 和 Sub2 来自 1 个主报表,它们调用一个通用子报表 SubSub1。SubSub1 有一些公共数据,并且进一步有与 Sub1 和 Sub2 专门相关的数据的子报表。

<MainReport>
 <Sub1>
  <SubSub1>
   <data>
   </data>
  </SubSub1>
 </Sub1>
 <Sub2>
  <SubSub1>
   <data>
   </data>
  </SubSub1>
 <Sub2>
<MainReport>

我能够在这方面更进一步。这些数据的性质使我有多个 MainReports。目前我正在为第一个 MainReport 获取 Sub1 和 Sub2 的正确数据,但后面的数据显示的是第一个 MainReport 的数据。调试显示正确的数据被添加到 SubSub1 的 reportdatasource,但 reportviewer 显示第一个 MainReport 的数据(而不是 2nd、3rd...)。为什么reportviewer 卡住了来自先前数据源的数据?

4

2 回答 2

0

通过您评论中添加的信息,我猜这个问题在于报表设计者对 .data 文件的缓存非常不可预测,尤其是在处理许多主要报表中使用的子报表时。在 BIDS2008 中使用子报表时,在我看来,子报表的实际报表定义甚至被缓存了。

以下是一些让您的设计师重回正轨的“刷新”方法,从小到侵入:

  • 进行预览后,明确点击refresh。这通常会强制刷新数据和渲染。
  • 删除相应报告的 .data 文件,然后再进行一次预览。
  • 关闭所有报表设计器(子报表和主报表)。删除.data文件。
  • 关闭 Visual Studio 执行上述所有操作。

如果最后一步不起作用,那么可能还有其他事情在起作用,因为据我所知,这会将设计器完全重置为空白。

PS。您想要的(嵌套和重新使用子报表)是完全可能的。通常只有设计师有问题。

于 2012-09-09T07:19:07.587 回答
0

下面是一个示例 xml 文件:

  <MainReport>
    <data>
    </data>
    <A>
      <B>
        <Subreport>
          <data>
          </data>
        </Subreport>
        <data>
        </data>
        <Subreport>
          <data>
          </data>
        </Subreport>
        <Subreport>
          <data>
          </data>
        </Subreport>
        <data>
        </data>
      </B>
    </A>
    <C>
      <B>
        <data>
        </data>
        <Subreport>
          <data>
          </data>
        </Subreport>
          <Subreport>
          <data>
          </data>
        </Subreport>
        <data>
        </data>
      </B>
    </C>
    <data>
    </data>
    <Subreport>
      <data>
      </data>
    </Subreport>
  </MainReport>

B 是 A 和 C 之间的公共子报表,并且有多个 MainReport。对于单个 MainReport,A 和 C 也将有多个 B。加载此 xml 后,我将通过 subreportprocessing 事件处理程序为每个子报表添加数据。

于 2012-09-09T15:45:02.333 回答