как я могу изменить формат в выборе даты и времени для служб Reporting. В настоящее время всегда в формате dd/MM/yyyy, системная дата & формат времени тот же. Я хочу изменить дату в формате MM/dd/yyyyИзменить формат даты и времени в подборщике даты SSRS
ответ
В вашем дизайнере формат даты определяется культурой операционной системы.
После развертывания формат даты определяется по языку браузера.
Некронирование.
Да, вы можете действительно сделать это - вид.
Во-первых, обратите внимание, что SSRS принимает формат даты с языка, указанного в вашем браузере.
Таким образом, вы можете просто изменить язык своего браузера.
Очевидно, что вы не хотите, чтобы каждый из ваших пользователей это делал (если у них есть права & навыков, чтобы сделать это в первую очередь).
Таким образом, вы передать дополнительный параметр в отчет:
Я назвал его in_sprache (Sprache означает язык на немецком языке, с возможными значениями «DE "FR", "IT", "EN")
. Теперь вам нужно изменить процесс локализации, путем переопределения виртуального метода «InitializeCulture» в ReportViewer.aspx.
вы можете найти 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>
Это будет переопределить как локализует ASP.NET, принимая значение url- параметр in_sprache (in_sprache должен быть параметром вашего отчета) вместо языка браузера-пользователя.
Сейчас, к сожалению, вы также должны переопределить context.Request.UserLanguages для DatePicker, чтобы работать должным образом ... (в противном случае вы получите сообщение об ошибке, если культура ан-США и день> 12)
вы можете сделать это только путем добавления HTTP-модуль (libRequestLanguageChanger.dll)
в web.config из ReportServer
<system.web>
[...]
<httpModules>
[...]
<add name="RequestLanguageChanger" type="libRequestLanguageChanger.RequestLanguageChanger, libRequestLanguageChanger" />
</httpModules>
[...]
</system.web>
. (Требуется изменить доверительный уровень от rosetta до «Полный», если вы не можете выяснить, как изменить политику розетки, чтобы разрешить этот http-модуль).
Поскольку мы также можем переопределить InitializeCulture в HTTP-модуле, вам действительно не нужно добавлять сценарий 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