我在C#中有一个显示表格的RDLC报告。
我正在为用户提供一个工具,以选择要在报告中显示的所需列。
因此,当报告中的列数减少时,右侧页面的一半显示为空白,因此报告的显示看起来很糟糕。
我想找到一种方法,我可以动态设置可见列的列大小。
OR
我可以更改表格位置,以便表格显示在页面中央。
到目前为止,我发现我无法编写 表达式或传递参数 来设置RDLC报告中控件的大小或位置。
我想知道是否有其他方法可以实现这一目标。
答案 0 :(得分:4)
你可以做的是在运行时更改rdlc,它只是和xml文件,所以你可以解析它并以编程方式设置表的宽度。我使用这种方法来翻译我的多语言报告,它工作正常。
此链接向您展示如何翻译报告,但此代码是一个很好的起点。我认为您可以轻松地为您的目的定制它。 Change RDLC XML
答案 1 :(得分:2)
这可能是另一种选择:
编辑:你也可以动态生成这样的“填充图像”以允许不同的宽度,例如在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");
}
}
答案 2 :(得分: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>
基本上逻辑很简单,只需增加可见列的宽度即可。但它的实现需要几行代码。
计算隐藏列宽度的总和,然后重新计算可见列的宽度
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()
。
答案 3 :(得分:0)
How To adjust each column size, Check Image
点击任意列标题,您将看到该表格的结构在桌子上方以灰色显示,从那里您可以调整列大小。请参阅附图,顶部指向“红色箭头”,这是您的表格结构,并且您可以在其中修改表格的结构。希望它有所帮助。