Friday, June 09, 2017
1
Bài note này mình trình bày cách tạo 1 report lấy dữ liệu từ 1 grid trong vài nốt nhạc nhờ việc sử dụng control Devexpress.Xtrareport.PrintableComponentContainer. 
Thực ra thì có khá nhiều cách để tạo 1 report từ gridview, vd: sử dụng emmbbedNavigation của gridview, lấy source của gridview bind vào report, ... Nhưng mình thấy chả những việc đó khá mất công nên mình hay sử dụng PrintableComponentContainer cho những yêu cầu dạng này. Còn về PrintableComponentContainer là gì, chi tiết dùng như thế nào thì hãy xem click link này mình không giải thích thêm mà sẽ đi vào các bước thực hiện luôn

B1. Tạo xtraReport

Add new items hoặc bạn nhấn tổ hợp phím Ctrl + Shift  + A để đến màn hình add new item. Chọn Tab Reporting chọn Devexpress ... report ... và trong màn hình thì chọn Empty xtraReport để tạo mới một devexpress report.



Có thể vẽ vời các header cho nó ra dáng 1 report nhé :D

B2. Sử dụng printableComponentContainer
Trên toolbox của visual studio gõ printableComponentContainer và kéo nó vào detail của report


Đấy done phần thiết kế report rồi đấy. Bây giờ thiết kế cái forn chứa grid để mở report này.
B3. Thiết kế form 
- Tạo cái form
- Kéo 1 cái grid vào form để show dữ liệu
- Kéo cái button vào form để action mở report
--> được cái form như này (Full code)


Code cho button report để khi click sẽ hiển thị report với dữ liệu từ grid như sau:

        private void btnReport_Click(object sender, EventArgs e)
        {
            gvCustomerInfo.BestFitColumns();
            CustomerReport report = new CustomerReport();
            report.GridControl = gcCustomerInfo;
            ReportPrintTool printTool = new ReportPrintTool(report);
            printTool.ShowPreviewDialog();
        }

Bổ sung đoạn code này vào code của xtraReport 

        private GridControl control;
        public GridControl GridControl
        {
            get
            {
                return control;
            }
            set
            {
                control = value;
                pccReport.PrintableComponent = control;
            }
        }

giải thích: Tại report ta sử dụng thuộc tính PrintableComponent của printableComponentContainer để assign gridcontrol từ bên form gọi cho printableComponentContainer (mình đặt name nó là pccReport) của ta, từ đấy printableComponentContainer  sẽ biết cần lấy data từ gridcontrol nào và tự động fill lên report, kết quả ta được


Download source: GoogleDrive

1 comments: