Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions MvcReportViewer/ControlSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -263,5 +263,17 @@ public class ControlSettings
/// </summary>
[UriParameter("_42")]
public int? AsyncPostBackTimeout { get; set; }

/// <summary>
/// Gets or sets the display name of the report.
/// </summary>
[UriParameter("_43")]
public string DisplayName { get; set; }

/// <summary>
/// Specifies the export formats to be visible. All export formats will be visible if the value is null or empty.
/// </summary>
[UriParameter("_44")]
public ReportFormat[] VisibleExportFormats { get; set; }
}
}
16 changes: 16 additions & 0 deletions MvcReportViewer/ControlSettingsManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,10 @@ public IDictionary<string, string> Serialize(ControlSettings settings)
.ToArgb()
.ToString(CultureInfo.CurrentCulture);
}
else if (property.PropertyType == typeof(ReportFormat[]))
{
serializedSetting = string.Join(",", (IEnumerable<ReportFormat>) value);
}
else
{
serializedSetting = value.ToString();
Expand Down Expand Up @@ -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<ReportFormat>();
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(
Expand Down
40 changes: 39 additions & 1 deletion MvcReportViewer/ReportViewerExtensions.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
using System;
using System.Linq;
using System.Reflection;
using Microsoft.Reporting.WebForms;
using System.Web.UI.WebControls;

Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down