如何在日期和時間選擇器中更改報表服務的格式。目前總是格式爲dd/MM/yyyy,系統日期&時間格式是一樣的。我想更改日期格式爲MM/dd/yyyy更改日期選擇器中的日期和時間格式SSRS
回答
在您的設計器中,日期格式取決於操作系統的文化。
一旦部署,日期格式由瀏覽器的語言確定。
Necromancing。
是的,你可以實際上這樣做 - 有點。
首先,請注意,SSRS將採用瀏覽器中指定語言的日期格式。
所以你可以改變瀏覽器的語言。
很顯然,你不想告訴每個用戶都這樣做(如果他們首先擁有這些權利&技能)。
所以你傳遞一個額外的參數到您的報告:
我把它叫做in_sprache(SPRACHE意味着在德國的語言,有可能值「DE 「FR」, 「IT」, 「EN」)
。現在,你需要改變本地化進程,通過重寫ReportViewer.aspx虛方法「InitializeCulture」。
可以在
C:\Program Files\Microsoft SQL Server\MSRS<Version>.MSSQLSERVER
C:\Program Files\Microsoft SQL Server\MSRS<Version>.<Instance>
如
發現的ReportViewerC:\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>
這將覆蓋ASP.NET如何局部化,走的是URL-的價值參數in_sprache(in_sprache必須是報表的參數)而不是瀏覽器用戶語言。
現在,不幸的是,你還必須重寫context.Request.UserLanguages的日期選擇器正常工作......(否則你會得到一個錯誤,如果文化爲en-US和天> 12)
你可以做到只通過添加HTTP模塊(libRequestLanguageChanger.dll)
成的ReportServer
<system.web>
[...]
<httpModules>
[...]
<add name="RequestLanguageChanger" type="libRequestLanguageChanger.RequestLanguageChanger, libRequestLanguageChanger" />
</httpModules>
[...]
</system.web>
web.config中。 (需要將信任級別從rosetta更改爲「Full」,除非您可以確定如何更改rosetta策略以允許此http-module)。
由於我們也可以重寫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採用「自定義」文化日期格式,而不必告訴用戶更改瀏覽器語言。
您可以從SQL表中獲取鏈接,您可以將文本{@language}
替換爲用戶的文化名(在我的案例中爲DE,FR,IT,EN,因爲這些是瑞士語言)。
SELECT
REPLACE(RE_Link, '{@language}', T_Users.USR_Language)
FROM T_Reports
LEFT JOIN T_Users ON USR_ID = @usr
-- http://localhost/Reportserver?/SomeCompany/SomeReport&rs:Command=Render&in_sprache=de
-- http://localhost/Reportserver?/SomeCompany/SomeReport&rs:Command=Render&in_sprache=fr
-- http://localhost/Reportserver?/SomeCompany/SomeReport&rs:Command=Render&in_sprache=it
-- http://localhost/Reportserver?/SomeCompany/SomeReport&rs:Command=Render&in_sprache=en
- 1. 日期和時間選擇自定義格式日期變更
- 2. 如何更改jQuery日期選擇器中的日期格式?
- 3. 更改日期選擇器的格式
- 4. 如何更改日期範圍選擇器的日期格式?
- 5. 更改日期格式jQuery的日期選擇器
- 6. 如何更改日期格式在一個jQuery日期時間選擇器
- 7. 日期時間選擇器的格式日期
- 8. 我怎麼能在日期選擇器更改日期格式
- 9. 更改日期和時間格式Android
- 10. bootstrap日期時間選擇器更改格式
- 11. 引導日期時間選擇器格式化日期
- 12. Jquery日期時間選擇器日期格式問題
- 13. 更改jQuery日期選擇器中的日期選擇其他
- 14. 更改日期選擇器
- 15. 日期時間選擇器 - 設置開始日期和時間
- 16. 日期時間選擇器
- 17. 日期時間選擇器
- 18. 日期/時間選擇器++
- 19. 如何從日期選擇器(日曆視圖)更改日期格式
- 20. 如何更改日期時間對象的日期格式?
- 21. 更改日期選擇器樣式iphone
- 22. 日期選擇器不會改變日期格式
- 23. SSRS日期格式
- 24. SSRS 2008日期時間格式問題
- 25. 更改日期時間格式
- 26. 更改日期時間格式
- 27. Javascript - 更改SQL日期時間格式
- 28. awk更改日期時間格式
- 29. 如何更改日期時間格式?
- 30. 如何更改日期/時間格式?