asp.net ReportViewer - 强制使用SizeToReportContent = true的垂直滚动条

时间:2012-08-08 18:49:34

标签: asp.net visual-studio-2010 report-viewer2010

在VS10中有一种方法可以保持SizeToReportContent = true并强制使用垂直滚动条吗?我有一个DDL,允许用户选择一个报告,为ReportViewer设置DataSource。 SizeToReportContent似乎是动态控制报表宽度以与ReportViewer宽度对齐的唯一方法。该页面包含一个高度小于报告的显示区域。如果ReportViewer具有垂直滚动条,则报告将满足显示区域约束。

我已经尝试了各种样式格式和大小更改组合到.rdlc,而在SizeToReportContent = true时没有强制滚动条的运气。

是否覆盖了ReportViewer的宽度和高度属性,但是.rdlc的属性是什么?

该报告正在本地处理,但我认为这不会产生影响。

TIA!

1 个答案:

答案 0 :(得分:0)

我希望这有助于某人...

强制ReportViewer生成所需的页面尺寸。

设置SizeToReport = false。将每个报告的所需宽度附加到以“|”分隔的.rdlc值的名称。在运行报告方法中,拆分所选值以获取.rdlc名称及其宽度。这意味着使用报告名称物理确定要硬编码的每个报告的宽度 - [弱!]。

代码:

报告中的

ddl .ascx [实际上是从数据库中填充的,但我想显示数据]

<asp:DropDownList ID="reportDropDownList" runat="server" AutoPostBack="True" OnSelectedIndexChanged="RunReport">
    <asp:ListItem Selected="True" Value="0">-- Select Report --</asp:ListItem>
    <asp:ListItem Value="RVSum.rdlc|504" >RV Purchased Sum</asp:ListItem>
    <asp:ListItem Value="ZeroPricePurchasesView.rdlc|550">Zero Price Purchases</asp:ListItem>
    ...
</asp:DropDownList>

运行报告方法:

protected void RunReport(object sender, EventArgs e)
{
    ObjectDataSource source = new ObjectDataSource("WC.DataAccess.DAO.ReportsDAO", "GetAllReports");
    string path = "RDLC" + "\\";
    string ddlValue = "";


    if (reportDropDownList.SelectedIndex != 0)
    {
        ddlValue = reportDropDownList.SelectedValue.ToString();
        string[] ddlSplit = ddlValue.Split('|');  //split ddl selected value
        path = path + ddlSplit[0];  //.rdlc name
        reportViewer.LocalReport.DataSources.Clear();
        reportViewer.LocalReport.ReportPath = path;
        reportViewer.LocalReport.DataSources.Add(new ReportDataSource("DataSet1", source));

        reportViewer.AsyncRendering = false;
        reportViewer.SizeToReportContent = false;
        reportViewer.ShowZoomControl = false;
        reportViewer.Height = 400;  // default value but exactly what is needed

        reportViewer.Width = Convert.ToInt32(ddlSplit[1]);  // desired report width
        reportViewer.DataBind();

    }
    else  /* default clear viewer */
    {
        reportDropDownList.SelectedIndex = 0;
        reportViewer.LocalReport.DataSources.Clear();
        reportViewer.Reset();
    }
}

我不喜欢这种类型的编程,但在MS提供更好的报表查看器之前,这样做。

我仍然对一些建议感兴趣 - 现在继续......