SSRS:VS2010中的“索引超出范围”,但部署报告时却没有

时间:2013-10-18 15:51:55

标签: visual-studio-2010 sql-server-2005 reporting-services

当我尝试在VS中预览报表时,我有一个简单的报告,一直在抛出“索引超出范围”错误。当我将报告部署到SSRS时,它完美地运行。我已经彻底找到了答案,但似乎没有一个适用于我的情况。

错误:索引超出范围。必须是非负数且小于集合的大小。参数名称:index。

<?xml version="1.0" encoding="utf-8"?>
<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
  <Body>
    <ReportItems>
      <Textbox Name="textbox1">
        <CanGrow>true</CanGrow>
        <KeepTogether>true</KeepTogether>
        <Paragraphs>
          <Paragraph>
            <TextRuns>
              <TextRun>
                <Value>Sales Report</Value>
                <Style>
                  <FontFamily>Tahoma</FontFamily>
                  <FontSize>20pt</FontSize>
                  <FontWeight>Bold</FontWeight>
                  <Color>SteelBlue</Color>
                </Style>
              </TextRun>
            </TextRuns>
            <Style />
          </Paragraph>
        </Paragraphs>
        <rd:DefaultName>textbox1</rd:DefaultName>
        <Height>0.36in</Height>
        <Width>7.5in</Width>
        <Style>
          <PaddingLeft>2pt</PaddingLeft>
          <PaddingRight>2pt</PaddingRight>
          <PaddingTop>2pt</PaddingTop>
          <PaddingBottom>2pt</PaddingBottom>
        </Style>
      </Textbox>
      <Tablix Name="Tablix1">
        <TablixCorner>
          <TablixCornerRows>
            <TablixCornerRow>
              <TablixCornerCell>
                <CellContents>
                  <Textbox Name="Textbox5">
                    <CanGrow>true</CanGrow>
                    <KeepTogether>true</KeepTogether>
                    <Paragraphs>
                      <Paragraph>
                        <TextRuns>
                          <TextRun>
                            <Value>Sales Person</Value>
                            <Style />
                          </TextRun>
                        </TextRuns>
                        <Style />
                      </Paragraph>
                    </Paragraphs>
                    <rd:DefaultName>Textbox5</rd:DefaultName>
                    <Style>
                      <Border>
                        <Color>LightGrey</Color>
                        <Style>Solid</Style>
                      </Border>
                      <PaddingLeft>2pt</PaddingLeft>
                      <PaddingRight>2pt</PaddingRight>
                      <PaddingTop>2pt</PaddingTop>
                      <PaddingBottom>2pt</PaddingBottom>
                    </Style>
                  </Textbox>
                </CellContents>
              </TablixCornerCell>
            </TablixCornerRow>
          </TablixCornerRows>
        </TablixCorner>
        <TablixBody>
          <TablixColumns>
            <TablixColumn>
              <Width>1.35417in</Width>
            </TablixColumn>
          </TablixColumns>
          <TablixRows>
            <TablixRow>
              <Height>0.25in</Height>
              <TablixCells>
                <TablixCell>
                  <CellContents>
                    <Textbox Name="Textbox4">
                      <CanGrow>true</CanGrow>
                      <KeepTogether>true</KeepTogether>
                      <Paragraphs>
                        <Paragraph>
                          <TextRuns>
                            <TextRun>
                              <Value>=SUM(Fields!Amount.Value * Fields!ExchangeRate.Value)</Value>
                              <Style>
                                <Format>0.##</Format>
                              </Style>
                            </TextRun>
                          </TextRuns>
                          <Style />
                        </Paragraph>
                      </Paragraphs>
                      <rd:DefaultName>Textbox4</rd:DefaultName>
                      <Style>
                        <Border>
                          <Color>LightGrey</Color>
                          <Style>Solid</Style>
                        </Border>
                        <PaddingLeft>2pt</PaddingLeft>
                        <PaddingRight>2pt</PaddingRight>
                        <PaddingTop>2pt</PaddingTop>
                        <PaddingBottom>2pt</PaddingBottom>
                      </Style>
                    </Textbox>
                  </CellContents>
                </TablixCell>
              </TablixCells>
            </TablixRow>
          </TablixRows>
        </TablixBody>
        <TablixColumnHierarchy>
          <TablixMembers>
            <TablixMember>
              <Group Name="Year">
                <GroupExpressions>
                  <GroupExpression>=Fields!Year.Value</GroupExpression>
                  <GroupExpression>=Fields!Month.Value</GroupExpression>
                </GroupExpressions>
              </Group>
              <SortExpressions>
                <SortExpression>
                  <Value>=Fields!Year.Value</Value>
                </SortExpression>
              </SortExpressions>
              <TablixHeader>
                <Size>0.28125in</Size>
                <CellContents>
                  <Textbox Name="Year">
                    <CanGrow>true</CanGrow>
                    <KeepTogether>true</KeepTogether>
                    <Paragraphs>
                      <Paragraph>
                        <TextRuns>
                          <TextRun>
                            <Value>=MonthName(Fields!Month.Value, True) &amp; " " &amp; Fields!Year.Value</Value>
                            <Style>
                              <Format>0.##</Format>
                            </Style>
                          </TextRun>
                        </TextRuns>
                        <Style />
                      </Paragraph>
                    </Paragraphs>
                    <rd:DefaultName>Year</rd:DefaultName>
                    <Style>
                      <Border>
                        <Color>LightGrey</Color>
                        <Style>Solid</Style>
                      </Border>
                      <PaddingLeft>2pt</PaddingLeft>
                      <PaddingRight>2pt</PaddingRight>
                      <PaddingTop>2pt</PaddingTop>
                      <PaddingBottom>2pt</PaddingBottom>
                    </Style>
                  </Textbox>
                </CellContents>
              </TablixHeader>
            </TablixMember>
          </TablixMembers>
        </TablixColumnHierarchy>
        <TablixRowHierarchy>
          <TablixMembers>
            <TablixMember>
              <Group Name="RowGroup">
                <GroupExpressions>
                  <GroupExpression>=Fields!SalesPerson.Value</GroupExpression>
                </GroupExpressions>
              </Group>
              <TablixHeader>
                <Size>1.26042in</Size>
                <CellContents>
                  <Textbox Name="SalesPerson">
                    <CanGrow>true</CanGrow>
                    <KeepTogether>true</KeepTogether>
                    <Paragraphs>
                      <Paragraph>
                        <TextRuns>
                          <TextRun>
                            <Value>=Fields!SalesPerson.Value</Value>
                            <Style />
                          </TextRun>
                        </TextRuns>
                        <Style />
                      </Paragraph>
                    </Paragraphs>
                    <rd:DefaultName>SalesPerson</rd:DefaultName>
                    <Style>
                      <Border>
                        <Color>LightGrey</Color>
                        <Style>Solid</Style>
                      </Border>
                      <PaddingLeft>2pt</PaddingLeft>
                      <PaddingRight>2pt</PaddingRight>
                      <PaddingTop>2pt</PaddingTop>
                      <PaddingBottom>2pt</PaddingBottom>
                    </Style>
                  </Textbox>
                </CellContents>
              </TablixHeader>
            </TablixMember>
          </TablixMembers>
        </TablixRowHierarchy>
        <DataSetName>SalesLines</DataSetName>
        <Top>0.42944in</Top>
        <Height>0.53125in</Height>
        <Width>2.61459in</Width>
        <ZIndex>1</ZIndex>
        <Style>
          <Border>
            <Style>None</Style>
          </Border>
        </Style>
      </Tablix>
    </ReportItems>
    <Height>0.96069in</Height>
    <Style />
  </Body>
  <Width>8in</Width>
  <Page>
    <PageHeight>8.5in</PageHeight>
    <PageWidth>11in</PageWidth>
    <LeftMargin>1in</LeftMargin>
    <RightMargin>1in</RightMargin>
    <TopMargin>1in</TopMargin>
    <BottomMargin>1in</BottomMargin>
    <Style />
  </Page>
  <AutoRefresh>0</AutoRefresh>
  <DataSources>
    <DataSource Name="Reporting">
      <DataSourceReference>Reporting</DataSourceReference>
      <rd:SecurityType>None</rd:SecurityType>
      <rd:DataSourceID>aab21363-546f-4445-8789-9975de5d56bf</rd:DataSourceID>
    </DataSource>
  </DataSources>
  <DataSets>
    <DataSet Name="SalesLines">
      <Query>
        <DataSourceName>Reporting</DataSourceName>
        <CommandText>SELECT SalesPerson, exchangeRate, Amount, Year(PostingDate) AS [Year], Month(PostingDate) AS [Month] FROM [dbo].[ReportingSalesLines]
WHERE PostingDate BETWEEN '2012-10-01' AND '2013-09-30'</CommandText>
        <rd:UseGenericDesigner>true</rd:UseGenericDesigner>
      </Query>
      <Fields>
        <Field Name="ExchangeRate">
          <DataField>exchangeRate</DataField>
          <rd:TypeName>System.Decimal</rd:TypeName>
        </Field>
        <Field Name="SalesPerson">
          <DataField>SalesPerson</DataField>
          <rd:TypeName>System.String</rd:TypeName>
        </Field>
        <Field Name="Amount">
          <DataField>Amount</DataField>
          <rd:TypeName>System.Decimal</rd:TypeName>
        </Field>
        <Field Name="Year">
          <DataField>Year</DataField>
          <rd:TypeName>System.Int32</rd:TypeName>
        </Field>
        <Field Name="Month">
          <DataField>Month</DataField>
          <rd:TypeName>System.Int32</rd:TypeName>
        </Field>
      </Fields>
    </DataSet>
  </DataSets>
  <Language>en-US</Language>
  <ConsumeContainerWhitespace>true</ConsumeContainerWhitespace>
  <rd:ReportUnitType>Inch</rd:ReportUnitType>
  <rd:ReportID>7d9922c6-e37f-4826-b58e-bd8b9427da1c</rd:ReportID>
</Report>

5 个答案:

答案 0 :(得分:47)

我已经看到,当DataSet更改了其定义但Visual Studio存储的实际缓存数据(即*.rdl.data文件)仍然具有基于旧数据集定义的数据时,会发生这种情况。这是由于报告期望的数据与缓存的数据不匹配导致的内部错误。

要解决此问题,请从报告解决方案中删除所有*.rdl.data文件,然后再次尝试预览。

这就是部署报告时工作正常的原因 - 报告在运行时生成新数据,因此不会与任何缓存数据不匹配。

VS中的重建解决方案命令也可能是必需的。

答案 1 :(得分:2)

由于不同的原因,我已经多次发生这种情况,但最近只是在一个非常大的Tablix修复它的分页符选项下取消选中“如果可能的话,在一个页面上保持一致”。

答案 2 :(得分:1)

这也发生在我身上,最后我浪费了几个小时。这是我发现的真正有用的links之一。在我的情况下,当我重新启动电脑时,问题就消失了

答案 3 :(得分:0)

如果有其他人遇到这个问题,我遇到了同样的问题,但更广泛的互联网搜索表明它可能是报告设计中的空白问题(我发布给Sharepoint的报告遇到了同样的问题,我认为不会将数据缓存到.rdl.data文件。

所以看起来对我有用的解决方案就是搞乱空白。我的报表布局使用带有嵌套表的表,因此我整理了空行,固定行高,并填补了不同表之间的间隙。我还减小了页眉和页脚的大小。

我仍然不确定这些行动中究竟哪一种能够治愈它,但是对我来说,整体整理和删除不必要的空白似乎对我有所帮助

答案 4 :(得分:0)

有同样的问题,但以上都没有为我修好。

对我来说,问题是由数据集填充的参数引起的,并且未正确设置其默认值。默认为'All',在我看来是这样的:

\[Sender Analytical Structure\].\[Business Unit Name\].&\[All\]