水晶报表中文本型长字段的等宽显示的问题解决.ASP.NET2005 C#2005
对于文本型的字段(或公式,或参数或文本框等等),如果内容较多,可以通过在字段上点右键,设置对象格式,勾选可以扩大即可进行分行显示。
不过有时候效果并不能令我们满意,比如对于一个字段:有一个字段内容为:xxxxxxx yyyyyyyyyyy zzzzzzzzzzzz
这个字段在水晶报中显示为:
xxxxxxx
yyyyyyyyyyy
zzzzzzzzzzzz
而实际上要显示为:
xxxxxxx yyyyy
yyyyyy zzzzzz
zzzzzz
因为水晶报表在换行时,优先保留了单词的完整性(或者说优先以空格、符号位置换行),所以一般不会在单词中间断开的。
这里我们可以做一个公式,对其主动换行。使用 basic 语法
Dim
i
as
number
Dim j as number
Dim s1 as string
Dim s2 as string
' 要处理的字符串
s1 = " xxxxxxx yyyyyyyyyyy zzzzzzzzzzzz "
' 每行需要的宽度
j = Length( " xxxxxxx yyyyyy " )
for i = 1 to Len (s1)
' 如果是第一行,不用换行
if i = 1 then
s2 = Mid (s1,i,j)
Else
' 不是第一行则加一个换行
s2 = s2 & chr ( 13 ) & Mid (s1,i,j)
End if
' 切换到下一个分割点
i = i + j
Next
formula = s2
Dim j as number
Dim s1 as string
Dim s2 as string
' 要处理的字符串
s1 = " xxxxxxx yyyyyyyyyyy zzzzzzzzzzzz "
' 每行需要的宽度
j = Length( " xxxxxxx yyyyyy " )
for i = 1 to Len (s1)
' 如果是第一行,不用换行
if i = 1 then
s2 = Mid (s1,i,j)
Else
' 不是第一行则加一个换行
s2 = s2 & chr ( 13 ) & Mid (s1,i,j)
End if
' 切换到下一个分割点
i = i + j
Next
formula = s2
这个对纯英文字符是可以直接用的(该公式拖到模板上后也要将其设置为可扩大),但是如果是中文或其他语种可能就要注意宽度。
比如这样一段文本:汇景大道宝德花园南区15街2座10梯201房、401房、501房;东风东路锦城花园A区2座1601房、 1701房、1801房。
明显数字和汉字的宽度是不一样的,而且数字1和数字5的显示宽度上也有差异,在处理的时候则要特别注意些。