如何在RDLC报告中动态调整表格列宽

时间:2013-12-07 13:00:28

标签: c# .net rdlc dynamic-rdlc-generation

我在C#中有一个显示表格的RDLC报告。

我正在为用户提供一个工具,以选择要在报告中显示的所需列。

因此,当报告中的列数减少时,右侧页面的一半显示为空白,因此报告的显示看起来很糟糕。

我想找到一种方法,我可以动态设置可见列的列大小。

OR

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

到目前为止,我发现我无法编写 表达式或传递参数 来设置RDLC报告中控件的大小或位置。

我想知道是否有其他方法可以实现这一目标。

4 个答案:

答案 0 :(得分:4)

你可以做的是在运行时更改rdlc,它只是和xml文件,所以你可以解析它并以编程方式设置表的宽度。我使用这种方法来翻译我的多语言报告,它工作正常。

此链接向您展示如何翻译报告,但此代码是一个很好的起点。我认为您可以轻松地为您的目的定制它。 Change RDLC XML

答案 1 :(得分:2)

这可能是另一种选择:

  1. 使列变小
  2. 添加组行
  3. 在顶部组行中,添加将用于“推送”组中两行的col宽度的图像
  4. 在图像属性上,将其设置为使用外部图像源并使用报告参数设置要使用的图像
  5. 在图像上,设置“保留原始大小”
  6. 编辑:你也可以动态生成这样的“填充图像”以允许不同的宽度,例如在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>

基本上逻辑很简单,只需增加可见列的宽度即可。但它的实现需要几行代码。

  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);
    
  6. 继续指定DataSources和ReportParameters等,最后显示报告。 注意:不要忘记关闭TextReader tr.Close()

答案 3 :(得分:0)

How To adjust each column size, Check Image

点击任意列标题,您将看到该表格的结构在桌子上方以灰色显示,从那里您可以调整列大小。请参阅附图,顶部指向“红色箭头”,这是您的表格结构,并且您可以在其中修改表格的结构。希望它有所帮助。