用户!语言与CurrentThread

时间:2015-07-02 07:38:01

标签: c# reporting-services culture rdl

为了在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");

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

有人可以告诉我"计算机的区域设置"为什么报告服务拒绝接受通过的文化?

编辑:报告中的语言是

=User!Language

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

1 个答案:

答案 0 :(得分:2)

简答

而不是FormatDateTime,您可以使用Format并指定预期的输出格式:

=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),这样只有在您想覆盖它时才会指定此设置。