User!Language 与 CurrentThread
User!Language vs CurrentThread
为了格式化 RDL 文件中的日期,我们使用以下格式:
=First(FormatDateTime(Fields!SomeDate.Value, 2))
根据这个Page,它应该采用计算机的区域设置。
问题是:如果我通过另一个服务调用 Reporting-Service 并尝试设置语言:
rs.SetExecutionParameters(MapParameters(Report.Parameters).ToArray(), "de-CH");
这会被忽略。我试图通过
覆盖 Thread-Cultures
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("de-CH");
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("de-CH");
这也被忽略了。
真正的字符串是什么:Reporting-Server 本身也有 de-CH 作为文化,但它一直使用英文日期格式。
有人可以告诉我 "Computer's Regional Settings" 是什么意思以及为什么 Reporting-Service 拒绝接受传递的文化吗?
编辑:报告中的语言是
=User!Language
一般说我想从外部传递报告语言,无论是通过 CurrentThread
还是通过参数。但是两者都被忽略了。
简答
而不是 FormatDateTime, you could use Format 并指定您期望的输出格式:
=First(Format(Fields!SomeDate.Value, "dd.MM.yyyy"))
或者将区域性包含在参数中的另一种替代方法,但在这种情况下,您将不得不阅读冗长的答案。
长答案
您对 SetExecutionParameters 的第一次尝试是设置参数的文化,这不会影响报告本身(仅影响您传递给它的参数)。
您的第二次尝试是更改客户端应用程序的区域性,这也不影响报告(仅客户端应用程序区域性)。
FormatDateTime功能通常使用计算机区域设置,但在Reporting Services中不使用。它将采用报告文化,在您的情况下是 User!Language
.
User!Language
returns 浏览报表服务器时在客户端 Web 浏览器中配置的语言。
我不确定从网络服务调用时的行为是什么(采用特定设置或默认为 en-US)。
报表语言 属性 可以是一个表达式,因此您可以向报表添加另一个文本参数,例如 ReportCulture
,并在 Properties
中使用它 => Language
:
=Parameters!ReportCulture.Value
您必须继续使用您的日期表达式:
=First(FormatDateTime(Fields!SomeDate.Value, 2))
您可以配置一个默认值(de-CH
在您的情况下),这样只有在您想要覆盖它时才会指定此设置。
为了格式化 RDL 文件中的日期,我们使用以下格式:
=First(FormatDateTime(Fields!SomeDate.Value, 2))
根据这个Page,它应该采用计算机的区域设置。
问题是:如果我通过另一个服务调用 Reporting-Service 并尝试设置语言:
rs.SetExecutionParameters(MapParameters(Report.Parameters).ToArray(), "de-CH");
这会被忽略。我试图通过
覆盖 Thread-CulturesSystem.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("de-CH");
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("de-CH");
这也被忽略了。 真正的字符串是什么:Reporting-Server 本身也有 de-CH 作为文化,但它一直使用英文日期格式。
有人可以告诉我 "Computer's Regional Settings" 是什么意思以及为什么 Reporting-Service 拒绝接受传递的文化吗?
编辑:报告中的语言是
=User!Language
一般说我想从外部传递报告语言,无论是通过 CurrentThread
还是通过参数。但是两者都被忽略了。
简答
而不是 FormatDateTime, you could use Format 并指定您期望的输出格式:
=First(Format(Fields!SomeDate.Value, "dd.MM.yyyy"))
或者将区域性包含在参数中的另一种替代方法,但在这种情况下,您将不得不阅读冗长的答案。
长答案
您对 SetExecutionParameters 的第一次尝试是设置参数的文化,这不会影响报告本身(仅影响您传递给它的参数)。
您的第二次尝试是更改客户端应用程序的区域性,这也不影响报告(仅客户端应用程序区域性)。
FormatDateTime功能通常使用计算机区域设置,但在Reporting Services中不使用。它将采用报告文化,在您的情况下是 User!Language
.
User!Language
returns 浏览报表服务器时在客户端 Web 浏览器中配置的语言。
我不确定从网络服务调用时的行为是什么(采用特定设置或默认为 en-US)。
报表语言 属性 可以是一个表达式,因此您可以向报表添加另一个文本参数,例如 ReportCulture
,并在 Properties
中使用它 => Language
:
=Parameters!ReportCulture.Value
您必须继续使用您的日期表达式:
=First(FormatDateTime(Fields!SomeDate.Value, 2))
您可以配置一个默认值(de-CH
在您的情况下),这样只有在您想要覆盖它时才会指定此设置。