2

Я хочу, чтобы изменить параметр Datetime к ДДММГГГГУ format.its значения по умолчанию пользователя MMddYYYY.when будет выбрать дату от выбора даты дата должна быть дисплеем в DDMMYYYY формата. Я попробовал все выражение, какЯ хочу Datetime параметра в DDMMYYYY формате в SSRS докладом

=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")) 

, но все не работает.

+0

Пожалуйста, попробуйте помочь мне решить эту проблему. клиент заказывает мне этот формат – Rock

+0

Не думаю, что вы можете указать формат параметра выбора даты. Я думаю, что он автоматически будет использовать формат по умолчанию, установленный на уровне сервера. –

+0

ya right Tab, но я хочу изменить этот параметр времени по умолчанию в формате ddmmyyyy. – Rock

ответ

0

Вы не можете. Самое близкое, о чем я могу думать, - установить выражение в языковом свойстве отчета на =User!Language, это будет отображаться, по крайней мере, в формате системной даты пользователей.

enter image description here

+0

спасибо energ1ser, можете ли вы рассказать мне, где я могу применить это выражение. – Rock

+0

см. Изображение, которое я добавил. – energ1ser

+0

После изменения языка также сохраняется та же проблема, дата не входит в формат DDMMYYYY в параметре datetime. – Rock

0

Вы даже не нужно, чтобы установить язык для пользователя язык!. SSRS подберет DateFormat из региональных настроек локальных пользователей.

enter image description here


Но очевидно, что вы не имеете много контроля над этим, и если ваш клиент кричит для этого формата, они могут не иметь их ПК установить с этими настройками?

удачи!

Этот отчет Belows' язык установлен на ан-а.е. (что дд/мм/год) This reports language is set to en-au (dd/mm/yyyy)

+0

Спасибо Trubs за ваш ответ, но этот 1 не работает, я следил за вашими шагами, но все еще такая же проблема существует. – Rock

+0

@trubs: И вы сообщите каждому пользователю об этом и сообщите администратору, чтобы дать пользователям это право. Лол. Ответ подобным образом плохо отражается на вашем психическом состоянии. –

1

Necromancing.
Да, вы можете - вид.
Во-первых, обратите внимание, что 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> 

Это переопределяет браузерный пользовательский язык с указанным в URL-адресе -параметр in_sprache (in_sprache должен быть параметром вашего отчета).

Теперь вы также должны переопределить context.request.userLanguages ​​для правильной работы datepicker ... вы можете сделать это, только добавив HTTP-модуль (libRequestLanguageChanger.dll) в Интернет.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 с «обычай» -Культура дата-формате, без необходимости, чтобы сообщить пользователю, чтобы изменить браузер-язык.