![](/img/trans.png)
[英]How to set dynamically height/width of an external image in rdlc report?
[英]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
這可能是替代方法:
編輯:您還可以動態生成此類“填充圖像”以允許不同的寬度,例如在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>
邏輯基本上很簡單,只是增加可見列的寬度。 但是其實現需要幾行代碼。
計算隱藏列的寬度總和,然后重新計算可見列的寬度
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()
。
單擊任何列標題,您將看到該表的結構將在該表的上方以灰色顯示,您可以從那里調整列的大小。 請參閱附圖,頂部指向“紅色箭頭”,這是您的表格結構,並且您可以在其中修改表格的結構。 希望能幫助到你。
我找不到 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.