gpt4 book ai didi

reporting-services - 我想要 ssrs 报告中 DDMMYYYY 格式的日期时间参数

转载 作者:行者123 更新时间:2023-12-04 07:59:36 25 4
gpt4 key购买 nike

我想将 Datetime 参数更改为 DDMMYYYY 格式。其默认值为 MMddYYYY。当用户从日期选择器中选择日期时,日期应以 ddmmyyyy 格式显示。
我尝试了所有的表达方式

=Format(Parameters!DateFrom.Value, "dd/MM/yy")
=cdate(format(DateAdd("d", -61, now),"dd/MM/yyyy"))
=cdate(format(DateAdd("d", -61, now),"dd/MM/yyyy"))

但一切都不起作用。

最佳答案

死灵术。
是的,您可以 - 有点。
首先,请注意 SSRS 采用浏览器中指定语言的日期格式。

所以你可以改变浏览器的语言。
显然,您不想告诉您的用户这样做。

因此,您将一个附加参数传递到您的报告中:
我称它为 in_sprache(Sprache 在德语中的意思是语言,可能的值是“DE”、“FR”、“IT”、“EN”)。

现在您需要通过覆盖 ReportViewer.aspx 中的虚拟方法“InitializeCulture”来更改本地化过程。

您可以在中找到 ReportViewer

C:\Program Files\Microsoft SQL Server\MSRS<Version>.MSSQLSERVER
C:\Program Files\Microsoft SQL Server\MSRS<Version>.<Instance>

例如
C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER

您在此处添加(在/ReportServer/Pages/ReportViewer.aspx 的源代码中):
<script type="text/C#" runat="server">

protected override void InitializeCulture()
{
string sprache = System.Web.HttpContext.Current.Request.QueryString["in_sprache"];

if(string.IsNullOrEmpty(sprache))
sprache = "";

switch(sprache.ToLowerInvariant())
{
case "de":
sprache = "de-CH";
break;
case "fr":
sprache = "fr-CH";
break;
case "it":
sprache = "it-CH";
break;
case "en":
sprache = "en-US";
break;
default:
sprache = "";
break;
}

// System.Web.HttpContext.Current.Response.Write(sprache);
if(!String.IsNullOrEmpty(sprache))
{
System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture(sprache);
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(sprache);
}

base.InitializeCulture();
}

</script>

这将使用 url 参数 in_sprache 中指定的语言覆盖浏览器用户语言(in_sprache 必须是您报告的参数)。

现在,您还必须覆盖 context.request.userLanguages 以使 datepicker 正常工作......您只能通过将 HTTP 模块 (libRequestLanguageChanger.dll) 添加到 ReportServer 的 web.config 中来做到这一点
  <system.web>
[...]
<httpModules>
[...]
<add name="RequestLanguageChanger" type="libRequestLanguageChanger.RequestLanguageChanger, libRequestLanguageChanger" />

</httpModules>
[...]
</system.web>

.
(需要将信任级别从 rosetta 更改为“Full”,除非您能弄清楚如何更改 rosetta-policy 以允许此 http 模块)。

由于我们还可以覆盖 HTTP 模块中的 InitializeCulture,因此您实际上不必将 runat="server"脚本添加到 ReportViewer.aspx。
namespace libRequestLanguageChanger
{


public class RequestLanguageChanger : System.Web.IHttpModule
{


void System.Web.IHttpModule.Dispose()
{
// throw new NotImplementedException();
}


void System.Web.IHttpModule.Init(System.Web.HttpApplication context)
{
// https://stackoverflow.com/questions/441421/httpmodule-event-execution-order
context.BeginRequest += new System.EventHandler(context_BeginRequest);
}


void context_BeginRequest(object sender, System.EventArgs e)
{
System.Web.HttpApplication application = sender as System.Web.HttpApplication;
System.Web.HttpContext context = application.Context;

if (context.Request != null)
{
// string language = context.Request.Headers["Accept-Language"];
string language = null;
// string url = context.Request.RawUrl;
// string referrer = null;


if (context.Request.UrlReferrer != null)
{
// referrer = context.Request.UrlReferrer.OriginalString;

string queryString = context.Request.UrlReferrer.Query;
System.Collections.Specialized.NameValueCollection queryStrings = System.Web.HttpUtility.ParseQueryString(queryString);
language = queryStrings["in_sprache"];
}

if(context.Request.QueryString["in_sprache"] != null)
language = context.Request.QueryString["in_sprache"];

if (!string.IsNullOrEmpty(language))
{
language = language.ToLowerInvariant();

switch (language)
{
case "de":
language = "de-CH";
break;
case "fr":
language = "fr-CH";
break;
case "it":
language = "it-CH";
break;
case "en":
language = "en-US";
break;
default:
language = "";
break;
}

} // End if (!string.IsNullOrEmpty(sprache))

// SQL.Log(url, referrer, sprache);


// Simulate Browser-Language = in_sprache
if (!string.IsNullOrEmpty(language))
{
// context.Request.Headers["Accept-Language"] = language;

System.Globalization.CultureInfo culture = new System.Globalization.CultureInfo(language);
System.Threading.Thread.CurrentThread.CurrentCulture = culture;
System.Threading.Thread.CurrentThread.CurrentUICulture = culture;

if (context.Request.UserLanguages != null)
{

// System.Globalization.CultureInfo culture = new System.Globalization.CultureInfo(context.Request.UserLanguages[0]);
for (int i = 0; i < context.Request.UserLanguages.Length; ++i)
{
// context.Request.UserLanguages[i] = "en-US";
context.Request.UserLanguages[i] = language;
} // Next i

} // End if (context.Request.UserLanguages != null)

} // End if (!string.IsNullOrEmpty(language))

} // End if (context.Request != null)


} // End Sub context_BeginRequest


} // End Class


} // End Namespace

有了“自定义”文化日期格式的 ReportServer,无需告诉用户更改浏览器语言。

关于reporting-services - 我想要 ssrs 报告中 DDMMYYYY 格式的日期时间参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29775170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com