Truyền dữ liệu vào Crystal Report thông qua Parameter Field



Truyền dữ liệu vào Crystal Report thông qua Parameter Field

Một cách tổng quát, bài viết này sẽ cung cấp thêm cho các bạn cách truyền dữ liệu vào Crystal Report. Ngoài cách sử dụng StoredProcedure mà các bạn đã biết, thì các bạn còn có thể sử dụng Parameter Field để truyền thông tin ngắn gọn dễ dàng.

Xét một ví dụ như sau:

Với cơ sở dữ liệu:

Description: C:\Users\Win7\Desktop\GridControl\Microsoft SQL Server Management Studio Express_2012-05-17_00-00-23.jpg

Form:

Sau khi chọn khoa trên combobox và nhấn nút In báo cáo thì báo cáo in ra sẽ có tiêu đề tên khoa tương ứng, phía dưới là danh sách sinh viên thuộc khoa đó.

Chúng ta đã quen thuộc với những bài tập tạo báo cáo dạng này bằng cách sử dụng StoredProcedure đưa dữ liệu vào. Thông thường, chúng ta sẽ tạo ngay 1 StoredProcedure lấy mã số sinh viên và họ tên sinh viên theo tham số là mã khoa, cụ thể SQL thế này:

CREATE PROCEDURE Sp_BCSVTHEOKHOA

      @makhoa char(4)

AS

BEGIN

      select mssv, hoten from sinhvien where makhoa = @makhoa

END

Sau đó là khâu thiết kế báo cáo, chúng ta gặp ngay vấn đề là tham số tên khoa không có trong StoredProcedure trên.

Vấn đề là làm thế nào thêm vào trường dữ liệu “tên khoa” đây?

Có một cách là ngay lập tức về lại bên cơ sở dữ liệu sửa lại StoredProcedure đó và kế tiếp là verify bên crystalreport.  Chấp nhận rằng chúng ta sẽ truy vấn dư thừa.

Cách khác đó là truyền “tên khoa” từ form vào crystal report theo đường Parameter Field.

Cách thực hiện như sau:

Đầu tiên, tôi vào Report, bên cửa sổ Field Explorer, tạo mới một Parameter Field

Đặt tên là “khoa”. Tôi bỏ trống phần prompting text, vì tôi không có dự định sử dụng prompt để người dùng nhập vào parameter, mà tôi sẽ truyền vào bằng code C#. Sau khi tạo xong, thì kéo Field Khoa đến vị trí cần hiển thị.

Lưu lại và về Form để thực hiện gán vào Parameter đó khi bấm vào nút in:

        private void btnPrintReport_Click(object sender, EventArgs e)

        {

            clssForm1BLL.MaKhoa = cboKhoa.SelectedValue.ToString();

            crystalReportSVTHEOKHOA1.SetDataSource(clssForm1BLL.GetSinhVienByMaKhoa());

           

            ParameterDiscreteValue pa = new ParameterDiscreteValue();

            pa.Value = cboKhoa.Text;

 

            ParameterFieldDefinition crParameterFieldDefinition = crystalReportSVTHEOKHOA1.DataDefinition.ParameterFields["khoa"];

            crParameterFieldDefinition.CurrentValues.Clear();

            crParameterFieldDefinition.CurrentValues.Add(pa);

            crParameterFieldDefinition.ApplyCurrentValues(crParameterFieldDefinition.CurrentValues);

 

            crystalReportViewer1.ReportSource = crystalReportSVTHEOKHOA1;

        }

Những người bạn mới ở đây là:

          ParameterDiscreteValue : khai báo đối tượng thuộc lớp này để chứa dữ liệu rời rạc. Trong ví dụ này thì là tên khoa đang chọn được hiển thị trên combobox.

          ParameterFieldDefinition : khai báo đối tượng thuộc lớp này để tìm đến định nghĩa ParameterField muốn truyền trên báo cáo. Đó chính là ParameterField có tên là “khoa” (giống với tên ParameterField ban nãy tạo bên báo cáo). Sau đó là vài động tác xóa, thêm, sử dụng dữ liệu ta đã truyền vào theo đối tượng ParameterDiscreteValue.

Có thể viết ngắn gọn lại theo cách này cũng được:

       private void btnPrintReport_Click(object sender, EventArgs e)

        {

            clssForm1BLL.MaKhoa = cboKhoa.SelectedValue.ToString();

            crystalReportSVTHEOKHOA1.SetDataSource(clssForm1BLL.GetSinhVienByMaKhoa());

           

            ParameterDiscreteValue pdv = new ParameterDiscreteValue();

            pdv.Value = cboKhoa.Text;

            ParameterValues pv = new ParameterValues();

            pv.Add(pdv);

crystalReportSVTHEOKHOA1.DataDefinition.ParameterFields["khoa"].ApplyCurrentValues(pv);

 

            crystalReportViewer1.ReportSource = crystalReportSVTHEOKHOA1;

        }

    }

5 responses to “Truyền dữ liệu vào Crystal Report thông qua Parameter Field

  1. I truly wanted to write down a quick remark to thank you for these pleasant secrets you are showing at this website. My time-consuming internet lookup has at the end been rewarded with really good know-how to go over with my contacts. I ‘d express that we readers actually are undoubtedly blessed to dwell in a fantastic community with many outstanding individuals with insightful concepts. I feel rather grateful to have used the web site and look forward to tons of more cool times reading here. Thank you once more for all the details.

    Số lượt thích

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất /  Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Đăng xuất /  Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất /  Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất /  Thay đổi )

Connecting to %s