【问题标题】:RDLC doesn't break line when the word is too long当单词太长时,RDLC 不会换行
【发布时间】:2015-09-23 18:27:42
【问题描述】:

我有一份带有 Tablix 的 RDLC 报告。 Tablix 有一个绑定到数据集的行。该行有一个宽度为 400 像素的文本框。

如果您从 DataSet 中获得一个带有空格的长字符串,它将按预期运行并在新行中断开该字符串,从而使文本框垂直增长。当您从 DataSet 中获得一个没有空格的长字符串时,就会出现问题,该字符串在到达文本框末尾时不会中断。相反,文本框将水平增长以适应字符串。

如何断开字符串并防止文本框水平增长?


咨询后How to maintain long text inside RDLC report column ?

  • 计算字符数并不能解决问题:数据来自数据库,因此它几乎可以是任何东西。而且由于我没有使用控制台字体,因此字母的大小不会相同,因此适合空格的“@”的数量与“i”的数量不同。
  • CanGrow 属性绑定到 TextBox:因此,即使您可以选择一列并将 CanGrow 设置为 true,它也不会将 Column 本身设置为停止水平增长,它只会将所有选定的文本框的“CanGrow”属性设置为 False .
  • CanGrow 属性仅防止行垂直增长:即使您单击列。 CanGrow 属性仅影响高度。

【问题讨论】:

  • 不,CanGrow 只能垂直工作,而 System.Environment.NewLine 只是没用,因为我的数据来自数据库,我不能只是“试错”它。
  • 等等...您希望列/文本框水平增长?还是应该双向增长?还是应该根本不增长,只显示给定空间中的文本?我读它是因为你想要一个固定的宽度并让它垂直增长。您可以获取数据集,对其进行更改,然后将其添加到报告中,这应该不是问题。您可以反复试验,只需检查 400px 中有多少个“@”字符并在此处添加换行符......
  • 文本框当前水平增长。我希望文本框垂直增长。 “CanGrow”属性防止文本框垂直增长,这就是它不能解决我的问题的原因。不,反复试验无法解决,因为我的数据不仅是“@”,适合 400px 的“@”的数量远小于“i”的数量,所以计算字符是一个糟糕的解决方案.
  • 如果您仔细阅读另一篇文章中的答案,您会发现这正是您要寻找的。将文本框放在 Tablix 中,并将 column CanGrow 设置为 False 并将 row CanGrow 设置为 True。这将使文本框垂直增长。我看不出有什么问题。就您的其他评论而言,您可以更详细地描述您的问题。

标签: reportviewer rdlc line-breaks


【解决方案1】:

我自己找到了解决方案。 RDLC 报告接受 HTML 作为表达式,因此您需要做的就是:

  • 在表达式内设置一个固定宽度的 div。
  • 将 MarkupType 设置为 HTML

查看报告代码如何变化:

之前:

<Paragraphs>
    <Paragraph>
        <TextRuns>
            <TextRun>
                <Value>=Fields!TextoCliente.Value</Value>
                <Style>
                    <FontSize>8pt</FontSize>
                </Style>
            </TextRun>
        </TextRuns>
        <Style />
    </Paragraph>
</Paragraphs>

之后:

<Paragraphs>
    <Paragraph>
        <TextRuns>
            <TextRun>
                <Value>="&lt;div style='width:400px'&gt;" &amp; Fields!TextoCliente.Value &amp; "&lt;/div&gt;"</Value>
                <MarkupType>HTML</MarkupType>
                <Style>
                    <FontSize>8pt</FontSize>
                </Style>
            </TextRun>
        </TextRuns>
        <Style />
    </Paragraph>
</Paragraphs>

您可以在设计器查看器中设置表达式,以避免处理将“

【讨论】:

    【解决方案2】:

    以防万一其他人发现此问题,在可能的重复链接 (How to maintain long text inside RDLC report column ?) 中有一个新答案,该答案似乎实际上是正确的,并且比此处或此处接受的答案更简单。

    https://stackoverflow.com/a/47495098/793387

    【讨论】:

      【解决方案3】:

      我决定在答案中添加图片以帮助准确解释需要发生的事情。

      我将按照 MSDN 教程中的步骤:Change Row Height or Column Width (Report Builder and SSRS) 首先展示如何设置一个固定的高度,然后展示如何做同样的事情来设置一个固定的宽度.


      防止行自动垂直扩展

      1. 在“设计”视图中,单击 Tablix 数据区域中的任意位置以选择 它。灰色行句柄出现在 tablix 数据区域的外边框上。

      2. 单击行句柄以选择行。

      3. 在“属性”窗格中,将CanGrow 设置为False

      防止 自动展开 水平

      1. 在“设计”视图中,单击 Tablix 数据区域中的任意位置以选择 它。灰色 句柄出现在 tablix 数据区域的外边框上。

      2. 单击句柄以选择

      3. 在“属性”窗格中,将CanGrow 设置为False

      我真诚地希望这足够详细。

      【讨论】:

      • 第一次你建议的时候试过这个,没用,我不明白你为什么要坚持一个解决方案我已经说过它没有解决我的问题,我有没有拍一段我对你做的视频,你相信吗?
      • 让我解释一下:当您单击列时,它不会选择列本身,它所做的只是选择该列内的所有文本框。当您将 CanGrow 设置为 false 时,它​​不会将 Column 的 CanGrow 设置为 false,它所做的只是将所有选定的 Textboxes 的 CanGrow 设置为 false。这可以防止文本框仅垂直增长
      • 首先将 CanGrow 列设置为 False,然后仔细检查 CanGrow 行是否设置为 True,如果未设置为 True。最后,如果您再次检查 Column 属性,它应该是空的。这对我和其他遇到同样问题的人确实有效。
      • 另一个人没有说 CanGrow 解决了他的问题,可能是 LineBreak 帮助了他。我已经反复尝试过你的答案。您是否尝试使用来自数据集的字符串来执行此操作?
      • 令我困惑的是,这对您不起作用,因为它不会给我带来麻烦。也许您非常详细的问题描述还不够详细。你在什么版本的 Visual Studio 中尝试这个,你用什么框架构建?也许您应该制作一个视频来准确显示您在做什么,也许这样我就可以告诉您您做错了什么。还有第二种解决方案可用于在运行时添加断线。根据您的字体样式、大小和字符类型计算 400px 中适合多少字符,我承认这并不容易,但这是第二个非常有效的选项
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-27
      • 2022-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多