65.9K
CodeProject 正在变化。 阅读更多。
Home

SQL Reporting Service 上标问题

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.57/5 (4投票s)

2008 年 1 月 14 日

CPOL

3分钟阅读

viewsIcon

60473

downloadIcon

240

SQL Reporting Services 中的上标。

引言

SQL Server Reporting Services 广泛用于生成报告或大量信件。生成的信件或报告使用 SQL Server Reporting Services 可能需要不同的样式,例如斜体、上标等,具体取决于业务需求。解决此问题的方法可能有很多,但本文中我建议的方法快速有效。

背景

通常人们对这种情况的处理方法是使用较小字体的文本框并将文本对齐到顶部。虽然这看起来是一个不错的解决方案,但在许多情况下都会失败。此解决方案对于没有动态文本与上标一起出现的情况有效。但是,考虑一下从数据库中获取动态文本的情况,那么在这种情况下,随着传入文本长度的变化,上标文本框的定位将成为一个问题,并且会扰乱报告的完整布局。因此,此解决方案将在此类情况下有所帮助。为了解决这个问题,我们将在运行时生成一个图像并将其嵌入到报告中。

例如,考虑以下文本作为报告设计器中的一行出现的情况。

{员工姓名}与 {公司名称}(上标)的覆盖范围已于 {日期} 结束


示例
aaa 与 ABC pvt Ltd "TM" 的覆盖范围已于 2008 年 10 月 1 日结束

注意:此处 TM 用双引号表示,以标识它是一个上标。

现在,在这种情况下,我们不确定员工姓名的长度,因此我们无法有效地定位上标 "TM"。这是我们在组织中生成类似报告时遇到的问题。我们尝试了很多选项,最糟糕的情况是硬编码员工的姓名。因此,迫切需要解决这个问题。因此,我们得出了这个解决方案。

解决方案

将文本传递给一个类库,该类库将从文本中生成一个图像,并将结果以字节格式返回。现在将字节分配给报告设计器中图像控件的 value 属性。

描述

下载 zip 文件后,构建一次并生成 dll。这个生成的 dll 必须放在以下位置。

1. C:\Program Files\Microsoft SQL Server\MSSQL.1\Reporting Services\ReportServer\bin
这是安装 SQL Server 的路径

2. C:\Program Files\Microsoft SQL Server\MSSQL${机器名称}QLSVR\Binn
这是安装 MSSQL 机器名称 binn 的路径

代码的使用

我们已经完成了这些步骤的一半。


现在,将以下代码添加到 Report Properties 窗口的 Code 属性中,即可完成解决方案。

Public Function getImage(ByVal empName as String, ByVal DOJ as String) As Byte()
  Dim str As System.IO.MemoryStream = New System.IO.MemoryStream
  str = obj.generateImage(EmpName,DOJ) 
  return str.ToArray()
End Function

//The Text position, Font size, font family and few other attributes are done in the dll. 
//This can be made generic by moving these attributes to the above described function.
        

需要记住的事情

完成这些操作后,我们离完成任务仅一步之遥。将以下代码添加到报告设计器中图像控件的 value 属性中。

=Code.getImage(Fields!EmployeeName.Value,Fields!DOJ.Value)

完成上述步骤后。请执行以下操作。

在 Report Properties 下的 Report 的 references 选项卡中,添加以下内容

1. System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a

2. System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

3. RunTimeImageGenerator

然后在 classes 部分为 ImageGenerator 类创建一个对象。

将 "ImageGenerator" 作为类名,将 "obj" 作为实例名

结论

这样,我们将生成带有动态文本的图像。希望这会有用。

© . All rights reserved.