สร้างโปรเจ็กส์แบบ ASP.NET Core Web API
ติดตั้ง ReportViewerCore.NETCore
PM> Install-Package ReportViewerCore.NETCore -Version 15.1.15
สร้างโฟลเดอร์ Reports
Add Report ชื่อ Reports/Report0.rdlc
เพิ่ม API Controller ชื่อ Controllers/ValuesController.cs
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Microsoft.Reporting.NETCore;
namespace WebApi5.Controllers
{
[Route("[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
private readonly ILogger<ValuesController> _logger;
private IWebHostEnvironment _env;
public ValuesController(ILogger<ValuesController> logger
, IWebHostEnvironment env)
{
_logger = logger;
_env = env;
}
[HttpGet("{id}")]
public string Get(int id)
{
string rootPath;
if (!string.IsNullOrEmpty(_env.WebRootPath))
rootPath = _env.WebRootPath;
else
rootPath = _env.ContentRootPath;
_logger.LogInformation($"rootPath = {rootPath}");
LocalReport report = new LocalReport();
report.ReportPath = $"{rootPath}\\Reports\\Report0.rdlc";
byte[] pdf = report.Render("PDF");
string pdfPathOP = System.IO.Path.Combine(rootPath, "reportOut.pdf");
System.IO.File.WriteAllBytes(pdfPathOP, pdf);
return "success";
}
}
}
ลองเรียก https://localhost:44395/values/5 จะได้ไฟล์ reportOut.pdf
ตัวอย่างการส่งค่าด้วย DataSet
ให้ add | new item | dataset ชื่อ DataSetTable1
ที่หน้า design ของ DataSetTable1 สร้างตาราง DataTable1 แล้วเพิ่มคอลัมน์ title, name
DataSetTable1 dsTable1 = new DataSetTable1();
DataRow row01 = dsTable1.DataTable1.NewRow();
row01["title"] = "Mr.";
row01["name"] = "Jack";
dsTable1.DataTable1.Rows.Add(row01);
LocalReport localReport1 = new LocalReport();
localReport1.ReportPath = $"{rootPath}\\Reports\\Report1.rdlc";
localReport1.DataSources.Add(new ReportDataSource("DataSetTable1", dsTable1.DataTable1));
กรณีที่ Report มีมากกว่า 1 DataSet
ถ้าลากฟิลด์มาวางจะได้
=Fields!first_name.Value
ให้ระบุ DataSet ลงไป
=First(Fields!first_name.Value, "DataSet1")