自SQL Server 2005发布之后,我们开发报表项目又多了一种选择:Reporting Services。
因为工作的原因,较早就接触到使用Reporting Services技术开发报表项目,它可以在SQL Server 2005/2008中使用。SQL Server 2000也有Reporting Services,使用的不多。即使没有购买SQL Server 2005的License,也可以借助于这项技术,使用简单轻便的客户端报表(RDLC)。

最近被朋友问到,如何在Reporting Services中实现多国语言。经过一番探索,找到一个有效的方案。
最简单的办法,就是为每一种语言制作相同的报表文件,只是把里面的Label全部换成该语言的文字。比如,为了制作中文和英语两种语种的报表,建立两个报表文件, Customer.rdl和Customer.zh-cn.rdl.
在报表呈现的客户端,根据用户的语言偏号,选择呈现不同的报表。这种方法简单可行,但是会引起重复。修改一个报表的格式,同时也必须修改另一个报表的格式,维护起来不方便。

下面介绍另外一种方法,使用一个文件来制作不多语种的报表。
先打开BIDS ,新建Reporting Services项目,添加报表。

制作报表涉及到的技术不复杂,我们把目标集中在如何实现多国语言。
这个报表读取SQL Server 的Northwind数据库的Customer表,使用Table呈现在报表中。

然后设计报表的列,使之呈现对应的数据。
 
在这里,我设计两个地方的Label,需要根据客户端的语言偏号来呈现不同的语言字符。
一个是报表标题,Customer Report,中文是客户报表,还有一个Grand Total,用中文表达是合计
注意:Order ID, Employee ID等Label我都没有实现多国语言,情况类似。
先预览一下报表,确保报表设计没有错误
 
下面就开始讨论资源文件的开发。先给项目添加一个UIResx的Class Library项目。这里,我采用新建一个解决方案,因为SQL Server 2005的BIDS是用Visual Studio 2005,而我的电脑只安装有Visual Studio 2008。两者不能集成到一个开发环境中,而且解决方案的版本不兼容。
 
我只制作两种语言(en-us,zh-cn)的资源文件,使用StringResources2。
如果您不熟悉这个工具,请参考我的这篇文章
应用开源项目StringResourceTool2 实现.NET多国语言方案

en-us的文件内容如下

zh-cn的文件内容如下

为了在报表中引用,方便部署时放到GAC中,请给类库添加签名

这样,就做好了资源文件。再回到报表项目中来,做两个小修改
1) 先添加程序集引用,在报表-->报表属性对话框中,添加对资源文件程序集的引用

由于是静态属性,不需要添加实例变量。
2) 在显示报表名字的地方,输入=Report.UIResx.SR.OrderReport
在显示合计的地方,输入=Report.UIResx.SR.GrandTotal

这就是我们要做的全部,不需要设置报表的的Language属性,如下图,在我电脑中,没有把Language设置为User!Language也可以正常运行。

报表就制作完成,请先部署报表。打开浏览器,在报表浏览器中查看报表

如果看不到效果,要部署UIResx资源文件库,把Report.UIResx.dll和zh-cn/Report.UIResx.resources.dll拷贝到报表服务器所在的目录中。在我的电脑中,这个目录是
D:\Program Files\Microsoft SQL Server\MSSQL.2\Reporting Services\ReportServer\bin

为了更精确的控制报表的显示效果,我们再来制作一个网站,显示我们的报表
新建一个ASP.NET Web site,添加页面文件,如下图

先设计页面的布局。我把用户语言选择和报表显示放在同一个页面中。一般的,我们应该在用户登陆的地方,让用户选择语言偏号。页面布局效果如下
 
回到代码中,看看是如何引用报表的
protected void btnViewReport_Click(object sender, EventArgs e)
{
       //设置语言
       string language = ddlLanguage.SelectedValue;
       Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(language);
       Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(language);
       Title = Report.UIResx.SR.OrderReport;
       //设置报表
       ReportViewer1.ProcessingMode = Microsoft.Reporting.WebForms.ProcessingMode.Remote;
       ReportViewer1.ServerReport.ReportServerUrl = new System.Uri("http://localhost/ReportServer");
       ReportViewer1.ServerReport.ReportPath = "/Test/Order";
       ReportViewer1.ServerReport.Refresh();
}
运行网站,选择中文,效果如下

再选择英语,效果如下

写完了Reporting Services,突然很想知道在水晶报表中,是如何实现多国语言的。刚毕业的时候公司的项目比较多,那时还学会了水晶报表,可惜这几年的工作中没有用到,几乎都忘得一干二净。
今天又到了周末,祝大家周末愉快。

转载于:https://www.cnblogs.com/JamesLi2015/archive/2010/03/27/1698370.html

实现多国语言的Reporting Services项目相关推荐

  1. 使用游标正确提取SQL Server数据并将其放置在Reporting Services矩阵中

    介绍 ( Introduction ) In our last two chats, we discussed enterprises that have had financial years th ...

  2. SQL Server Reporting Services最佳做法

    介绍 ( Introduction ) In past chats, we have had a look at a myriad of different business intelligence ...

  3. sql server 监视_使用SQL Server Reporting Services进行快速,肮脏的服务器监视

    sql server 监视 介绍 (Introduction) A few month back, I found myself in a position where the client want ...

  4. 像冠军一样创建报告! Reporting Services的提示和技巧

    介绍 (Introduction) Over the past few months we have covered a lot of ground in our little "get t ...

  5. 如何使用SQL Server Reporting Services将数据格式转换为有价值的数据集

    介绍 ( Introduction ) Oft times we are forced into situations where we must clearly think outside of t ...

  6. 如何在SQL Server Reporting Services中使用表达式来创建有效的报告

    介绍 (Introduction) As many of you by now know, I am a fan of utilizing expressions within Reporting S ...

  7. sql2012 ssrs_如何使用SQL Server Reporting Services(SSRS)增强报告

    sql2012 ssrs 介绍 (Introduction) A few months ago, I was working on a few SQL Server reports for a cli ...

  8. Reporting Services 3: 报表模型项目

    由开发人员设计的报表不可能涵盖组织所有需要展示的内容,终端用户往往需要自己设计报表,但他们又面临着不了解业务数据库的结构的困难.在这种情况下,很自然地,在开发人员和终端用户之间需要有一种分工:由开发人 ...

  9. C++项目实现多国语言解决方案

    背景 在实际项目开发当中,有些需求可能会要求我们实现多种语言,这里的语言是指界面上,一般就是在客户端,特指那些老外用户使用我们的产品时,为了更好的使用客户端和上手,我们需要将语言翻译成当地的语言. 当 ...

最新文章

  1. 解读基于多传感器融合的卡尔曼滤波算法
  2. Oculus Connect 4 演讲——留住用户和建立联系(视频) | 【翻译】
  3. Progressive Web App是一个利用现代浏览器的能力来达到类似APP的用户体验的技术——不就是chrome OS吗?...
  4. C#教程4:数据类型
  5. Python Importlib模块与__import__详解
  6. JSP JavaBean
  7. 带弹出列表的EditText
  8. python函数大全pdf_python内置函数大全.pdf
  9. 最大生成树算法matlab,基于最大生成树的社团划分算法
  10. 电工电子技术实训QY-DQJ07
  11. Clark变换及比例系数2/3推导过程
  12. 115套精品简历.zip
  13. LeetCode-回文数C语言实现
  14. 图神经网络的直推式(Transductive)学习与归纳(Inductive)学习
  15. 醒了自悟系列--千年老妖---1000后的重生---重新脚踏实地
  16. python俄罗斯方块思路_python实现俄罗斯方块小游戏
  17. 【群晖Nas开启WebDAV服务,路由器映射端口,实现Win10远程映射网路驱动器】
  18. 深入解读RFM模型-实战应用干货
  19. 计算机病毒可通过光盘传播吗,光盘能传播病毒吗
  20. 黄道、黄道平面、黄赤交角、正午太阳高度

热门文章

  1. 圆方树(bzoj 2125: 最短路)
  2. bzoj 4319: cerc2008 Suffix reconstruction(构造)
  3. bzoj 1050: [HAOI2006]旅行comf(尺取+最短路)
  4. bzoj 4236: JOIOJI(map+pair)
  5. HDU 4825:Print Article(01字典树)
  6. Docker容器内不能联网的6种解决方案
  7. js中数组反向、排序reverse、sort
  8. 聚合矩阵+中心化处理
  9. 汇编语言上机考试三星题——加密的key和明文字符串
  10. RESTFULL 03 rest-framework视图