Grid++Report Web入门ASPX与MVC使用
引用附件的三个js文件

网站根目录下建立文件夹,将报表插件放在里面

由于报表文件是grf的所以需要web.config中添加下面的mime
<system.webServer>
<staticContent>
<mimeMap fileExtension=".grf" mimeType="报表模板文件" />
</staticContent>
</system.webServer>

页面
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="GridReport.Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<script src="CreateControl.js" type="text/javascript"></script>
<script src="GRUtility.js" type="text/javascript"></script>
<script src="GRInstall.js" type="text/javascript"></script>
<script type="text/javascript">
//先检查客户端是否已经安装插件
Install_InsertReport();
var Installed = Install_Detect();
if (Installed)
{
CreateReport("Report");
}
//可以在页面加载的时候加载grf文件,<body onload="window_onload()">
function window_onload()
{
Report.LoadFromURL("Barcode.grf");
}
//打印预览
function btnPreview_onclick()
{
if (!Installed)
{
alert("请先安装插件!");
return false;
}
Report.LoadFromURL("Barcode.grf");
//利用ajax参数第一个report对象第二个url,第三个回调函数
AjaxReportRun(Report, "Data.aspx?ReportType=Barcode", ReportPrintPreview);
}
function ReportPrintPreview()
{
Report.PrintPreview(true);
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<input id="btnPreview" onclick="return btnPreview_onclick()" type="button" value="打印预览" />
</div>
</form>
</body>
</html>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
//引用三个dll
using System.IO;
using System.Data;
using System.IO.Compression;
namespace GridReport
{
public partial class Data : System.Web.UI.Page
{
//以下枚举指定报表数据的格式类型
public enum ResponseDataType
{
PlainText, //报表数据为XML或JSON文本,在调试时可以查看报表数据。数据未经压缩,大数据量报表采用此种方式不合适
ZipBinary, //报表数据为XML或JSON文本经过压缩得到的二进制数据。此种方式数据量最小(约为原始数据的1/10),但用Ajax方式加载报表数据时不能为此种方式
ZipBase64, //报表数据为将 ZipBinary 方式得到的数据再进行 BASE64 编码的数据。此种方式适合用Ajax方式加载报表数据
};
public const ResponseDataType DefaultDataType = ResponseDataType.ZipBase64;
protected void Page_Load(object sender, EventArgs e)
{
string Type = Request.QueryString["ReportType"];
switch (Type)
{
case "1a":
CreateXmlData();
break;
case "Barcode":
CreateBarcodeData();
break;
}
}
protected void CreateBarcodeData()
{
DataSet ds = new DataSet();
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("cInvCode", typeof(string)));
dt.Columns.Add(new DataColumn("cInvName", typeof(string)));
dt.Columns.Add(new DataColumn("cInvStd", typeof(string)));
dt.Columns.Add(new DataColumn("cBarCode", typeof(string)));
DataRow dr = dt.NewRow();
dr["cInvCode"] = 123456789;
dr["cInvName"] = "计算机CPU";
dr["cInvStd"] = "50*60";
dr["cBarCode"] = "123456789";
DataRow dr2 = dt.NewRow();
dr2["cInvCode"] = "6943620580207";
dr2["cInvName"] = "水瓶";
dr2["cInvStd"] = "20*60";
dr2["cBarCode"] = "6943620580207";
dt.Rows.Add(dr);
dt.Rows.Add(dr2);
ds.Tables.Add(dt);
string strXml = ds.GetXml();
ResponseData(this, strXml, DefaultDataType);
}
protected void CreateXmlData()
{
DataSet ds = new DataSet();
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("CustomerID", typeof(int)));
dt.Columns.Add(new DataColumn("CompanyName", typeof(string)));
dt.Columns.Add(new DataColumn("ContactName", typeof(string)));
dt.Columns.Add(new DataColumn("ContactTitle", typeof(string)));
dt.Columns.Add(new DataColumn("Address", typeof(string)));
dt.Columns.Add(new DataColumn("City", typeof(string)));
dt.Columns.Add(new DataColumn("Region", typeof(string)));
dt.Columns.Add(new DataColumn("PostalCode", typeof(string)));
dt.Columns.Add(new DataColumn("Country", typeof(string)));
dt.Columns.Add(new DataColumn("Phone", typeof(string)));
dt.Columns.Add(new DataColumn("Fax", typeof(string)));
DataRow dr = dt.NewRow();
dr["CustomerID"] = 1;
dr["CompanyName"] = "CompanyName";
dr["ContactName"] = "ContactName";
dr["ContactTitle"] = "ContactTitle";
dr["Address"] = "Address";
dr["City"] = "City";
dr["Region"] = "Region";
dr["PostalCode"] = "PostalCode";
dr["Country"] = "Country";
dr["Phone"] = "Phone";
dr["Fax"] = "Fax";
dt.Rows.Add(dr);
ds.Tables.Add(dt);
string strXml = ds.GetXml();
ResponseData(this, strXml, DefaultDataType);//压缩文件
}
//将报表XML数据文本输出到HTTP请求此方法是官方的写法
public static void ResponseData(System.Web.UI.Page DataPage, string DataText, ResponseDataType DataType)
{
//报表XML数据的前后不能附加任何其它数据,否则XML数据将不能成功解析,所以调用ClearContent方法清理网页中前面多余的数据
DataPage.Response.ClearContent();
if (ResponseDataType.PlainText == DataType)
{
// 把xml对象发送给客户端
//DataPage.Response.ContentType = "text/xml";
DataPage.Response.Write(DataText);
}
else
{
//将string数据转换为byte[],以便进行压缩
System.Text.UTF8Encoding converter = new System.Text.UTF8Encoding();
byte[] XmlBytes = converter.GetBytes(DataText);
//在 HTTP 头信息中写入报表数据压缩信息
DataPage.Response.AppendHeader("gr_zip_type", "deflate"); //指定压缩方法
DataPage.Response.AppendHeader("gr_zip_size", XmlBytes.Length.ToString()); //指定数据的原始长度
DataPage.Response.AppendHeader("gr_zip_encode", converter.HeaderName); //指定数据的编码方式 utf-8 utf-16 ...
// 把压缩后的xml数据发送给客户端
if (ResponseDataType.ZipBinary == DataType)
{
DeflateStream compressedzipStream = new DeflateStream(DataPage.Response.OutputStream, CompressionMode.Compress, true);
compressedzipStream.Write(XmlBytes, 0, XmlBytes.Length);
compressedzipStream.Close();
}
else //ResponseDataType.ZipBase64
{
MemoryStream memStream = new MemoryStream();
DeflateStream compressedzipStream = new DeflateStream(memStream, CompressionMode.Compress, true);
compressedzipStream.Write(XmlBytes, 0, XmlBytes.Length);
compressedzipStream.Close(); //这句很重要,这样数据才能全部写入 MemoryStream
// Read bytes from the stream.
memStream.Seek(0, SeekOrigin.Begin); // Set the position to the beginning of the stream.
int count = (int)memStream.Length;
byte[] byteArray = new byte[count];
count = memStream.Read(byteArray, 0, count);
string Base64Text = Convert.ToBase64String(byteArray);
DataPage.Response.Write(Base64Text);
}
}
//报表XML数据的前后不能附加任何其它数据,否则XML数据将不能成功解析,所以调用End方法放弃网页中后面不必要的数据
DataPage.Response.End();
}
}
}
测试结果

MVC使用:结果和上面一样
页面基本和上面一样
function ReportPrintPreview() {
//Report.PrintPreview(true);//打印预览
Report.Print(true);//直接打印
}
function btnPreview_onclick() {
if (!Installed) {
alert("请先安装插件!");
return false;
}
Report.LoadFromURL("report/Barcode.grf");
//请求地址
AjaxReportRun(Report, "HelloWorld/Report", ReportPrintPreview);
}
//控制器下的方法
public ActionResult Report()
{
return Content(CreateBarcodeData());
}
protected string CreateBarcodeData()
{
DataSet ds = new DataSet();
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("cInvCode", typeof(string)));
dt.Columns.Add(new DataColumn("cInvName", typeof(string)));
dt.Columns.Add(new DataColumn("cInvStd", typeof(string)));
dt.Columns.Add(new DataColumn("cBarCode", typeof(string)));
DataRow dr = dt.NewRow();
dr["cInvCode"] = 123456789;
dr["cInvName"] = "计算机CPU";
dr["cInvStd"] = "50*60";
dr["cBarCode"] = "123456789";
DataRow dr2 = dt.NewRow();
dr2["cInvCode"] = "6943620580207";
dr2["cInvName"] = "水瓶";
dr2["cInvStd"] = "20*60";
dr2["cBarCode"] = "6943620580207";
dt.Rows.Add(dr);
dt.Rows.Add(dr2);
ds.Tables.Add(dt);
string strXml = ds.GetXml();
return strXml;
// ResponseData(this, strXml, DefaultDataType);//这里不调用官方方法直接返回xml
}

浙公网安备 33010602011771号