zoukankan      html  css  js  c++  java
  • 实现多国语言的Reporting Services项目

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

    en-us的文件内容如下
    image
    zh-cn的文件内容如下
    image
    为了在报表中引用,方便部署时放到GAC中,请给类库添加签名
    image

    这样,就做好了资源文件。再回到报表项目中来,做两个小修改
    1) 先添加程序集引用,在报表-->报表属性对话框中,添加对资源文件程序集的引用
    image
    由于是静态属性,不需要添加实例变量。
    2) 在显示报表名字的地方,输入=Report.UIResx.SR.OrderReport
    在显示合计的地方,输入=Report.UIResx.SR.GrandTotal

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

    报表就制作完成,请先部署报表。打开浏览器,在报表浏览器中查看报表
    image
    如果看不到效果,要部署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,添加页面文件,如下图
    image
    先设计页面的布局。我把用户语言选择和报表显示放在同一个页面中。一般的,我们应该在用户登陆的地方,让用户选择语言偏号。页面布局效果如下
    image 
    回到代码中,看看是如何引用报表的
    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();
    }
    运行网站,选择中文,效果如下
    image

    再选择英语,效果如下
    image 

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

  • 相关阅读:
    听说高手都用记事本写C语言代码?真的假的!
    面向监狱编程,就靠它了!日子是越来越有判头了!
    如何把安静的程序员逼成话唠!
    想要自学编程?一个B站远远不够!
    2021年,学习C++还香吗?(文末赠书)!
    JVM--分代收集理论和垃圾收集算法
    Redis面试题
    基于RT1052 Aworks 使能GPIO输入功能(六)
    基于RT1052 Aworks 使能GPIO输出功能(五)
    基于RT1052 Aworks 使能ADC功能(四)
  • 原文地址:https://www.cnblogs.com/JamesLi2015/p/1698370.html
Copyright © 2011-2022 走看看