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)