Tạo báo cáo dùng control ReportViewer | Tìm ở đây

Giới thiệu

Trong các ứng dụng với cơ sở dữ liệu ( CSDL ), việc đưa ra các báo cáo là việc làm cần thiết yếu để giúp các nhà quản trị, người sử dụng đưa ra các thống kê và in ấn khi cần, ví dụ như báo cáo lệch giá theo tuần, theo quý, hoặc báo cáo sinh viên trong một lớp, sinh viên đỗ, trượt, v.v.

Với .NET bạn có thể tạo báo cáo cho các ứng dụng với CSDL một cách dễ dàng, trong bài trước tôi đã giới thiệu bài viết tạo báo cáo sử dụng Crystal Report (CR). Crystal Report đã là một component từ khi Visual Studio ra đời năm 2012.Trong các phiên bản từ VS2008 trở về trước, bạn có thể thêm nó vào thanh Toolbox để phát triển ứng dụng của mình. CR được cung cấp bởi SAP. Từ phiên bản VS2010, SAP chưa có sản phẩm tích hợp CRvới VS2010, bạn muốn sử dụng CR cho phát triển ứng dụng của bạn, bạn chỉ có thể sử dụng bản beta của họ. Bạn có thể download và về cài đặt. Bạn có thể tham khảo thêm tại đây.

Trong bài viết này tôi trình làng cách sử dụng control ReportViewer, được tích hợp sẵn trong các phiên bản Visual Studio .

Chuẩn bị

  • Cơ sở dữ liệu và báo cáo chúng ta định xây dựng. Trong ví dụ này chúng ta sử dụng lại CSDL Quản lý bán hàng bài trước, cấu trúc bảng như sau: tblMatHang( MaSP nchar(5), TenSP nvarchar(30), NgaySX Date, NgayHH Date, DonVi nvarchar(10), DonGia Float, GhiChu nvarchar(200))
  • Yêu cầu: tạo báo cáo các sản phẩm có ngày sản xuất lớn hơn một ngày nào đó do người sử dụng nhập vào trên giao diện.

Các bước tạo báo cáo

  1. Tạo mới Project sử dụng template, ngôn ngữ C# và tạo CSDL giống như bài trước hoặc download mã nguồn bài trước rồi phát triển thêm phần báo cáo
  2. Kích chuột phải vào tên Project trong cửa sổ Solution Explorer > Add > New Item …, một cửa sổ hiện ra bạn chọn kiểu Windows Form, đặt tên phần Name: frmBaoCao
  3. Mở Form frmBaoCao, rồi tìm tới control ReportViewer trên ToolBox. Nếu bạn không nhìn thấy ToolBox, bạn có thể vào menu View > ToolBox. Rồi kéo control ReportViewer vào frmBaoCao

Kéo control ReportViewer vào Form
Nếu bạn không tìm thấy control ReportViewer thì xem cách cài đặt trong Visual Studio

  1. Thiết kế Form báo cáo như sau:
    Giao diện form báo cáo

    Phần giao diện Loại control Các thuộc tính
    Cửa sổ chính Form Name = frmBaoCao
    Text = Báo cáo sản phẩm
    (1) GroupBox Text = Điều kiện cho báo cáo
    Dock = Top
    Label Text = Ngày sản xuất lớn hơn
    DateTimePicker Name = dtpNgaySX
    Format = Short
    Button Name = btnBaoCao
    Text = &Tạo báo cáo
    (2) GroupBox Text = Hiển thị cho báo cáo
    Dock = Fill
    ReportViewer Name = rpvBaoCao
    Dock = Hiển thị báo cáo

    Sau khi bạn đã thêm ReportViewer vào Form, bạn sẽ nhìn thấy ở góc trên bên phải có một biểu tượng mũi tên màu đen, bạn kích chuột vào đó nó sẽ bật ra cửa sổ có tên ReportViewer Tasks để cho phép bạn lựa chọn một báo cáo mà bạn đã thiết kế.

    • Nếu bạn muốn hiển thị một báo cáo đã được lưu trữ ở một máy chủ bạn có thể chọn trong mục Choose Report, sau đó điền vào hai thuộc tính Report Server UrlReport Path. Report Server Url là địa chỉ trỏ tới report server, Report Path là đường dẫn đầy đủ mà report trả về.
    • Nếu bạn muốn hiển thị một báo cáo ở local, bạn có thể kích vào tuỳ chọn Design a new report để bắt đầu thiết kế report của bạn hoặc chọn một report đã tồn tại trong Project. Trong bài này chúng ta sẽ tập trung phần thiết kế báo cáo ở local.
  2. Thiết kế tạo mẫu báo cáo, đây là bước chúng ta sẽ thiết kế báo cáo hiển thị những nội dung thông tin gì ở phần thân báo cáo(Body), tiêu đề báo cáo (Header Report), phần đuôi của báo cáo (Footer Report).
    • Kích chuột phải vào tên Project ở cửa sổ Solution Explorer > Add > New Item … trong cửa sổ hiển ra bên trái chọn Reporting, sau đó bên phải chọn Report hoặc Report Wizard, đặt tên cho báo cáo ở phần Name = rptSanPham.rdlc xem hình dưới.Chọn kiểu báo cáo
    • Kích đúp vào rptSanPham.rdlc trong Solution Explorer. Bạn sẽ thấy bên góc bên trái có một cửa sổ Report Data, bạn kích vào New > DataSet… để chọn dữ liệu cho thiết kế báo cáo.Thiết kế DataSet cho Report
    • Các cửa sổ hiển thị lên, bạn chọn nguồn dữ liệu, các bảng sẽ dùng cho thiết kế báo cáo …Chọn nguồn dữ liệu
    • Sau khi chọn song nguồn dữ liêu, trong trường hợp này ta chỉ chọn bảng tblMatHangCấu hình DataSet cho Report
    • Kích chuột phải vào vùng cửa sổ làm việc của rptSanPham.rdlc, rồi chọn các đối tượng hiển thị trong phần thân báo cáo báo cáo như Table, Matrix, Chart, Image … Ngoài ra bạn cũng có thể thêm phần Page HeaderPage Footer để tạo tiêu đề và cho báo cáoChọn các đối tượng cho báo cáo
    • Giả sử phần thân báo cáo tôi sử dụng một Table để hiển thị dữ liệu dưới dạng bảng. Bên cửa sổ trái của Report Data bạn kéo các cột MaSP, TenSP, NgaySX, … vào phần Data và sau đó bạn có thể chỉnh sửa lại phần Header cho có dấu tiếng việt. Sau thiết kế tôi có kết quả như sau:Kết quả thiết kế báo cáo
    • Sau khi hoàn thành việc thiết kế báo cáo, bạn chọn vào file rptSanPham.rdlc trong cửa sổ Solution Explorer, rồi chọn vào cửa sổ Properties và thay đổi thuộc tính Copy to Output Directory = Copy if newerThay đổi copy to report
    • Quay lại Form frmBaoCao kích vào nút Tạo báo cáo để viết sự kiện Click cho nút này.

Phần code lập trình


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using Microsoft.Reporting.WinForms;

namespace QLBanHang
{
    public partial class frmBaoCao : Form
    {
        public frmBaoCao()
        {
            InitializeComponent();
        }

        private void btnBaoCao_Click(object sender, EventArgs e)
        {
            //Khai báo câu lệnh SQL
            String sql = "Select * from tblMatHang Where NgaySX >='" + dtpNgaySX.Value.ToString() + "'" ;
            SqlConnection con = new SqlConnection();
            //Truyền vào chuỗi kết nối tới cơ sở dữ liệu
            //Gọi Application.StartupPath để lấy đường dẫn tới thư mục chứa file chạy chương trình 
            con.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=" + Application.StartupPath + @"\QLBanHang.mdf;Integrated Security=True;User Instance=True";
            SqlDataAdapter adp = new SqlDataAdapter(sql, con);
            DataSet ds = new DataSet();
            adp.Fill(ds);

            //Khai báo chế độ xử lý báo cáo, trong trường hợp này lấy báo cáo ở local
            rpvBaoCao.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Local;
            //Đường dẫn báo cáo
            rpvBaoCao.LocalReport.ReportPath = "rptSanPham.rdlc";
            //Nếu có dữ liệu
            if (ds.Tables[0].Rows.Count > 0)
            {
                //Tạo nguồn dữ liệu cho báo cáo
                ReportDataSource rds = new ReportDataSource();
                rds.Name = "tblMatHang";
                rds.Value = ds.Tables[0];
                //Xóa dữ liệu của báo cáo cũ trong trường hợp người dùng thực hiện câu truy vấn khác
                rpvBaoCao.LocalReport.DataSources.Clear();
                //Add dữ liệu vào báo cáo
                rpvBaoCao.LocalReport.DataSources.Add(rds);
                //Refresh lại báo cáo
                rpvBaoCao.RefreshReport();
            }
        }
    }
}

Download mã nguồn phần báo cáo tại đây .

Chú ý: Trong một Project có nhiều Form, bạn muốn form nào chạy đầy tiên thì bạn có thể kích và file Program.cs và thay đổi tên Form muốn chạy trước ở phần Application.Run(…)

Các bài viết liên quan

Viết một bình luận