如何在SSRS类库中为SSRS报表使用DataTable?自定义类表能否用于原生SSRS
当然可以!你完全能在原生SSRS报表里用上自定义类生成的DataTable,根本不用依赖VB.NET项目里的ReportViewer。下面我一步步给你拆解实现流程:
步骤1:把自定义类编译成.NET程序集(DLL)
首先得把你的Class1打包成类库DLL,这样SSRS才能识别并调用它:
- 打开Visual Studio,新建一个**类库(.NET Framework)**项目(注意要选和你的SSRS服务器兼容的.NET版本,一般选4.x系列就行)
- 把你的代码粘贴到类文件里,记得把
GetTable方法改成Public——SSRS需要访问到这个方法才能获取数据:
Public Class Class1 Public Function GetTable() As DataTable ' 创建DataTable实例 Dim table As New DataTable ' 添加带类型的列 table.Columns.Add("Dosage", GetType(Integer)) table.Columns.Add("Drug", GetType(String)) table.Columns.Add("Patient", GetType(String)) table.Columns.Add("Date", GetType(DateTime)) ' 填充数据行 table.Rows.Add(25, "Indocin", "David", DateTime.Now) table.Rows.Add(50, "Enebrel", "Sam", DateTime.Now) table.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now) table.Rows.Add(21, "Combivent", "Janet", DateTime.Now) table.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now) Return table End Function End Class
- 编译项目,在项目的
bin\Debug或bin\Release目录下就能拿到生成的DLL文件了
步骤2:让SSRS能访问这个DLL
接下来要把DLL部署到SSRS能找到的地方,分两种场景:
- 本地报表设计(用Visual Studio的SSDT):
- 把DLL复制到SSDT的安装目录,通常是
C:\Program Files (x86)\Microsoft Visual Studio\<你的VS版本>\BuildTools\Common7\IDE\PrivateAssemblies - 重启SSDT,这样报表设计器就能加载这个自定义程序集了
- 把DLL复制到SSDT的安装目录,通常是
- 部署到SSRS报表服务器:
- 把DLL复制到报表服务器的
bin目录,一般是C:\Program Files\Microsoft SQL Server Reporting Services\SSRS\ReportServer\bin - 打开报表服务器的
rsreportserver.config配置文件,找到<CodeGroups>节点,添加一段配置来赋予这个DLL全信任权限(如果你的DLL有强签名,替换对应的公钥Blob):
<CodeGroup class="UnionCodeGroup" version="1" PermissionSetName="FullTrust" Name="MyCustomDataAssembly" Description="自定义程序集提供DataTable数据"> <IMembershipCondition class="StrongNameMembershipCondition" version="1" PublicKeyBlob="你的公钥Blob内容" /> </CodeGroup>- 重启SSRS服务,让配置生效
- 把DLL复制到报表服务器的
步骤3:在报表里创建自定义数据源
现在可以在SSRS报表里配置数据源来连接你的自定义类:
- 打开报表,右键点击“数据源” -> “添加数据源”
- 数据源类型选择**“自定义”**
- 连接字符串按这个格式填写:
Assembly=<DLL名称>, Version=<版本号>, Culture=neutral, PublicKeyToken=<公钥令牌>;Class=<完整类名>
举个例子,如果你的DLL叫MyCustomData.dll,类的完整命名空间是MyCustomData.Class1,版本是1.0.0.0,没有强签名的话,连接字符串就是:Assembly=MyCustomData, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null;Class=MyCustomData.Class1 - 凭据选择“使用我的当前Windows凭据”,或者根据你的部署场景选合适的方式
步骤4:创建数据集获取DataTable数据
接下来用这个数据源创建数据集:
- 右键点击“数据集” -> “添加数据集”
- 数据源选择刚才创建的自定义数据源
- 在查询框里输入调用方法的表达式:
=Code.GetTable() - 点击“刷新字段”,SSRS会自动读取DataTable的列作为数据集字段,之后你就可以像用普通数据库数据集一样设计报表布局了
步骤5:像常规SSRS报表一样设计参数
这一步和你平时做SSRS报表完全一样:
- 右键点击“参数” -> “添加参数”,设置参数的名称、数据类型、可用值(可以从数据集取,也可以手动输入)
- 如果需要过滤数据,你有两种方式:
- 在数据集的筛选器里添加条件,用参数值过滤返回的DataTable数据
- 改造你的
GetTable方法,让它接受参数(比如Public Function GetTable(ByVal patientName As String) As DataTable),然后在数据集查询里传递参数值:=Code.GetTable(Parameters!PatientName.Value)
几个要注意的点
- 一定要保证DLL的.NET版本和SSRS服务器/设计器兼容,不然会出现加载失败的问题
- 如果你的DLL需要访问外部资源(比如数据库),要确保SSRS服务账号有对应的访问权限
- 修改DLL后,记得重新部署并重启SSRS服务,不然可能会一直加载旧版本的程序集
内容的提问来源于stack exchange,提问作者BobNoobGuy
相关产品推荐
相关产品推荐

