簡體   English   中英

如何在 RDLC 報告中動態調整表格列寬

[英]How to dynamically adjust table column width in RDLC report

我在 C# 中有一個 RDLC 報告,它顯示了一個表格。

我為用戶提供了一個工具來選擇要在報告中顯示的所需列。

因此,當報告中的列數減少時,右側頁面的一半顯示為空白,因此報告的呈現方式看起來很糟糕。

我想找到一種方法,可以使用該方法動態設置可見列的列大小。

或者

我可以更改表格位置,以便表格顯示在頁面中央。

to set the size or location of a control in RDLC Report.到目前為止,我發現我無法編寫來設置 RDLC 報告中控件的大小或位置。

我想知道是否有其他方法可以實現這一點。

你可以做的是在運行時更改rdlc,它只是和xml文件,所以你可以解析它並以編程方式設置表的寬度。 我使用這種方法來翻譯我的多語言報告,它工作正常。

該鏈接顯示了如何翻譯報告,但是這段代碼是一個很好的起點。 我認為您可以輕松地為您的目的定制它。 更改RDLC XML

這可能是替代方法:

  1. 使列變小
  2. 添加組行
  3. 在最上面的組行中,添加將用於“推”組中兩行的col寬度的圖像
  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");
    }
}

為了使可見列擴展並填充排除(隱藏)列的空間,以便保持報表寬度,需要進行的工作如下。

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()

如何調整每個列大小,檢查圖像

單擊任何列標題,您將看到該表的結構將在該表的上方以灰色顯示,您可以從那里調整列的大小。 請參閱附圖,頂部指向“紅色箭頭”,這是您的表格結構,並且您可以在其中修改表格的結構。 希望能幫助到你。

我找不到 Reports 本身支持的解決方案,也沒有在網上找到令人滿意的解決方案。 所以我寫了一些代碼來操作 XML,然后在報表視圖中使用它。 它重新分配隱藏列的寬度:

https://github.com/DaveyvanTilburg/RDLCDynamicColumns

正在更改的 xml 示例(可以在 github 中找到完整示例)

之前的:

<TablixColumn>
    <Width>4.20cm</Width>
</TablixColumn>
<TablixColumn>
    <Width>12.4567cm</Width>
</TablixColumn>
<TablixColumn>
    <Width>10.50cm</Width>
</TablixColumn>

之后,第二列將被隱藏,其寬度重新分布在可見列上:

<TablixColumn>
    <Width>10.428350cm</Width>
</TablixColumn>
<TablixColumn>
    <Width>0cm</Width>
</TablixColumn>
<TablixColumn>
    <Width>16.728350cm</Width>
</TablixColumn>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM