2

テーブルを表示する C# の RDLC レポートがあります。

レポートに表示する必要な列を選択する機能をユーザーに提供しています。

そのため、レポートの列数を減らすと、右側のページの半分が空白になり、レポートの表示が悪くなります。

表示される列の列サイズを動的に設定できる方法を見つけたいと思います。

また

表がページの中央に表示されるように、表の位置を変更できます。

これまでのところ、式を記述したり、RDLC レポートでコントロールのサイズや場所を設定するパラメーターを渡したり できないことがわかりました。

これを達成する別の方法があるかどうか知りたいです。

4

4 に答える 4

2

これは別の方法かもしれません:

  1. 列を小さくする
  2. グループ行を追加
  3. 一番上のグループ行に、グループ内の両方の行の列幅を「プッシュ」するために使用される画像を追加します
  4. 画像のプロパティで、外部画像ソースを使用するように設定し、レポート パラメーターを使用して使用する画像を設定します。
  5. 画像で、「元のサイズを保持」を設定します

編集:このような「パディング画像」を動的に生成して、たとえばMVCでさまざまな幅を許可することもできます:

public class ImageUtilController : Controller
{
    public FileContentResult GenerateTransparentRectangle(int width, int height)
    {
        var image = new Bitmap(width, height, PixelFormat.Format32bppArgb);
        using (var g = Graphics.FromImage(image))
        {
            g.Clear(Color.Transparent);
            g.FillRectangle(new SolidBrush(Color.Transparent), 0, 0, width, height);
        }
        MemoryStream ms = new MemoryStream();
        image.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
        return File(ms.ToArray(), "image/png");
    }
}
于 2014-09-17T16:09:40.013 に答える
1

レポートの幅が維持されるように、表示されている列を拡張して除外された (非表示の) 列のスペースを埋めるには、次のような作業を行う必要があります。

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>

基本的にロジックは単純で、表示される列の幅を増やすだけです。ただし、その実装には数行のコードが必要です。

  1. 非表示の列の幅の合計を計算してから、表示されている列の幅を再計算します

        float[] resizedwidth;
        // code for recalculation goes here
    
  2. レポート xml 全体を文字列変数 'rptxml' に読み込みます

        String rptxml = System.IO.File.ReadAllText(@"D:\SO\WinFormQ\WinFormQ\Report1.rdlc");
    
  3. 上記の 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);
    
  4. 文字列変数 'rptxml' から TextReader を作成します

        TextReader tr = new StringReader(rptxml);            
    
  5. LoadReportDefinition() メソッドを使用して、変更されたレポート定義を読み込みます

        reportViewer1.LocalReport.LoadReportDefinition(tr);
    

引き続き DataSources や ReportParameters などを指定し、最後にレポートを表示します。注: TextReader を閉じることを忘れないでくださいtr.Close()

于 2016-10-10T09:36:46.837 に答える