0

VS10では、SizeToReportContent = trueを維持し、垂直スクロールバーを強制する方法はありますか?ユーザーがレポートを選択できるようにするDDLがあります。これにより、ReportViewerのデータソースが設定されます。SizeToReportContentは、レポートの幅を動的に制御してReportViewerの幅に合わせる唯一の方法のようです。このページには、レポートよりも低い高さの表示領域が含まれています。ReportViewerに垂直スクロールバーがある場合、レポートは表示領域の制約を満たします。

SizeToReportContent = trueのときにスクロールバーを強制することなく、スタイルの書式設定と.rdlcのサイズ変更のあらゆる種類の組み合わせを試しました。

ReportViewerのwidthプロパティとheightプロパティの両方がオーバーライドされますが、.rdlcのどのプロパティからですか?

レポートはローカルで処理されていますが、それが違いを生むとは思いません。

TIA!

4

1 に答える 1

1

これが誰かに役立つことを願っています...

必要なページサイズを生成するようにReportViewerに強制するブルート。

SizeToReport=falseを設定します。「|」で区切られた.rdlc値の名前に、各レポートの目的の幅を追加します。run reportメソッドで、選択した値を分割して、.rdlc名とその幅を取得します。これは、レポート名([weak!])でハードコーディングする各レポートの幅を物理的に決定することを意味します。

コード:

レポート.ascxのddl [実際にはデータベースから入力されていますが、データを表示したかった]

<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がより良いレポートビューアを提供するまではこれで十分です。

私はまだいくつかの提案に興味があります-今のところ先に進みます...

于 2012-08-10T15:52:47.537 に答える