2

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

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

因此,当报告中的列数减少时,右侧页面的一半出现空白,因此报告的呈现方式看起来很糟糕。

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

或者

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

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

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

4

4 回答 4

4

您可以做的是在运行时更改 rdlc,它只是一个 xml 文件,因此您可以解析它并以编程方式设置表格的宽度。我使用这种方法将我的报告翻译成多语言并且效果很好。

此链接向您展示如何翻译报告,但此代码是一个很好的起点。我认为您可以根据自己的目的轻松自定义它。更改 RDLC XML

于 2013-12-12T06:57:48.890 回答
2

这可能是另一种选择:

  1. 使列变小
  2. 添加组行
  3. 在最上面的组行中,添加将用于“推送”组中两行的列宽的图像
  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");
    }
}
于 2014-09-17T16:09:40.013 回答
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);
    

继续指定 DataSources 和 ReportParameters 等,最后显示报表。注意:不要忘记关闭 TextReader tr.Close()

于 2016-10-10T09:36:46.837 回答
-1

如何调整每列大小,检查图像

单击任何列标题,您将看到该表格的结构将在表格上方以灰色显示,您可以从那里调整列大小。请参阅附图,顶部指向“红色箭头”,这是您的表格结构,您可以在此处修改表格结构。希望能帮助到你。

于 2018-05-28T12:55:11.760 回答