【问题标题】:User!Language vs CurrentThread用户!语言与当前线程
【发布时间】:2015-07-02 07:38:00
【问题描述】:

为了格式化 RDL 文件中的日期,我们使用以下格式:

=First(FormatDateTime(Fields!SomeDate.Value, 2))

根据这个Page,应该是电脑的区域设置。

问题是:如果我通过另一个服务调用报告服务并尝试设置语言:

rs.SetExecutionParameters(MapParameters(Report.Parameters).ToArray(), "de-CH"); 

这会被忽略。我试图通过

覆盖线程文化
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("de-CH");
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("de-CH");

这也会被忽略。 真正的字符串:报告服务器本身也有 de-CH 作为文化,但它一直使用英文日期格式。

谁能告诉我“计算机的区域设置”是什么意思以及为什么报告服务拒绝采用通过的文化?

编辑:报告中的语言是

=User!Language

一般说我想从外部传递报告语言,无论是通过CurrentThread 还是通过参数。但两者都被忽略了。

【问题讨论】:

  • 报告语言属性值是多少 (Properties=> Language)?
  • 另外,您想要SomeDate 的固定文化还是通过执行/报告/服务器配置文化?
  • 我做了一个编辑回答

标签: c# reporting-services culture rdl


【解决方案1】:

简答

您可以使用Format 代替FormatDateTime 并指定您预期的输出格式:

=First(Format(Fields!SomeDate.Value, "dd.MM.yyyy"))

或者在参数中包含文化的另一种选择,但在这种情况下,您必须阅读长答案。

长答案

您对SetExecutionParameters 的第一次尝试是设置参数的文化,这不会影响报告本身(仅影响您传递给它的参数)。

您的第二次尝试是更改客户端应用程序的文化,这也不会影响报告(仅客户端应用程序文化)。

FormatDateTime 函数通常使用计算机区域设置,但不在 Reporting Services 中。它将采用报告文化,在您的情况下是User!Language

User!Language 在浏览到报表服务器时返回客户端 Web 浏览器中配置的语言。
我不确定从 Web 服务调用时的行为是什么(采用特定设置或默认为 en-US)。

报告语言属性可以是一个表达式,因此没有什么能阻止您向报告中添加另一个文本参数,例如 ReportCulture,并在 Properties 中使用它 => Language

=Parameters!ReportCulture.Value

你必须继续使用你的表达来表示日期:

=First(FormatDateTime(Fields!SomeDate.Value, 2))

您可以配置一个默认值(在您的情况下为de-CH),这样只有在您想要覆盖它时才会指定此设置。

【讨论】:

  • 非常感谢,遗憾的是,最有趣的部分是“我不确定从 Web 服务调用时的行为是什么(采用特定设置或默认为 en-US)。”,但我了解它的工作原理。
  • @MatthiasMüller - 是的,不幸的是我还没有找到任何官方信息......如果你真的想知道是否可以从网络服务中做到这一点,你仍然可以发布问题在 MSDN 论坛上,您将有更多机会从 MSFT 获得答案。
猜你喜欢
  • 1970-01-01
  • 2018-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-04
相关资源
最近更新 更多