これが誰かに役立つことを願っています...
必要なページサイズを生成するように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がより良いレポートビューアを提供するまではこれで十分です。
私はまだいくつかの提案に興味があります-今のところ先に進みます...