レポートの幅が維持されるように、表示されている列を拡張して除外された (非表示の) 列のスペースを埋めるには、次のような作業を行う必要があります。
rdlc ファイルは xml ドキュメントです。列幅を次の xml として定義します (これは、Visual Studio 2005 を使用して作成された RDLC ファイルに固有のものであり、他のバージョンでは異なる場合があります)。以下の xml は、テーブルに 6 つの列があることを示しています。
<TableColumns>
<TableColumn>
<Width>0.5in</Width>
</TableColumn>
<TableColumn>
<Width>1.125in</Width>
</TableColumn>
<TableColumn>
<Width>1in</Width>
</TableColumn>
<TableColumn>
<Width>1in</Width>
</TableColumn>
<TableColumn>
<Width>0.5in</Width>
</TableColumn>
<TableColumn>
<Width>1.375in</Width>
</TableColumn>
</TableColumns>
基本的にロジックは単純で、表示される列の幅を増やすだけです。ただし、その実装には数行のコードが必要です。
非表示の列の幅の合計を計算してから、表示されている列の幅を再計算します
float[] resizedwidth;
// code for recalculation goes here
レポート xml 全体を文字列変数 'rptxml' に読み込みます
String rptxml = System.IO.File.ReadAllText(@"D:\SO\WinFormQ\WinFormQ\Report1.rdlc");
上記の xml セグメントを変更された xml セグメントに置き換えます
int start = rptxml.IndexOf("<TableColumns>");
int end = rptxml.IndexOf("</TableColumns>") + "</TableColumns>".Length;
String resizedcolumns = String.format(
"<TableColumns>"
+ "<TableColumn><Width>{0}in</Width></TableColumn>"
+ "<TableColumn><Width>{1}in</Width></TableColumn>"
+ "<TableColumn><Width>{2}in</Width></TableColumn>"
+ "<TableColumn><Width>{3}in</Width></TableColumn>"
+ "<TableColumn><Width>{4}in</Width></TableColumn>"
+ "<TableColumn><Width>{5}in</Width></TableColumn>"
+ "</TableColumns>"
, resizedwidth[0], resizedwidth[1], resizedwidth[2], resizedwidth[3], resizedwidth[4], resizedwidth[5]
);
rptxml = rptxml.Substring(0, start) + resizedcolumns + rptxml.Substring(end);
文字列変数 'rptxml' から TextReader を作成します
TextReader tr = new StringReader(rptxml);
LoadReportDefinition() メソッドを使用して、変更されたレポート定義を読み込みます
reportViewer1.LocalReport.LoadReportDefinition(tr);
引き続き DataSources や ReportParameters などを指定し、最後にレポートを表示します。注: TextReader を閉じることを忘れないでくださいtr.Close()
。