ReportViewer(RDLC报表)实现多语言最佳方案
自已研究并推荐的多语言方案
方法简介:使用自定义代码的方式来实现,如何使用自定义代码,请参考自定义代码节
在自定义代码中,在类下面加入相应的语言包,如
并加入如下的代码,方便在报表中调用,主要调用getRString
Public Class DayReportLanguage
”’ <summary>
”’ 固定名称的字段调用
”’ </summary>
”’ <returns></returns>
”’ <remarks></remarks>
Public Shared Function getDate() As String
Return My.Resources.DayReportLanguage.Table_Title_Date
End Function
”’ <summary>
”’ 通用的名称调用,主要使用方法
”’ </summary>
”’ <param name=”pName”></param>
”’ <returns></returns>
”’ <remarks></remarks>
Public Shared Function getRString(ByVal pName As String) As String
Return My.Resources.DayReportLanguage.ResourceManager.GetString(pName, My.Resources.Culture)
End Function
End Class
首先在报表中需要引入此类
然后在报表中使用如下的语法调用
= ReportLanguage.DayReportLanguage.getRString(“Table_Title_Date”) ‘命名空间.类名.方法名称() 主要使用静态方法,如果是实例对像,需要在报表中指定
在报表中调用时不需要传递语言参数,会自动识别当前线程的语言信息
其他三种可参考的实现多语言的方案:
1.通过编写多语言的RDLC(ReportViewer所承载的报表定义文件),然后根据不同的语言编程实现加载不同语言的报表定义文件,如Report.ZH-CN.rdlc等。
【缺点:后续需要修改报表的情况下,需要同步修改多份报表定义,增加维护的难度】
2.通过把所有在Report中显示的所有标识类文本,都提出来作为参数的方式传递给报表,这样传进来的参数的值实现多语言就行了。
【缺点:增加编写报表定义和编程的一些难度,参数列表会比较冗繁,维护难度也有所增加】
3.通过修改报表定义文档内容后,再通过ReportViewer动态加载报表定义来实现多语言。
【缺点:修改报表定义是通过把RDLC当作XML文档来读取并修改相应的XMLNode节点内容,所以在性能方面有所损耗】