NEWS

Subreport DevExpress - In nhiều báo cáo với khuôn mẫu định sẵn với VB.Net

Subreport DevExpress - In nhiều báo cáo với khuôn mẫu định sẵn với VB.Net
Đăng bởi: TONA Cody - Lượt xem: 20016 22:51:35, 04/08/2016C#   In bài viết

Hôm ny mình xin giới thiệu với mọi người một dạng report không mới nhưng khá là lạ, đó chính là Subreport. Với Subreport, chúng ta có thể tùy biến để có thể in nhiều biểu mẫu báo cáo với cùng một khuôn mẫu nhưng nội dung thì hoàn toàn khác nhau.
VD như bạn có một danh sách các khách mời của đám cưới và 1 mẫu thiệp hồng chói lọi, và thay vì chọn từng cái tên để in thiệp thì bạn chỉ cần nhấn 1 nút 1, việc còn lại là nhấn nút Print và bạn có thể đi ngủ. :D Mơ về thiệp hồng đi hý.
Ở đây mình sẽ làm ví dụ về phiếu QR Code, cách tạo phiếu QR Code như thế nào thì các bạn vui lòng xem lại link bên dưới
https://laptrinhvb.net/bai-viet/lap-trinh-di-dong-android/--JAVASCRIPT---Huong-dan-tao-va-doc-ma-QR-code-/71663a96a79aca4c.html

Bắt đầu thôi, trước hết ta cần một cái đatabase kiểu như thế này:

Sau đó bạn cần tạo 1 cái form để chứa thông tin danh sách này. Thật ra report này không bắt buộc phải show ra trên gridview, ở đây mình làm cho hoàn chỉnh để dễ hình dung thôi :D
subreport-devexpress-form1
 

'Hàm load dữ liệu vào grid        
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            ds = _load_data("select top 10 * from tbl_nhanvien where manv<>0")
            dgv_nhanvien.DataSource = ds.Tables(0)
            lbl_manv.DataBindings.Clear()
            lbl_manv.DataBindings.Add("Text", ds.Tables(0), "manv")
        End Sub
'Hàm thực thi khi click nút in
        Private Sub btn_rpt_sub_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btn_rpt_sub.ItemClick
            dsreport = _load_data("select top 10 * from tbl_nhanvien where manv<>0")
            int_report = 2 'chạy cái subreport
            Dim f As New frm_show_report
            f.Show()
        End Sub
'Hàm khi click phải chuột vào đầu dòng
        Private Sub InQRCodeToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles InQRCodeToolStripMenuItem.Click
            int_report = 1 'chạy report đơn
            strMaNV = lbl_manv.Text
            Dim f As New frm_show_report
            f.Show()
        End Sub

Sau đó cần một cái form có DocumentViewer để chứa nội dung report.

DocumentViewer-subreport-devexpress
 

'Hàm khi load form    
Private Sub frm_show_report_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        If int_report = 1 Then
            'chạy report đơn
            Dim rpt As New rpt_QR_nhanvien
            DocumentViewer1.PrintingSystem = rpt.PrintingSystem
            rpt.BindData()
            rpt.CreateDocument()
        ElseIf int_report = 2 Then
            'chạy Subreport
            Dim rpt As New Sub_report
            DocumentViewer1.PrintingSystem = rpt.PrintingSystem
            rpt.DataSource = dsreport
            rpt.BindData()
            rpt.CreateDocument()
        End If        
    End Sub

Và cuối cùng là Report vs SubReport để chứa cái Report đó:
Report-QR-Code
 

'Hàm để bind source cho report    
Public Sub BindData()
        Dim dt As New DataTable
        dt = _load_data("select * from tbl_nhanvien where manv='" & strMaNV & "'").Tables(0)
        lbl_thongtin.Text = "Họ tên: " & dt.Rows(0).Item("tennv").ToString & vbCrLf & "Mã NV:" & dt.Rows(0).Item("manv").ToString & vbCrLf & "Ngày sinh: " & CDate(dt.Rows(0).Item("ngaysinh").ToString).Date & vbCrLf & "Địa chỉ: " & dt.Rows(0).Item("diachi1").ToString
        barCode1.Text = strMaNV
    End Sub


SubReport
Subreport-laptrinhvb.net
Cái này các bạn tạo report như bình thường rồi kéo cái tool XrSubreport vào và để kích thước cho phù hợp với cái report kia, sau đó nhấn F7 và chép đoạn code này vào.
Mấy cái lblXXX chính là label mình dùng để chứa mã nguồn khi chạy.

 

 'ham nay de luu lai manv khi sub chay - rất quan trọng chính là đây
    Public Sub BindData()
        lbl_manv.DataBindings.Add("Text", DataSource, "manv")
    End Sub

    'hàm này chính là hàm gọi report đơn
    Private Sub XrSubreport1_BeforePrint(sender As Object, e As Printing.PrintEventArgs) Handles XrSubreport1.BeforePrint
        strMaNV = lbl_manv.Text
        Dim rpt As New rpt_QR_nhanvien
        rpt.BindData()
        XrSubreport1.ReportSource = rpt
    End Sub

Chúc các bạn thành công !

Like - Share hoặc để lại Coment để ủng hộ nhóm viết bài nhá ;)

Link source

 

 

Tags: printreport

THÔNG TIN TÁC GIẢ

BÀI VIẾT LIÊN QUAN

Subreport DevExpress - In nhiều báo cáo với khuôn mẫu định sẵn với VB.Net
Đăng bởi: TONA Cody - Lượt xem: 20016 22:51:35, 04/08/2016C#   In bài viết

CÁC BÀI CÙNG CHỦ ĐỀ

Đọc tiếp
.