Dùng WebBrowser control để tạo báo cáo


Trong các ứng dụng WinForm, để có thể tạo báo cáo người ta thường dùng ReportViewer hay CrystalReport, tuy nhiên còn có 1 cách khác cũng khá đơn giản, cho phép bạn có thể tạo được các báo cáo phức tạp, đó là dùng WebBrowser control và đưa mã HTML và để hiển thị.


– Đầu tiên, bạn tạo một Form, rồi đưa thêm 1 WebBrowser control vào, tôi đặt tên nó là wbReportViewer, thông thường tôi hay để thuộc tính Dock của WebBrowser control này là Full. Nếu muốn bổ sung thêm một số chức năng khác như lưu nội dung báo cáo vào file thì bạn có thể đưa bổ sung thêm thanh công cụ vào Form này. – Bạn có thể xem qua và đặt một số thuộc tính cần thiết cho wbReportViewer, ví dụ tôi đặt các thuộc tính sau: * IsWebBrowserContextMenuEnabled = false: không cho phép hiển thị menu ngữ cảnh khi người dùng nhấn chuột phải vào trình duyệt. * AllowWebBrowserDrop = false: không cho thực hiện thao tác kéo thả và cửa sổ trình duyệt. * WebBrowserShortcutsEnabled = false: không cho dùng các phím tắt đối với trình duyệt. … – Khi người dùng muốn xem báo cáo, bạn sẽ sinh ra nội dung và gán vào thuộc tính DocumentText của wbReportViewer, nội dung sẽ được hiển thị trên cửa sổ giống như khi bạn xem trên Internet Explorer. Đây là ví dụ về một thủ tục mở cửa sổ báo cáo của tôi:

    Private Sub cmdOpenReport_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdOpenReport.Click
        Dim frmReport As New ReportForm
        Dim html As New StringBuilder

        html.AppendLine("<html>")
        html.AppendFormat("<body>")

        html.AppendLine(reportContent) <---- Đưa nội dung báo cáo vào đây

        html.AppendLine("<br /><hr />")
        html.Append("</body></html>")

        frmReport.wbMessage.DocumentText = html.ToString
        frmReport.ShowDialog()
    End Sub

Áp dụng định dạng Như bạn thấy, mọi việc rất đơn giản, để áp dụng định dạng cho báo cáo bạn cugnx dùng những cách giống như trong HTML thường dùng, cách ưa thích của tôi là sử dụng CSS, cách này có nhiều điểm lợi: mã HTML đơn giản hơn, file CSS nằm riêng và có thể dùng trình soạn thảo CSS của Visual Studio để chỉnh sửa, ngoài ra mọi thay đổi trong file CSS sẽ được áp dụng cho tất cả những chỗ dùng nó. Để áp dụng CSS thì bạn có thể làm như sau: – Tạo một file mới có tên Report.css, double-click lên file này để chỉnh sửa nội dung, một ví dụ về CSS như sau:

.report_header
{
font-weight: bold;
}
.report_item
{
color: blue;
}
body
{
font-size: 10pt;
font-family: verdana;
background-color: #fafad2;
}

– Vào menu Project/<Tên dự án> Properties, mục này thường nằm cuối cùng trong menu Project, trong cửa sổ này, bấm vào nút Resources, bấm tiếp vào hình tam giác bên phải nút Add Resource và chọn Add Existing File…, tìm đến file Report.css đã tạo ở trên và nhấn Open. – Quay trở lại với thủ tục cmdOpenReport_Click ở trên, giờ bạn phải chỉnh sửa lại phần header của dữ liệu HTML để nó dùng CSS trong file Report.css, mấy dòng đầu để tạo HTML giờ sẽ đổi thành:

        html.AppendLine("<html><head><style type=""text/css"">")
        html.AppendLine(My.Resources.Report)
        html.AppendLine("</style></head>")

– Việc cuối cùng là sử dụng các class CSS: html.AppendFormat(“<body>

{0}


“, “REPORT – ” & DateTime.Now.ToString(My.Application.UICulture.DateTimeFormat)) html.AppendFormat(”

{0}

“, reportContent) – Nói chung là muốn áp dụng class CSS vào chỗ nào thì đặt thuộc tính class chỉ vào đó, thủ tục cmdOpenReport_Click giờ sẽ có dạng sau:

    Private Sub cmdOpenReport_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdOpenReport.Click
        Dim frmReport As New ReportForm
        Dim html As New StringBuilder

        html.AppendLine("<html><head><style type=""text/css"">")
        html.AppendLine(My.Resources.Report)
        html.AppendLine("</style></head>")
        html.AppendFormat("<body><b><div class='report_header'>{0}</div></b><br />", "REPORT - " & DateTime.Now.ToString(My.Application.UICulture.DateTimeFormat))
        html.AppendFormat("<div class='report_item'>{0}<div>", reportContent) <---- [COLOR=green]Đưa nội dung báo cáo vào đây[/COLOR]

        html.Append("</body></html>")

        frmReport.wbMessage.DocumentText = html.ToString
        frmReport.ShowDialog()
    End Sub

OK, vậy là xong, nếu théc méc chỗ nào thì xin mời hỏi 😀

5 thoughts on “Dùng WebBrowser control để tạo báo cáo

  1. Hihi, anh oi, em cung dnag tim hieu cai nay! Nhung neu trong C# thi co khac nhieu khong a!

  2. a có thể hướng dẫn cụ thể làm báo cáo bằng webbrowser trong C# cho e với được ko? E đang làm cái này mà ko biết làm sao hết. Cảm ơn a trước nha, giúp e với

  3. Khi in ra giấy khổ A4, có phải fix cái gì không ạ, hoặc in ra khổ bất kỳ, ví dụ khổ 80mm, 76mm như các hóa đơn trong siêu thị có phải fix with, height gì không?

  4. Anh Nam cho em hỏi tạo report trong Siverlight mình làm thế nào vậy anh, em đang tìm hiểu phần này mà không biết sao hết, mong anh giúp đỡ

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s