我在 C# 中有一个显示表格的 RDLC 报告。
我正在为用户提供一种工具来选择要在报告中显示的所需列。
因此,当报告中的列数减少时,右侧页面的一半出现空白,因此报告的呈现方式看起来很糟糕。
我想找到一种可以动态设置可见列的列大小的方法。
或者
我可以更改表格位置,以便表格显示在页面的中心。
到目前为止,我发现我无法编写表达式或传递参数 来设置 RDLC 报告中控件的大小或位置。
我想知道是否有其他方法可以实现这一目标。
我在 C# 中有一个显示表格的 RDLC 报告。
我正在为用户提供一种工具来选择要在报告中显示的所需列。
因此,当报告中的列数减少时,右侧页面的一半出现空白,因此报告的呈现方式看起来很糟糕。
我想找到一种可以动态设置可见列的列大小的方法。
或者
我可以更改表格位置,以便表格显示在页面的中心。
到目前为止,我发现我无法编写表达式或传递参数 来设置 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()
。
单击任何列标题,您将看到该表格的结构将在表格上方以灰色显示,您可以从那里调整列大小。请参阅附图,顶部指向“红色箭头”,这是您的表格结构,您可以在此处修改表格结构。希望能帮助到你。