Render HTML trong ReportViewer LocalReport
Nếu bạn đang lập trình tạo report trong ASP.NET (C#) thì bạn sẽ thấy theo mặc định thì việc render ra định dạng HTML (format name = HTML4.0) cho ReportViewer chỉ được thực hiện trên server, tức là bạn phải thiệt lập thuộc tính của ReportViewer là ServerReport. Trong bài viết ngày hôm nay nguyenhuutrong.com sẽ chia sẻ cùng bạn cách thiết lập để ReportViewer có thể render được HTML với chế độ LocalReport.
Trước hết Trong lớp CtrlPreview bạn hêm vào hàm sau:
private static void EnableFormat(ReportViewer viewer, string formatName)
{
const BindingFlags Flags =
BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance;
FieldInfo m_previewService =
viewer.LocalReport.GetType().GetField
(
"m_previewService",
Flags
);
MethodInfo ListRenderingExtensions
= m_previewService.FieldType.GetMethod
(
"ListRenderingExtensions",
Flags
);
object previewServiceInstance =
m_previewService.GetValue(viewer.LocalReport);
IList extensions =
ListRenderingExtensions.Invoke(previewServiceInstance, null) as IList;
PropertyInfo name =
extensions[0].GetType().GetProperty("Name", Flags);
foreach (object extension in
extensions)
{
if
(string.Compare(name.GetValue(extension, null).ToString(), formatName, true) ==
0)
{
FieldInfo m_isVisible = extension.GetType().GetField("m_isVisible",
BindingFlags.NonPublic | BindingFlags.Instance);
FieldInfo m_isExposedExternally =
extension.GetType().GetField("m_isExposedExternally", BindingFlags.NonPublic |
BindingFlags.Instance);
m_isVisible.SetValue(extension, true);
m_isExposedExternally.SetValue(extension, true);
break;
}
}
}
Sau đó trong sự kiện Page_Load của lớp này bạn gọi tới hàm trên như sau:
EnableFormat(rptViewer, "HTML4.0");
Khi đó bạn sẽ có thêm 1 mục HTML trong phần format khi preview và bạn có thể export nội dung report ra HTML thành công.

Chào mừng bạn tới Blog của tôi, nơi chúng ta sẽ cùng sẻ chia những kinh nghiệm về việc xây dựng và phát triển website với Wordpress, kiến thức về Online marketing và ký sự sau mỗi chuyến đi khám phá những miền đất mới lạ.