diff --git a/MvcReportViewer/ControlSettings.cs b/MvcReportViewer/ControlSettings.cs index 82aa07f..add7809 100644 --- a/MvcReportViewer/ControlSettings.cs +++ b/MvcReportViewer/ControlSettings.cs @@ -263,5 +263,17 @@ public class ControlSettings /// [UriParameter("_42")] public int? AsyncPostBackTimeout { get; set; } + + /// + /// Gets or sets the display name of the report. + /// + [UriParameter("_43")] + public string DisplayName { get; set; } + + /// + /// Specifies the export formats to be visible. All export formats will be visible if the value is null or empty. + /// + [UriParameter("_44")] + public ReportFormat[] VisibleExportFormats { get; set; } } } diff --git a/MvcReportViewer/ControlSettingsManager.cs b/MvcReportViewer/ControlSettingsManager.cs index 3a568ec..09b98ea 100644 --- a/MvcReportViewer/ControlSettingsManager.cs +++ b/MvcReportViewer/ControlSettingsManager.cs @@ -64,6 +64,10 @@ public IDictionary Serialize(ControlSettings settings) .ToArgb() .ToString(CultureInfo.CurrentCulture); } + else if (property.PropertyType == typeof(ReportFormat[])) + { + serializedSetting = string.Join(",", (IEnumerable) value); + } else { serializedSetting = value.ToString(); @@ -161,6 +165,18 @@ private void DeserializeValue(ControlSettings settings, PropertyInfo property, s property.SetValue(settings, mode, null); } } + else if (property.PropertyType == typeof(ReportFormat[])) + { + var hiddenFormats = new List(); + foreach (var splitValue in value.Split(new[] {","}, StringSplitOptions.RemoveEmptyEntries)) + { + ReportFormat format; + if (Enum.TryParse(splitValue, true, out format)) + hiddenFormats.Add(format); + } + + property.SetValue(settings, hiddenFormats.ToArray(), null); + } else { throw new ArgumentException( diff --git a/MvcReportViewer/ReportViewerExtensions.cs b/MvcReportViewer/ReportViewerExtensions.cs index 5225862..50d911d 100644 --- a/MvcReportViewer/ReportViewerExtensions.cs +++ b/MvcReportViewer/ReportViewerExtensions.cs @@ -1,4 +1,6 @@ using System; +using System.Linq; +using System.Reflection; using Microsoft.Reporting.WebForms; using System.Web.UI.WebControls; @@ -87,7 +89,16 @@ private static void SetupLocalProcessing(ReportViewer reportViewer, ReportViewer localReport.DataSources.Add(dataSource); } } - + + if (parameters.ControlSettings?.DisplayName != null) + { + localReport.DisplayName = parameters.ControlSettings.DisplayName; + } + + if (parameters.ControlSettings?.VisibleExportFormats != null) + { + HideRenderingExtensions(localReport, parameters.ControlSettings); + } } private static void SetupRemoteProcessing(ReportViewer reportViewer, ReportViewerParameters parameters) @@ -123,6 +134,33 @@ private static void SetupRemoteProcessing(ReportViewer reportViewer, ReportViewe { serverReport.SetParameters(parameters.ReportParameters.Values); } + + if (parameters.ControlSettings?.DisplayName != null) + { + serverReport.DisplayName = parameters.ControlSettings.DisplayName; + } + + if (parameters.ControlSettings?.VisibleExportFormats != null) + { + HideRenderingExtensions(serverReport, parameters.ControlSettings); + } + } + + private static void HideRenderingExtensions(Report report, ControlSettings controlSettings) + { + var hiddenRenderingExtensions = report.ListRenderingExtensions() + .Where(renderingExtension => + controlSettings.VisibleExportFormats.All(exportFormat => + !renderingExtension.Name.EqualsIgnoreCase(exportFormat.ToString()))); + + foreach (var renderingExtension in hiddenRenderingExtensions) + { + var isVisiblePrivateField = renderingExtension.GetType().GetField("m_isVisible", BindingFlags.Instance | BindingFlags.NonPublic); + if (isVisiblePrivateField != null) + { + isVisiblePrivateField.SetValue(renderingExtension, false); + } + } } private static void SetReportViewerSettings(ReportViewer reportViewer, ControlSettings parameters)