Trong bài viết này, csharpcanban.com sẽ hướng dẫn các bạn sử dụng RDLC report của Window để tạo ra báo cáo trong WPF. Bài viết hướng dẫn theo từng bước, có mã nguồn cụ thể.
Nội dung
Giới thiệu
Các bạn khi lập trình bằng WPF, có thể sử dụng Crystal Report để tạo ra các bản báo cáo, ưu điểm của Crystal Report là đẹp, dễ sử dụng, tuy nhiên có một nhược điểm đó là cần phải cài đặt phần mềm bổ sung khi chạy ứng dụng trên máy Client, (máy khác).
Chính vì vậy csharpcanban.com sẽ hướng dẫn các bạn sử dụng RDLC report của Microsoft, nhược điểm của thư viện Report này là nó chỉ hỗ trợ cho C#, tuy nhiên ta vẫn có thể sử dụng nó trong lập trình WPF. Ưu điểm của RDLC đó là không cần cài đặt thêm phần mềm hỗ trợ, mà vẫn có thể chạy trên các máy khác, dung lượng nhỏ nhẹ, tương đối dễ sử dụng, với một dự án nhỏ thì dùng tương đối tốt.
Để sử dụng RDLC ta thực hiện theo các bước sau đây:
Các bước thực hiện
Bước 1: Thêm các thư viện RDLC vào ứng dụng
Tải thư viện ở đây
Những thư viện cần thêm trước khi bước vào tạo ứng dụng đó là
WindowsFormsIntegration.dll Microsoft.ReportViewer.WinForms.dll Microsoft.ReportViewer.Common.dll
Cách thêm thư viện như thế nào các bạn tự tìm hiểu thêm trên google nhé.
Bước 2: Tạo một ứng dụng mới đặt tên là “MonsterBusinessInc”.
Bước 3: Kéo một Button vào ứng dụng và tạo sự kiện Click cho nó
private void btnClickMe_Click(object sender, RoutedEventArgs e) { Viết sự kiện ở đây }
Bước 4: Tạo một class mới đặt tên là “Customer.cs”.
Nội dung class như sau:
namespace MonsterBusinessInc.Entities { public class Customer { public int ID { get; set; } public string Name { get; set; } public string City { get; set; } public int OrderAmount { get; set; } } }
Sau đó, nhấn F5 để chạy thử ứng dụng xem đã ok chưa.
Bước 5: Tạo tệp báo cáo
Để tạo tệp báo cáo hãy chọn Add New Item, tìm tới Report, tạo mới và đặt tên là “CustomerReport.rdlc”.
Bước 6: Tạo DataSet cho bản báo cáo này.
Nhấp chuột vào mục DataSet trên khung cửa sổ Report Data sẽ xuất hiện cửa sổ DataSet Properties. Hãy chỉnh các tham số cho phù hợp.
Đặt tên là “CustomerDataSet“. Nhấp chuột vào nốt “New” để tạo một Data Source mới
Chọn Object và nhấp nốt “Next“.
Tiếp theo hãy chọn Customer Class như hình trên, và nhấp nốt “Finish“.
Chọn các nội dung như hình trên, sau đó nhấp nốt “OK“, khi đó DataSet sẽ tự động thêm vào báo cáo Customer.rdlc. Và bạn có thể thấy báo cáo xuất hiện như sau:
Nhấp chuột phải vào khung báo cáo để tạo nội dung, ở đây ta sẽ tạo một bảng, hãy chọn Table
Nhấp chuột phải vào từng ô của Table để thiết lập nội dung cho phù hợp
Tới đây ta đã tạo thành công một báo cáo, sẵn sàng cho việc đổ dữ liệu lên.
Lưu ý là cần phải thực hiện Copy tệp báo cáo vào thư mục ứng dụng, thực hiện như sau
Bước 7: Thêm một Điều khiển vào thư mục “User Control” và đặt tên là “ReportViewer.xaml”.
Mã XAML như sau:
<UserControl x:Class="MonsterBusinessInc.User_Control.ReportViewer" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:rv="clr-namespace:Microsoft.Reporting.WinForms;assembly=Microsoft.ReportViewer.WinForms" mc:Ignorable="d" d:DesignHeight="600" d:DesignWidth="800" Loaded="UserControl_Loaded"> <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> <WindowsFormsHost> <rv:ReportViewer x:Name="reportViewer" RenderingComplete="reportViewer_RenderingComplete" /> </WindowsFormsHost> </Grid> </UserControl>
Tạo sự kiện UserControl_Loaded cho UserControl “ReportViewer.xaml”
using System.Data; using Microsoft.Reporting.WinForms; namespace MonsterBusinessInc.User_Control { /// <summary> /// Interaction logic for ReportViewer.xaml /// </summary> public partial class ReportViewer : UserControl { public ReportViewer() { InitializeComponent(); } private void UserControl_Loaded(object sender, RoutedEventArgs e) { DataTable dt = new DataTable(); dt.Columns.Add(new DataColumn ("ID",typeof(int))); dt.Columns.Add(new DataColumn("Name", typeof(string))); dt.Columns.Add(new DataColumn("City", typeof(string))); dt.Columns.Add(new DataColumn("OrderAmount", typeof(int))); DataRow dr = dt.NewRow(); dr["ID"] = 1; dr["Name"] = "CK Nitin"; dr["City"] = "New York"; dr["OrderAmount"] = 100; dt.Rows.Add(dr); ReportDataSource reportDataSource = new ReportDataSource(); reportDataSource.Name = "CustomerReport"; // Tên của DataSet mà chúng ta vừa tạo ra ở trên kia reportDataSource.Value = dt; reportViewer.LocalReport.ReportPath = "D:MonsterBusinessInc ReportCustomerReport.rdlc"; // đường dẫn tới tệp .rdlc mà chúng ta vừa tạo ra trên kia reportViewer.LocalReport.DataSources.Add(reportDataSource); reportViewer.RefreshReport(); }
Lưu ý: Trên đây csharpcanban.com chỉ sử dụng DataTable để lưu trữ cơ sở dữ liệu, trên thực tế các bạn có thể sử dụng các hệ quản trị cơ sở dữ liệu khác nhau thay thế cho DataTable. Để thực hiện được điều này các bạn cần nghiên cứu thêm về Lập trình cơ sở dữ liệu.
Bước 8: Tạo một cửa sổ đặt tên là “CustomerReport.xaml”. Cửa sổ này sẽ hiện lên khi nhấp chuột vào nốt đã tạo ở đầu bài viết
Tạo mã XAML như sau, cửa sổ này có nhiệm vụ là tải cái Usercontrol mà ta vừa tạo ở phía trên
<Window x:Class="Reporting.CustomerReport" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="CustomerReport" Height="600" Width="300" xmlns:report="clr-namespace:Reporting.User_Control"> <Grid> <report:ReportViewer ></report:ReportViewer> </Grid> </Window>
Bước 9. Trong sự kiện Click của nốt đã tạo ở đầu bài viết thêm mã sau
private void btnClickMe_Click(object sender, RoutedEventArgs e) { CustomerReport rpt = new CustomerReport(); rpt.ShowDialog(); }
Bước 10: Nhấp F5 để chạy ứng dụng thu được kết quả sau:
Lời kết
Trên đây là toàn bộ bài viết hướng dẫn sử dụng RDLC để tạo ra Report trong WPF. Các bạn hãy thực hiện đúng theo các bước như trên, nếu có thắc mắc hãy đặt câu hỏi ở phần bình luận phía dưới.
Chúc các bạn có kỳ nghỉ 30/4-1/5 vui vẻ.