CƠ BẢN
NÂNG CAO
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT

Tạo Report bằng ReportViewer trong C# Winforms

Trong bài viết này mình sẽ hướng dẫn các bạn cách tạo report bằng ReportViewer trong C# Winforms. Đây là chức năng thường được sử dụng trong các ứng dụng, dùng để in ra bản báo cáo hoặc in danh sách.

1. Xây dựng giao diện form report trong C# Winforms

Việc đầu tiên chúng ta cần xây dựng giao diện cho form report như hình dưới đây.

bai10 02 png

Trong đó:

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.
  • DataGridView: Hiển thị danh sách điểm với các columns STT, Mã HS, Họ Tên, Môn Học, Điểm.
  • Button "Hiển thị điểm": Khi người dùng nhấn chọn thì danh sách bảng điểm sẽ được hiển thị trên DataGridView.
  • Button "Tạo Report": Khi người dùng nhấn chọn thì report sẽ được tạo trên ReportViewer.
  • Button "Thoát": Yêu cầu người dùng xác nhận có muốn thoát hay không. Nếu chọn OK thì thoát, ngược lại thì hủy bỏ lệnh.
  • ReportViewer: Hiển thị report.

bai10 01 png

2. Tạo database và Stored Procedure trong SQL Server

Trong chương trình này mình sử dụng database StudentDB, các bạn có thể sử dụng đoạn code dưới đây để tạo database và thêm dữ liệu nhé.

CREATE DATABASE StudentDB
GO
USE [StudentDB]
GO
/****** Object:  Table [dbo].[Diem]    Script Date: 8/25/2021 1:32:20 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Diem](
	[MaHS] [int] NOT NULL,
	[MaMH] [int] NOT NULL,
	[Diem] [float] NULL,
 CONSTRAINT [PK_Diem] PRIMARY KEY CLUSTERED 
(
	[MaHS] ASC,
	[MaMH] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

Proc lấy danh sách bảng điểm với các columns STT, Mã HS, Họ Tên, Môn Học, Điểm.

ALTER proc [dbo].[SP_LayDiem]
as
begin
	select ROW_NUMBER() OVER (ORDER BY MaHS) AS STT, MaHS,Name,TenMH,Diem 
	from Student, Diem, MonHoc 
	where Student.Id = Diem.MaHS and MonHoc.MaMH = Diem.MaMH
end

3. Kết nối SQL Server và hiển thị danh sách

Tạo chuỗi kết nối ở file App.config với server và database mà mình muốn sử dụng.

<add name="conStr" connectionString="server=DESKTOP-PQMLT59\VANQUYEN;database=StudentDB;integrated security=true" />

Khai báo và sử dụng các class SqlConnection, SqlDataAdapter, DataTable. Sau đó gọi chuỗi kết nối từ file App.config bằng thuộc tính ConfigurationManager.

SqlConnection con = new SqlConnection();
SqlDataAdapter da = new SqlDataAdapter();
DataTable dt = new DataTable();
con.ConnectionString = ConfigurationManager.ConnectionStrings["conStr"].ConnectionString;

Sử dụng proc "SP_LayDiem" để lấy danh sách điểm và hiển thị vào DataGridView ở sự kiện button_click trong button "Hiển thị điểm".

private void btnHienThi_Click(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection();
    SqlDataAdapter da = new SqlDataAdapter();
    DataTable dt = new DataTable();
    con.ConnectionString = ConfigurationManager.ConnectionStrings["conStr"].ConnectionString;

    try
    {
        con.Open();
        da.SelectCommand = new SqlCommand();
        da.SelectCommand.CommandText = "SP_LayDiem";
        da.SelectCommand.CommandType = CommandType.StoredProcedure;
        da.SelectCommand.Connection = con;
        da.Fill(dt);
        dtgDSDiem.DataSource = dt;
        con.Close();

        dtgDSDiem.Columns[0].Width = 60;
        dtgDSDiem.Columns[0].HeaderText = "STT";
        dtgDSDiem.Columns[1].Width = 80;
        dtgDSDiem.Columns[1].HeaderText = "Mã HS";
        dtgDSDiem.Columns[2].Width = 150;
        dtgDSDiem.Columns[2].HeaderText = "Họ Tên";
        dtgDSDiem.Columns[3].Width = 100;
        dtgDSDiem.Columns[3].HeaderText = "Môn học";
        dtgDSDiem.Columns[4].Width = 100;
        dtgDSDiem.Columns[4].HeaderText = "Điểm";
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

Xử lý sự kiện trên button "Thoát"

Để chắc chắn người dùng muốn thoát chương trình ta sẽ hiển thị hộp thoại yêu cầu người dùng xác nhận có muốn thoát hay không. Nếu chọn OK thì thoát, ngược lại thì hủy bỏ lệnh.

private void btnThoat_Click(object sender, EventArgs e)
{
    DialogResult dg = MessageBox.Show("Bạn có chắc muốn thoát?", "Thông báo", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
    if (dg == DialogResult.OK)
    {
        Application.Exit();
    }
}

4. Tạo report bằng ReportViewer trong C# Winforms

Bây giờ mình sẽ hướng dẫn cụ thể từng bước để tạo một report bằng ReportViewer trong C# Winforms.

Bước 1: Thêm class DataSet vào project.

Click chuột phải vào tên project chọn Add -> New item

bai10 03 png

Một cửa sổ mới hiện ra, ta chọn vào mục Data -> DataSet, sau đó đặt tên cho nó rồi nhấn Add để tạo.

bai10 04 png

Bước 2: Tạo report

Chọn vào hình tam giác nhỏ bên góc phải trên ReportViewer -> Design a new report.

bai10 05 png

Một cửa sổ hiện ra, ta chọn vào Database rồi Next.

bai10 06 png

Chọn vào Dataset để sử dụng Dataset cho project rồi Next.

bai10 07 png

Tiêp tục một cửa sổ hiện ra, ta chọn vào New Connection -> sau đó làm theo thứ tự các bước như hình dưới đây.

bai10 08 png

Sau khi Next, một cửa sổ nữa hiện ra. Ta chọn vào bảng muốn lấy hoặc proc muốn lấy. Ở đây mình sẽ chọn vào proc "SP_LayDiem" đã viết ở trên để lấy danh sách bảng điểm.

bai10 09 png

Sau khi Finish, ta chọn tiếp Next để sang một cửa sổ mới. Tại đây ta sẽ chọn các trường dữ liệu mà mình muốn hiển thị trên report, bằng cách kéo thả như hình dưới.

bai10 10 png

Cứ tiếp tục chọn Next cho đến khi kết thúc, kết quả sẽ được hiện như bảng dưới là thành công.

bai10 11 png

Bước 3: Chọn report cho ReportViewer.

Việc này khá đơn giản, chỉ cần chọn vào hình tam giác nhỏ ở góc phải trên ReportViewer -> report muốn hiển thị.

bai10 12 png

Bước 4: Xử lý sự kiện trên button "Tạo Report".

Sau khi chọn report cho ReportViewer, hệ thống sẽ tự sinh ra code để hiển thị. Nhiệm vụ của ta chỉ cần copy và paste ở sự kiện button_click trên button "Tạo Report" mà thôi.

private void btnReport_Click(object sender, EventArgs e)
{
    this.SP_LayDiemTableAdapter.Fill(this.StudentDBDataSet.SP_LayDiem);
    this.reportViewer1.RefreshReport();
}

Kết quả: Khi chọn button "Hiển thị điểm" và "Tạo Report".

bai10 13 png

*Lưu ý: Việc sử dụng ReportViewer rất tiện dụng, bởi nó có các chức năng kèm theo như Print, Export,... Vì vậy hãy tận dụng hết chức năng của nó nhé.

5. Code hoàn chỉnh tạo report trong C# Winforms

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ReportStudent
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
        }
        private void btnThoat_Click(object sender, EventArgs e)
        {
            DialogResult dg = MessageBox.Show("Bạn có chắc muốn thoát?", "Thông báo", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
            if (dg == DialogResult.OK)
            {
                Application.Exit();
            }
        }
        private void btnHienThi_Click(object sender, EventArgs e)
        {
            SqlConnection con = new SqlConnection();
            SqlDataAdapter da = new SqlDataAdapter();
            DataTable dt = new DataTable();
            con.ConnectionString = ConfigurationManager.ConnectionStrings["conStr"].ConnectionString;
            try {
                con.Open();
                da.SelectCommand = new SqlCommand();
                da.SelectCommand.CommandText = "SP_LayDiem";
                da.SelectCommand.CommandType = CommandType.StoredProcedure;
                da.SelectCommand.Connection = con;
                da.Fill(dt);
                dtgDSDiem.DataSource = dt;
                con.Close();

                dtgDSDiem.Columns[0].Width = 60;
                dtgDSDiem.Columns[0].HeaderText = "STT";
                dtgDSDiem.Columns[1].Width = 80;
                dtgDSDiem.Columns[1].HeaderText = "Mã HS";
                dtgDSDiem.Columns[2].Width = 150;
                dtgDSDiem.Columns[2].HeaderText = "Họ Tên";
                dtgDSDiem.Columns[3].Width = 100;
                dtgDSDiem.Columns[3].HeaderText = "Môn học";
                dtgDSDiem.Columns[4].Width = 100;
                dtgDSDiem.Columns[4].HeaderText = "Điểm";            
            }
            catch(Exception ex) {
                MessageBox.Show(ex.Message);
            }
        }
        private void btnReport_Click(object sender, EventArgs e)
        {
            this.SP_LayDiemTableAdapter.Fill(this.StudentDBDataSet.SP_LayDiem);
            this.reportViewer1.RefreshReport();
        }
    }
}

Trên đây là cách tạo report với ReportViewer trong C# Winforms. Ngoài ra còn có nhiều cách tạo report khác nhau, các bạn có thể tìm hiểu thêm nhé. Chúc các bạn thành công !!!!

Bình luận

Cùng chuyên mục:

Cách in ra hình tam giác ký tự * trong C#

Cách in ra hình tam giác ký tự * trong C#

Trong bài viết này mình sẽ hướng dẫn các bạn cách ...

Cách tính tổng các số chẵn từ 1 đến N trong C#

Cách tính tổng các số chẵn từ 1 đến N trong C#

Trước khi đi vào viết chương trình, chúng ta cùng tìm hiểu qua số chẵn…

Cách tính tổng các số lẻ từ 1 đến N trong C#

Cách tính tổng các số lẻ từ 1 đến N trong C#

Trong bài viết này mình sẽ hướng dẫn các bạn cách tính tổng các lẻ…

Cách đếm số chữ số của một số nguyên trong C#

Cách đếm số chữ số của một số nguyên trong C#

Chúng ta cùng xem qua một số ví dụ để hiểu rõ hơn về chương…

Cách tính chu vi và diện tích hình tam giác trong C#

Cách tính chu vi và diện tích hình tam giác trong C#

Tam giác là một loại hình cơ bản trong hình học, có ba đỉnh là…

Cách tính chu vi và diện tích hình tròn trong C#

Cách tính chu vi và diện tích hình tròn trong C#

Trước khi đi vào viết chương trình tính chu vi và diện ..

Cách tính chu vi và diện tích hình chữ nhật trong C#

Cách tính chu vi và diện tích hình chữ nhật trong C#

Trong bài viết này mình sẽ hướng dẫn các bạn ...

Cách xóa phần tử trùng lặp khỏi mảng trong C#

Cách xóa phần tử trùng lặp khỏi mảng trong C#

Trong bài viết này mình sẽ hướng dẫn các bạn cách loại bỏ các ..

Cách tìm tất cả các chuỗi con của chuỗi đã cho trong C#

Cách tìm tất cả các chuỗi con của chuỗi đã cho trong C#

Trong bài viết này mình sẽ hướng dẫn các bạn cách tìm ...

Cách xóa các ký tự trùng lặp khỏi chuỗi trong C#

Cách xóa các ký tự trùng lặp khỏi chuỗi trong C#

Trong bài viết này mình sẽ hướng dẫn các bạn cách xóa các ký tự…

Đếm số lần xuất hiện của ký tự trong chuỗi trong C#

Đếm số lần xuất hiện của ký tự trong chuỗi trong C#

Trong bài viết này minh sẽ hướng dẫn các bạn cách đếm ...

Cách chuyển đổi nhị phân sang thập phân trong C#

Cách chuyển đổi nhị phân sang thập phân trong C#

Trong bài viết này mình sẽ hướng dẫn các bạn cách chuyển đổi số ...

Cách chuyển đổi thập phân sang nhị phân trong C#

Cách chuyển đổi thập phân sang nhị phân trong C#

Số nhị phân là các con số có cơ số là 2. Các số nhị…

Cách tính tổng các chữ số của một số trong C#

Cách tính tổng các chữ số của một số trong C#

Trong bài viết này mình sẽ hướng dẫn các bạn ...

Cách tính giai thừa của một số trong C#

Cách tính giai thừa của một số trong C#

Trước tiên ta cần tìm hiểu xem giai thừa là gì đã nhé. Các bạn…

Cách kiểm tra số Armstrong trong C#

Cách kiểm tra số Armstrong trong C#

Trong bài viết này mình sẽ hướng dẫn các bạn cách kiểm tra số Armstrong…

Cách đảo ngược một số và một chuỗi trong C#

Cách đảo ngược một số và một chuỗi trong C#

Trong bài viết này mình sẽ hướng dẫn các bạn cách đảo ngược ..

Kiểm tra số đối xứng trong C# (Palindrome)

Kiểm tra số đối xứng trong C# (Palindrome)

Trong bài viết này mình sẽ hướng dẫn các bạn cách kiểm tra một ...

Cách kiểm tra số nguyên tố trong C#

Cách kiểm tra số nguyên tố trong C#

Chúng ta sẽ cùng nhau tìm hiểu số nguyên tố là gì và cách kiểm…

In dãy số Fibonacci trong C#

In dãy số Fibonacci trong C#

Trong bài viết này mình sẽ hướng dẫn các bạn cách in dãy số Fibonacci…

Top