How to make RDLC use date format from control panel

I have some RDLC reports being generated by my app which include a date field. I want to display this date field using the user's preferred settings from the Region & Language control panel (which you would think would be the default behaviour, but apparently not).

The report textbox is formatted as a date using one of the locale-specific formats -- in the properties it appears as format D.

The Thread.CurrentThread.CurrentCulture has not been changed by my app. When I run DateTime.Now.ToString("D") in my own code (either before or after displaying a report) it behaves as I expect when I change the control panel settings:

  • set to "English (NZ)" and the default long date format, I get Friday, 16 October 2020.
  • set to "English (NZ)" and the alternate long date format, I get 16 October 2020.
  • set to "French (France)" and the default long date format, I get vendredi 16 octobre 2020.
  • set to "French (France)" and the alternate long date format, I get 16 octobre 2020.

When I view a report, however, it always displays in English (regardless of the region selected), although I do get either the default or alternate formats as expected.

Reading up on that, I discovered that apparently the default behaviour is incorrect and you have to explicitly set the report language to =User!Language to make it obey the language settings (and this was claimed to make it use the CurrentCulture) -- but after doing that, it now correctly follows the language but only ever uses the default format, never the alternate format, regardless of the control panel setting. This is an improvement, but still not correct.

How do I get the report viewer to behave like regular .NET ToString() instead, and actually use the current culture? I do not want to hard-code any particular language or format in the report.

I am currently using Microsoft.ReportingServices.ReportViewerControl.Winforms.150.1404.0.nupkg.