asp.net C# webform show report without reportviewer

asp.net C# webform show report without reportviewer

目前我想生成报告而不在报告查看器中显示。我在网上搜索解决方案,但只能找到 MVC 方法。我无法将其转换为正常的网络表单行为。

 public ActionResult Report(string id)
        {
            LocalReport lr = new LocalReport();
            string path = Path.Combine(Server.MapPath("~/Report"), "ReportStateArea.rdlc");
            if (System.IO.File.Exists(path))
            {
                lr.ReportPath = path;
            }
            else
            {
                return View("Index");
            }
            List<StateArea> cm = new List<StateArea>();
            using (PopulationEntities dc = new PopulationEntities())
            {
                cm = dc.StateAreas.ToList();
            }
            ReportDataSource rd = new ReportDataSource("MyDataset", cm);
            lr.DataSources.Add(rd);
            string reportType = id;
            string mimeType;
            string encoding;
            string fileNameExtension;



            string deviceInfo =

            "<DeviceInfo>" +
            "  <OutputFormat>" + id + "</OutputFormat>" +
            "  <PageWidth>8.5in</PageWidth>" +
            "  <PageHeight>11in</PageHeight>" +
            "  <MarginTop>0.5in</MarginTop>" +
            "  <MarginLeft>1in</MarginLeft>" +
            "  <MarginRight>1in</MarginRight>" +
            "  <MarginBottom>0.5in</MarginBottom>" +
            "</DeviceInfo>";

            Warning[] warnings;
            string[] streams;
            byte[] renderedBytes;

            renderedBytes = lr.Render(
                reportType,
                deviceInfo,
                out mimeType,
                out encoding,
                out fileNameExtension,
                out streams,
                out warnings);


            return File(renderedBytes, mimeType);
        }
    enter code here

这是允许用户生成不同格式报告的代码示例,例如 PDF、excel、图像。 ( http://www.dotnetawesome.com/2013/09/microsoft-report-in-mvc-4.html ).

任何人都可以通过使用 SQL select 语句而不是 LINQ ?

来帮助我或提供一个有简单教程的网站

就从 WebForms 页面 return 生成报告而言,上面的内容实际上非常接近。您希望通过当前 Page 上下文的 Response 对象 return renderedBytes 数组喜欢:

protected void ReportPrint_Click(object sender, EventArgs e)
    {
    string id = "PDF"; // get this from another control on your page
    LocalReport lr = new LocalReport();
    string path = Path.Combine(Server.MapPath("~/Report"), "ReportStateArea.rdlc");
    if (System.IO.File.Exists(path))
        {
            lr.ReportPath = path;
        }
    else
        {
            // handle error condition
        }

    List<StateArea> cm = new List<StateArea>();
    using (PopulationEntities dc = new PopulationEntities())
        {
            cm = dc.StateAreas.ToList();
        }
    ReportDataSource rd = new ReportDataSource("MyDataset", cm);
    lr.DataSources.Add(rd);
    string reportType = id;
    string mimeType;
    string encoding;
    string fileNameExtension;

    string deviceInfo =

    "<DeviceInfo>" +
    "  <OutputFormat>" + id + "</OutputFormat>" +
    "  <PageWidth>8.5in</PageWidth>" +
    "  <PageHeight>11in</PageHeight>" +
    "  <MarginTop>0.5in</MarginTop>" +
    "  <MarginLeft>1in</MarginLeft>" +
    "  <MarginRight>1in</MarginRight>" +
    "  <MarginBottom>0.5in</MarginBottom>" +
    "</DeviceInfo>";

    Warning[] warnings;
    string[] streams;
    byte[] renderedBytes;

    renderedBytes = lr.Render(
        reportType,
        deviceInfo,
        out mimeType,
        out encoding,
        out fileNameExtension,
        out streams,
        out warnings);


    Response.Clear(); // we're going to override the default page response
    Response.ContentType = mimeType;
    Response.AddHeader("content-disposition", "attachment; filename=report." + fileNameExtension);
    Response.BinaryWrite(renderedBytes);
    Response.End();
    }

这会将正常的页面响应替换为您的报告内容。

就 SQL 与 Linq 相比,ReportViewer 使用的 DataSource 对象是旧式 System.Data.DataTable 因此只需查找有关从 SQL 填充 DataTable 的信息。