在 ActiveReports报表应用教程 系列文章中,我们详细讲解了如何 导出 ActiveReports 报表 的。本文将要讲解的是 WebViewer 的 ViewType 设置为 HtmlViewer 时,如何在客户端通过 Javascript 完成报表导出操作。实现客户端报表导出功能主要借助于 ActiveReports 提供的客户端 ViewerViewModel 功能。
1、创建工程及报表
首先,我们创建一个ASP.ENT 应用程序,并添加 ActiveReports 页面布局报表,这里就不详细讲解如何设计报表模板,大家可以参考 ActiveReports报表应用教程 。
2、加载报表和报表数据源
创建完报表之后,我们在 aspx 页面中添加 WebViewer 控件,并将 ViewerType 设置为 HtmlViewer,然后切换到页面的后台代码视图,添加以下代码完成加载报表和报表数据源的工作:
public partial class WebForm1 : System.Web.UI.Page
{
private string connectionstring = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=|DataDirectory|\\NWind.mdb;Persist Security Info=False;";
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GrapeCity.ActiveReports.PageReport report = new GrapeCity.ActiveReports.PageReport(new System.IO.FileInfo(Server.MapPath("Department.rdlx")));
WebViewer1.Report = report;
WebViewer1.LocateDataSource += new GrapeCity.ActiveReports.LocateDataSourceEventHandler(WebViewer1_LocateDataSource);
}
}
void WebViewer1_LocateDataSource(object sender, GrapeCity.ActiveReports.LocateDataSourceEventArgs args)
{
switch (args.Report.PageReport.Report.Description)
{
case "Department":
// 加载部门数据
int departmentid = int.Parse(args.Report.Parameters[0].Values[0].Value.ToString());
args.Data = GetDepartmentData(departmentid);
break;
case "Employee":
// 加载职员数据
int employeeid = int.Parse(args.Report.Parameters[0].Values[0].Value.ToString());
args.Data = GetEmployeeData(employeeid);
break;
default:
break;
}
}
private DataTable GetDepartmentData(int id)
{
DataTable dt = new DataTable();
using (OleDbConnection connection = new OleDbConnection(connectionstring))
{
OleDbDataAdapter adapter = new OleDbDataAdapter("select * from department where ParentID= ?;", connection);
adapter.SelectCommand.Parameters.Add(new OleDbParameter("ParentID", id));
adapter.Fill(dt);
}
return dt;
}
private DataTable GetEmployeeData(int id)
{
DataTable dt = new DataTable();
using (OleDbConnection connection = new OleDbConnection(connectionstring))
{
OleDbDataAdapter adapter = new OleDbDataAdapter("select * from Employee where DepartmentID = ?;", connection);
adapter.SelectCommand.Parameters.Add(new OleDbParameter("DepartmentID", id));
adapter.Fill(dt);
}
return dt;
}
}
3、在客户端通过 JavaScript 实现报表导出
将以下代码粘贴到 aspx 页面的<head>标签中,其中最为关键的操作是通过 GetViewModel 方法获取 ViewMode 对象,然后调用该对象的 Export 方法。Export 方法签名为 this.Export(exportType, callback, saveAsDialog, settings) ,其中 exportType可选值为 ExportType = { Pdf, Html, Word, Xls, Xml }。
<script src="http://code.jquery.com/jquery-1.9.1.min.js" type="text/javascript"></script>
<script type="text/javascript">
var viewMode;
$(document).ready(function () {
$('#WebViewer1').bind('loaded', function () {
// 获取 ViewMode 对象
viewMode = GetViewModel('WebViewer1');
});
});
// 导出 PDF 文件
function Button1_onclick() {
if (viewMode.PageLoaded()) {
viewMode.Export(ExportType.Pdf, function (uri) {
window.location = uri;
},true, {FileName:"ActiveReports报表.pdf"});
}
}
// 导出 Excel 文件
function Button2_onclick() {
if (viewMode.PageLoaded()) {
viewMode.Export(ExportType.Xls, function (uri) {
window.location = uri;
}, true, { FileName: "ActiveReports报表.xls" });
}
}
// 导出 Word 文件
function Button3_onclick() {
if (viewMode.PageLoaded()) {
viewMode.Export(ExportType.Word, function (uri) {
window.location = uri;
}, true, {FileName:"ActiveReports报表.doc"});
}
}
</script>