Sıfırdan FastReport kullanan bir asp.net mvc anlatımı

FastReport aracının asp.net mvc uygulamasında kullanımı ile ilgili bir kaç yazı yazmıştık. Gelen bazı yorumlar üzerine, en baştan böyle bir uygulama nasıl yazarız, ona bakalım.

Asp.net mvc uygulamasında rapor üretmenin temel olarak iki şekli var. Birincisi, raporu hazırlayıp, pdf veya bir başka formata dönüştürerek, son kullanıcıya döndürmek, diğeri de bir çeşit viewer, editor arayüzü sunan webreport componentini kullanmak.

İki türlüsünü de yapacağız.  Visual Studio 2015 enterprise edition (Update 3) kullanarak yapacağım örnekleri. Community sürümüde işinizi görecektir. Asp.net mvc 5 projesi üzerinde örneklerimizi gerçekleştireceğiz.

Pdf Export Örneği

Önce export ederek, son kullanıcıya pdf döndüren örneği yapalım. File -> New Project diyerek projemizi create etmeye başlıyoruz:

fastnewp

Ok dedikten sonra, gelen ekrandan Empty proje ve MVC seçeneklerini seçelim:

fastnewn

Boş bir proje oluşturduğu için, öncelikle bir HomeController sınıfı oluşturalım. Solution Explorer’dan Controllers dizinine sağ tıklayarak, add -> controller yapalım.

newcontroller

mvc5controllerempty

Add diyelim ve controllerimizin ismine HomeController diyelim:

homecontroller

Add deyince, artık controllerimizi create etmiş olduk.

Index view’ını create etmek içinde, metodun içerisine sağ tıklayınca gelen add view menüsüne tıklayalım.

addview

Add diyerek Index.cshtml dosyamızı oluşturmuş olduk.

Index.cshtml dosyamızı aşağıdaki şekilde değiştirelim.

Amacımız butona basıldığında daha önce hazırlamış olduğumuz, frx dosyamızı pdf’e dönüştürerek, son kullanıcıya döndürmek.

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<form action='@Url.Action("RaporGoster","Home")' method="post">
    <p>
        Raporu görmek için lütfen tıklayınız
    </p>
    <input type="submit" value="RaporGoster" />
</form>

HomeController tarafına geçip, RaporGoster action’unu yazmadan önce, FastReport dll’lerini referans olarak ekleyelim.

addref

HomeController.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Data;
using FastReport.Export.OoXML;
using FastReport.Export.Pdf;
using FastReport.Export.Text;
using FastReport.Web;

namespace FastreportmvcExport.Controllers
{
    public class HomeController : Controller
    {
        // GET: Home
        public ActionResult Index()
        {
            return View();
        }

        private static DataSet DataSetGetir()
        {
            var resultDataSet = new DataSet();
            using (var valueTable = new DataTable("message"))
            {
                valueTable.Columns.Add("to");
                valueTable.Columns.Add("from");
                valueTable.Columns.Add("heading");
                valueTable.Columns.Add("body");

                var ilkRow = valueTable.NewRow();
                ilkRow["to"] = "ali";
                ilkRow["from"] = "veli";
                ilkRow["heading"] = "baslik1";
                ilkRow["body"] = "ilk mesajım";

                var ikinciRow = valueTable.NewRow();
                ikinciRow["to"] = "temel";
                ikinciRow["from"] = "dursun";
                ikinciRow["heading"] = "baslik2";
                ikinciRow["body"] = "ikinci mesajım";

                valueTable.Rows.Add(ilkRow);
                valueTable.Rows.Add(ikinciRow);

                resultDataSet.Tables.Add(valueTable);

                return resultDataSet;
            }
        }

        [HttpPost]
        public ActionResult RaporGoster()
        {
            FastReport.Utils.Config.WebMode = true;

            #region dataseti manuel oluşturuyorum

            var resultDataSet = DataSetGetir();

            #endregion

            var rootPath = HttpContext.Server.MapPath("~");

            var frxFile = rootPath + @"testdata.frx";
            var pdfOutputFile = rootPath + @"testdata.pdf";
            PDFExport pdfExport;

            using (var fastReport = new FastReport.Report())
            {
                fastReport.Load(frxFile);
                fastReport.RegisterData(resultDataSet);

                if (fastReport.Prepare())
                {
                    using (pdfExport = new FastReport.Export.Pdf.PDFExport())
                    {
                        pdfExport.Export(fastReport, pdfOutputFile);
                    }
                }
            }

            return File(pdfOutputFile, "application/pdf");
        }
    }
}

Veritabanı bağlantısı kullanmadan basit bir örnek yapmak istediğim için, DataSet objesini manuel oluşturuyorum.

Şimdi uygulamamızı çalıştıralım:

indexraporgoster

RaporGoster’e tıklayarak, raporumuzu görelim. Proje dizinimizin içerisinde testdata.frx ve testdata.xml isimli iki dosya var. testdata.frx, designer ile hazırlanmış rapor dosyamız, testdata.xml’i de verikaynağı olarak  kullanıyorum.

Hatırlatma

testdatafrxvexml.zip dosyasını indirip testdata.xml ve testdata.frx dosyalarını kullanabilirsiniz. Yalnız testdata.frx dosyasında xml dosya kaynağının yolunu değiştirmeniz gerekebilir.

 

pdfrapor

WebReport (viewer, editor) kullanımı

İkinci yöntem için yine benzer şekilde yeni bir proje yapalım. Yeni proje create etmemin sebebi, ilk yöntemde yapılması gerekmeyen, web.config dosyalarında önemli değişiklikler yapmak gerekiyor.

Aynı şekilde, empty bir mvc projesi create ediyoruz. HomeController ve index.cshtml dosyalarını ekleyelim. Dll’lere referans verelim.

Index.cshtml’i değiştirelim.

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

@ViewBag.WebReport.GetHtml()

HomeController.cs:

using FastReport.Web;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace FastreportmvcWebReport.Controllers
{
    public class HomeController : Controller
    {
        private static DataSet DataSetGetir()
        {
            var resultDataSet = new DataSet();
            using (var valueTable = new DataTable("message"))
            {
                valueTable.Columns.Add("to");
                valueTable.Columns.Add("from");
                valueTable.Columns.Add("heading");
                valueTable.Columns.Add("body");

                var ilkRow = valueTable.NewRow();
                ilkRow["to"] = "ali";
                ilkRow["from"] = "veli";
                ilkRow["heading"] = "baslik1";
                ilkRow["body"] = "ilk mesajım";

                var ikinciRow = valueTable.NewRow();
                ikinciRow["to"] = "temel";
                ikinciRow["from"] = "dursun";
                ikinciRow["heading"] = "baslik2";
                ikinciRow["body"] = "ikinci mesajım";

                valueTable.Rows.Add(ilkRow);
                valueTable.Rows.Add(ikinciRow);

                resultDataSet.Tables.Add(valueTable);

                return resultDataSet;
            }
        }
        // GET: Home
        public ActionResult Index()
        {
            using (var webReport = new WebReport())
            {
                webReport.Width = 750;
                webReport.Height = 800;
                webReport.ToolbarBackgroundStyle = ToolbarBackgroundStyle.Light;
                webReport.ToolbarIconsStyle = ToolbarIconsStyle.Blue;
                webReport.ReportFile = this.Server.MapPath("~/testdata.frx");
                webReport.RegisterData(DataSetGetir());
                ViewBag.WebReport = webReport;
                return View();
            }
        }
    }
}

Bu şekilde değişikliklerimizi yapalım. Webreportun düzgün çalışması için ekstra başka şeylerde yapmak gerekiyor.

Views klasöründe bulunan web.config’e namespaces kısmına aşağıdaki itemları ekleyelim:

<add namespace="FastReport" />
<add namespace="FastReport.Web" />

Proje rootunda bulunan web.config dosyasının system.webServer kısmına handler ekleyelim. web.config’te bu bölüm yoksa, oluşturup handlers kısmına FastReportHandler ekleyelim.

<system.webServer>
  <validation validateIntegratedModeConfiguration="false"/>
  <modules runAllManagedModulesForAllRequests="true"/>
  <handlers>
    <add name="FastReportHandler" path="FastReport.Export.axd" verb="*" type="FastReport.Web.Handlers.WebExport"/>      
  </handlers>
</system.webServer>

_Layout.cshtml dosyasına iki satır ekleyelim. (@WebReportGlobals ile başlayan satırlar)

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>@ViewBag.Title - My ASP.NET Application</title>
    <link href="~/Content/Site.css" rel="stylesheet" type="text/css" />
    <link href="~/Content/bootstrap.min.css" rel="stylesheet" type="text/css" />
    <script src="~/Scripts/modernizr-2.6.2.js"></script>
    @WebReportGlobals.Scripts()
    @WebReportGlobals.Styles()
</head>
<body>
    <div class="navbar navbar-inverse navbar-fixed-top">
        <div class="container">
            <div class="navbar-header">
                <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                @Html.ActionLink("Application name", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" })
            </div>
            <div class="navbar-collapse collapse">
                <ul class="nav navbar-nav">
                </ul>
            </div>
        </div>
    </div>

    <div class="container body-content">
        @RenderBody()
        <hr />
        <footer>
            <p>&copy; @DateTime.Now.Year - My ASP.NET Application</p>
        </footer>
    </div>

    <script src="~/Scripts/jquery-1.10.2.min.js"></script>
    <script src="~/Scripts/bootstrap.min.js"></script>
</body>
</html>

Artık uygulamamızı çalıştıralım:

webreport

 

 

3 düşünce - “Sıfırdan FastReport kullanan bir asp.net mvc anlatımı”

  1. Pingback: FastReport'un Asp.net Mvc Projelerinde Kullanımı - Yazılım Denemeleri

Yorum Gönder

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Scroll to Top