如何使用asp.net 4.0以编程方式从水晶报表导出数据

本文关键字:水晶 报表 数据 方式 编程 asp 何使用 net | 更新日期: 2023-09-27 18:09:45

我只想以编程方式从水晶报告导出数据。下面是我的代码:

 protected void ImageButton7_Click(object sender, ImageClickEventArgs e)
    {
        System.IO.MemoryStream oStream = new System.IO.MemoryStream();
        if (DDL_ExportOption.SelectedItem.Value != "-1")
        {
            switch (DDL_ExportOption.SelectedItem.Value.ToString())
            {
                case "1":
                    oStream = (System.IO.MemoryStream)((CrystalDecisions.CrystalReports.Engine.ReportDocument)Session[strQueryString]).ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);
                    Response.Clear();
                    Response.Buffer = true;
                    Response.ContentType = "application/pdf";
                    break;
                case "2":
                    oStream = (System.IO.MemoryStream)((CrystalDecisions.CrystalReports.Engine.ReportDocument)Session[strQueryString]).ExportToStream(CrystalDecisions.Shared.ExportFormatType.Excel);
                    Response.Clear();
                    Response.Buffer = true;
                    Response.ContentType = "application/vnd.ms-excel";
                    break;
                case "3":
                    oStream = (System.IO.MemoryStream)((CrystalDecisions.CrystalReports.Engine.ReportDocument)Session[strQueryString]).ExportToStream(CrystalDecisions.Shared.ExportFormatType.WordForWindows);
                    Response.Clear();
                    Response.Buffer = true;
                    Response.ContentType = "application/doc";
                    break;
            }
            //export format
            try
            {
                Response.BinaryWrite(oStream.ToArray());
                Response.End();
            }
            catch (Exception err)
            {
                Response.Write("< BR >");
                Response.Write(err.Message.ToString());
            }
        }
    }

但如果运气不好,这行不通。在crystal report工作中,我遇到了很多问题

如何使用asp.net 4.0以编程方式从水晶报表导出数据

尝试:

cryRpt = new ReportDocument();
cryRpt.Load(Server.MapPath(RPTName));
cryRpt.SetDataSource(DT);    
switch (DDL_ExportOption.SelectedItem.Value.ToString()) {
case 1
 cryRpt.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, true, "ExportedReport");
case 2  
cryRpt.ExportToHttpResponse(ExportFormatType.WordForWindows, Response, true, "ExportedReport");
 case 3  
ExportDataSetToExcel(DT, "ExportedReport");
}

和导出到excel的功能:

public static void ExportDataSetToExcel(DataTable ds, string filename)
 {
HttpResponse response = HttpContext.Current.Response;
response.Clear();
response.Buffer = true;
response.Charset = "";
response.ContentType = "application/vnd.ms-excel";
using (StringWriter sw = new StringWriter()) {
    using (HtmlTextWriter htw = new HtmlTextWriter(sw)) {
        DataGrid dg = new DataGrid();
        dg.DataSource = ds;
        dg.DataBind();
        dg.RenderControl(htw);
        response.Charset = "UTF-8";
        response.ContentEncoding = System.Text.Encoding.UTF8;
        response.BinaryWrite(System.Text.Encoding.UTF8.GetPreamble());
        response.Output.Write(sw.ToString());
        response.End();
    }
  }
}