Tạo báo cáo động với Crystal Reports trên VS 2005

Thông thường các báo cáo được thiết kế cố định các trường dữ liệu được hiển thị cũng như số lượng trường được hiển thị. Trong một số trường hợp, cần phải cho phép người dùng lựa chọn các trường cần đưa ra báo cáo và thứ tự các trường đó. Trong trường hợp này cần phải tạo báo cáo động.

Crystal Reports nói chung không hỗ trợ báo cáo động. Tuy nhiên, có thể tạo các báo cáo động thông qua một số kỹ thuật. Trong bài này, tôi giới thiệu một kỹ thuật tạo báo cáo động, đó là sử dụng Formula Fields.

Một số bước quan trọng để tạo một báo cáo động, đó là:

Bước thiết kế báo cáo:

  1. Khi thiết kế báo cáo, vẫn sử dụng nguồn dữ liệu bình thường, nhưng không đưa bất kỳ một trường nào vào phần Detail.
  2. Thêm vào báo cáo một vài Formula Field (thông thường bằng số lượng trường trong bảng).
  3. Đưa các Formula Field vào phần Detail.

Bước viết mã:

  1. Xác định các trường cần đưa ra và đưa vào trường Text của các Formula Field dưới dạng {TableName.Field}.
  2. Đặt vị trí, độ rộng, tiêu đề cho các trường cần đưa ra. 
  3. Ẩn hoặc đặt độ rộng các trường không đưa ra.

Để tìm hiểu sâu hơn về các lệnh thao tác đối với báo cáo, có thể xem thêm trong chương trình minh hoạ. Chương trình minh hoạ có tên là DynReports, viết bằng ngôn ngữ C# trên nền Visual Studio 2005, sử dụng cơ sở dữ liệu SQL Server.

image

(Nhấn vào để xem hình đầy đủ)

Chương trình minh hoạ khá đơn giản, mới chỉ dừng lại ở chức năng tạo báo cáo động. Các tính năng như tính toán độ rộng các trường, định dạng dữ liệu hiển thị, kẻ bảng… chưa được đưa vào chương trình.

Download: Mã nguồn chương trình.

63 phản hồi tới “Tạo báo cáo động với Crystal Reports trên VS 2005”

  1. [...] Tạo b�o c�o động với Crystal Reports tr�n VS 2005 Thông thường các báo cáo được thiết kế cố định các trường dữ liệu được hiển thị […] [...]

  2. uh thank iu minh dang tim cái này

  3. Chào thầy !
    Em đang tự học Crystal Report. Thầy có tài liệu nào nói về báo cáo động và những tính năng khác về Crystal Report thì cho em xin.
    Em xin cảm ơn thầy

  4. Chào thầy!
    Em đang làm 1 chương trình cần hỗ trợ rất nhiều tính năng báo cáo động trong Crystal Report. Mong thầy giúp đỡ. Em rất vui vì tìm được trang này, thực sự rất bổ ích. Em xin cám ơn.

  5. chào thầy!
    Em đã đọc blog của thầy, em thấy các bài viết của thầy khá hay. Nhưng nếu tạo report chỉ bằng công cụ của Vs2005 thì khá cứng. Em đang thử dùng Componentone nhưng tài liệu còn ít quá. Phần allowmerging các dòng dữ liệu để tạo ra 1 báo cáo phức tạp em thấy khá khó. Em rất mong thầy có thể viết 1 bài về phần này. Em xin cảm ơn!

  6. Chào thầy!!!
    Em đang làm báo cáo yêu cầu phải Export ra word để có thể chỉnh sửa dễ dàng, nhưng trong Crystall Report export ra word theo các object như vậy thì chỉnh sửa rất bất tiện. Vậy em xin hỏi thầy có cách nào giúp em với.
    Em cảm ơn thầy rất nhiều

  7. Thầy cho em hỏi: Em tạo được bào cáo động rồi theo hướng dẫn nhưng trông rất xấu vì không format được các trường kiểu số, và datetime, và nhất là không tạo được border cho dữ liệu bằng code. Em đã tìm mãi mà không được mong thầy có thể chỉ giúp kỹ hơn được không ạ.

  8. Lê Khánh Thành Says:

    Thưa thầy Hoà !

    Có cách nào để sử dụng Crystal Reports 11 với Visual C++ 2006 không ? Tôi đang rất cần sử dụng Crystal Reports để lập báo cáo. Tôi sử dụng Visual C++ 2005.

    Cám ơn thầy nhiều !

  9. Thua thay, khi em truy van “shippeddate < 08/06/2003″ thi ket qua tra ve bi dao thanh “< 06/08/2003″. Em co bat buoc phai format kieu ngay trong CSDL khong? Phai lam nhu the nao a. Cam on thay.

  10. Dùng cái CR XI mạnh hơn, đẹp… nói chung OK luôn với cái này.

  11. @The nhan: Bạn không nhất thiết phải format kiểu ngay trong database. Khi bạn dùng câu truy vấn để select data ra ngoài, hoặc insert dữ liệu vào database bạn hoàn toàn có thể format kiểu. Bạn có thể dùng substring trong C#,VB.net, Javascript,… hoặc một số thư viện viết sẵn để format lại dữ liệu. Về phần report thì bạn ko cần phải lấy dữ liệu tự động, hãy truy vấn ra một table, từ table đó lấy vào report file, Lấy report file làm source cho Report Viewer (Trong DotNet 2005)

  12. Ai biết việt hóa cái report ko???

  13. Y ban Thanh Tu la gi nhi? Viet Hoa giao dien Report hay Viet hoa bao cao cua minh?
    Ban ghi chi tiet vao minh tra loi cho nhanh, Ok?

  14. chào Thầy. em đang tìm tài liệu về dynamic report, hiện em đang gặp vấn đề này không biết thầy cho em hướng giải quyết được không ạ/
    vấn đề như sau: em có 1 dataset được đổ dữ liệu động(tùy chọn của người dùng) Em không biết cách tạo report động, thầy giúp em nha. em cám ơn thầy
    chào thầy

  15. @danghoa:
    Theo mình bạn không nên dùng dataset để làm source cho report. Vì trong dataset có thể có nhiều bảng, và các bảng này có các cột có thể khác nhau.
    Bạn có thể truy vấn ra 1 table và dùng làm source cho report.
    Yếu tố truy vấn chính là yếu tố động trong report của bạn.
    Chúc bạn thành công.

  16. @danghoa : Dung Dataset cung dc nhưng phải chỉ rõ tên của bảng mình dùng(Tablename ) là được.

  17. Cảm ơn thầy!.
    Nhưng nếu muốn báo cáo có đối tượng Line thì có được không ạ!?..

  18. Thưa thầy, em làm thử một ứng dụng web trong vs 2005 bằng vb.net có dùng crystal report nhưng khi publish xong, rồi chạy thì báo lỗi, build ct thì chạy bình thường.Xin thầy hãy giúp em.E xin cám ơn

  19. @thuy: Ban cau hinh lai IIS cua ban, khi ban build chay duoc boi VS tao cho ban host ao, voi cong ngau nhien nao do.
    Neu lam web, ban nen cau hinh IIS, roi test bang cach goi trang web binh thuong, de tranh nhung loi tuong tu.

  20. Em khong the download bai cua thay dc.. hy vong thay hoac ban nao co source bai nay thi upload len host khac de download dc khong?
    Cam on!

  21. Em dang lam bao cao can nhung thong tin ve qua trinh hinh thanh crystal report nhung tim tren mang khong thay ai biet trang web nao hay co tai lieu chi dum em voi

  22. Em cũng đang nghiên cứu để làm báo cáo động, em không down được bài ví dụ của Thầy về. Thầy có thế giúp em gửi nội dung đó vào hóm thư của em hoặc là chuyển sang host khác ạ.
    Rất mong thầy giúp đỡ, em cám ơn thầy!

  23. Có một điều nữa em thấy là nếu mình làm thế này thì các đường kẻ phân giữa các cột mình có thể cho nó ẩn và hiện được không, như cái báo cáo hiện ra của thầy em không thấy khung của báo cáo ạ!

  24. @thuthuy: Bạn vào http://www.codeproject.com hoặc http://w3schools.com để tìm thông tin nhé.
    @nhatanhroi: Crystal report cho phép bạn tự định nghĩa template cho báo cáo của bạn thì phải.

  25. Mình đang nghiên cứu về report động nhưng hình như file mã nguồn không thể down được nữa. Bạn nào đã lấy được thì gửi lại cho mình nha. Địa chỉ là annamhotmit@gmail.com

    thanks bạn nhiều

  26. Chao anh Hoa!
    Hinh nhu trang web http://my.opera.com/vuongnet/blog/2007/09/08/tao-bao-cao-dong-voi-crystal-reports-tren-vs-2005 da lay bai cua Anh… Em dang can tham khao report dong, Anh (hoac cac ban da download duoc bai tham khao) co the gui cho em tham khao duoc khong? (random.wind@gmail.com)
    Than!

  27. Professional Crystal Reports for Visual Studio .NET 2nd Edition
    (Crystal Reports.pdf)
    LH: hanoimualabay@yahoo.com

  28. Dạ thưa Thầy em muốn viết 1 chương trình quản lý bà con họ hàng trong 3 đời (gia phả). Xin Thầy cho em một lời khuyên về cách làm. em cám ơn Thầy nhiều. mong sớm nhận được hồi đáp từ Email của Thầy. em: nvcuongjohn@gmail.com

  29. Hiện tại mình không thể down được mã nguồn, vậy bạn nào có mã nguồn gửi cho mình vào hòm thư nhatanhroi@yahoo.com với nhé! thanks

  30. Doc bai cua thay hay qua!
    Thay co the cho xin duong link de download Crystal Report?

  31. Mình cũng không down được source, bạn nào có làm ơn gửi cho mình vào hòm thư nhé. Thanks.

  32. Các bạn ơi, ai down được mã nguồn rồi gửi cho mình với, mình không down được, gửi vào: ngaykhongmua_7983@yahoo.com.vn. Cám ơn các bạn nhiều

  33. thầy ơi,em chưa hiểu về report nhiều,nhưng em đang làm chương trình là tạo report từ nhiều table,thầy có thể cho em code và 1 ví dụ nhỏ được không.Em cám ơn thầy và các ban nhiều

  34. chào các bạn và thầy,em chưa hiểu về report trong C# 2005,em đang làm chương trình là tạo report từ nhiều table,thầy và các bạn giúp em với,em cám ơn rất nhiều

  35. chào các bạn và thầy,em chưa hiểu về report trong C# 2005,em đang làm chương trình là tạo report từ nhiều table,thầy và các bạn giúp em với,em cám ơn rất nhiều,thầy và các bạn có thể cho em 1 ví dụ đơn giản được k

  36. Thưa thầy! Em là sinh viên lớp công nghệ phần mềm A – K46
    Hiện tại em đang nghiên cứu về virut, nhưng tài liệu em có là rất it. và hướng nghiên cứu của em cũng chưa rõ ràng. Thầy có thể giúp em một số tài liệu được không ạ! Nêu thầy có thì thầy có thể giúp em được không ạ!
    Em xin cảm ơn thây

  37. E chào Thầy!
    E làm được báo cáo như của Thầy nhưng có 1 chi tiết là khi hiển thị nó thì phần header của các trường trong báo cáo và phần show các thông tin trong checklist box là tiếng anh.
    Vậy có cách nào để chuyển hai chỗ này thành tiếng việt không ạ?
    E rất mong thầy sớm giải đáp giúp em
    mail của e là:trphuongnam@yahoo.com hoặc trphuongnam@gmail.com
    E cám ơn Thầy ạ!

  38. Phan Đức Thiện Says:

    Em chào Thầy, thưa thầy em muốn hỏi thầy một vấn đề đó là khi em thiết kế báo cáo với CR đi kèm bộ VS 2005 em có sử dụng Formula Field để hiển thị giới tính và em lập trình khi preview thì ok, nhưng gắn vào form để chạy thì lại báo lỗi, mong thầy và mọi người giúp em chút

  39. Em cảm ơn thầy về bài bài viết.
    Xin chúc thầy nhiều sức khỏe ạ! :D

  40. Crysral Report không hổ trợ động. Đây chỉ là một kỷ thuật nhỏ thôi. Việc ấn định số trường sẽ hiển thị, bản chất là không động theo đúng nghĩa của nó.Về việc đưa Các đối tượng như (line, image …) vào report đồng thời việc co giản, điều chỉnh độ rộng bằng code không phải là việc đơn giản.
    Tác giả của bài viết chỉ mới nêu ra một giả thuyết.
    Thư viện các hàm của CR vẫn chưa được công khai như Visaul FoxPro.
    ====
    Do đó, Report động, thế giới vẫn chưa có….

  41. Vô tình vào trang web này thấy hay quá. Cho minh tham gia voi nhe. Xin chao tất cả mọi người.

  42. thầy cho em hỏi có cách nào load ảnh tự động lên crysral report không. Thầy có thể hướng dẫn giúp k a? em đang cần gấp. Cảm ơn thầy nhiều!

  43. Thay cho em hoi cach lam bai ve crystal report: em co 1 combobox chua ten cac Huyen. khi em chon 1 huyen thi report hien thi du lieu cua huyen do. em hoc vb .net 2005

  44. Bạn xử lý việc này trong sự kiện của combobox (textchange… ) là ok ngay. mỗi lần thay đổi tên huyện ( hoặc mã huyện) thì dữ liệu đẩy vào một datatable và lấy datatable này làm datasource cho report. Việc này khá là đơn giản nếu bạn đã lập trình với cơ sở dữ liệu.

  45. Xin tác giả hướng dẫn cách làm báo cáo động mà trong đó header đước lấy tự động từ csdl chứ ko bị cứng như trên và có đường kẻ thành ô, bảng. Cảm ơn nhiều!

  46. Thay & cac ban co the huong dan em tao Chart Bar trong crystalreport voi’ 1 object data do minh` truyen vao` ko?
    Thanks.

  47. Toi da su dung chuong trinh tren, nhung toi muon bao cao voi nhieu ten truong thi sao , chang han nhu la 50 truong thi lam file DBReport.rpt nhu the nao ?

  48. Thầy cho0 em hỏi làm sao tạo được dataset trong project vậy,vì em tạo report động mà đường dẫn thì tuyệt đối nên qua máy khác không chạy được,nếu chạy được thì lại không có dữ liệu gì cả…?.
    Nếu database là một bảng thì không sao cả,chạy đâu vẫn tốt nhưng nhiều bảng thì bị như vậy đó,em cũng không hiểu được lý do tại sao
    Rất mong được thầy hướng dẫn giúp,em rất cảm ơn.
    Nick của em là:quochoaIT (nick yahoo)

  49. Nguyễn Đưc Hải Says:

    Hi chao tất cả mọi người , mình cũng đang làm cái báo cáo , dùng cái crystal report của .net 2005 . Mình đã làm được báo cáo trên Web , chạy được rồi , nhưng mình muốn khi ấn nút print trên cái file .rpt nó kết lối với máy in luôn mà không phải save lại định dạng PDF nữa . Ai biết cái này trả lời hộ mình nhá . Thanks!

  50. Nguyễ Thanh Hòa Says:

    Chào tất cả mọi người mình cũng đang cần cái này nhưng làm trong môi trường web có ai biết chỉ giùm tui với.Rất mong được sự hỗ trợ của mọi người.Thanks!

  51. Chào anh,
    Em muốn làm Report trong C# 2005, nhưng gặp vấn đề như sau:
    - Em cần tạo Report, mà dữ liệu được lấy từ các control (textbox, datagridview, usercontrol…), chứ không phải lấy dữ liệu từ database, vậy anh có cách nào giải quyết không, chỉ dùm em với. Cảm ơn anh rất nhiều.
    Nếu có mã nguồn, xin anh gửi qua email của em dùm nhé. :D

  52. chào thầy, em muốn thầy chỉ về các dùng Crystal Report ứng dụng cho mô hình 3 lớp. e định dùng ObjectDataSource nhưng chưa bit làm sao? thầy có thể giúp đỡ dc ko?

  53. Chào thầy!
    Em đang viết chương trình Customer Relationship management trong C# 2003. Thầy có thể hướng dẫn chi tiết cho .net 2003 giúp em được không ?
    Thanks Thầy

  54. Chào anh.
    Xin anh chỉ cho em cách làm Report . Em có 1 cấu trúc XML. Bây giờ em muốn làm Report theo cấu trúc đó thì làm sao?
    Chỉ em với nha anh!
    Cảm ơn anh nhiều

  55. minh dang tap lam crystal report . mong moi nguoi chi giao.Minh muon lan hoan bnag code.tuc la du l;ieu duoc dua tu sql vao dateset .Sau do gan vao bien co trong crystal report.moi nguoi co the gui code cho minh dc ko(dangdoanh.sp@gmail.com)

  56. Chào anh Hòa
    Mình đã thử làm báo cáo động theo cách thiết kế cố định các trường trên Report sau đó cho phép người dùng tùy chọn ẩn hiện các cột của báo cáo.
    Vấn đề về tính toán để co dãn các cột Visible mình đã xử lý được. Tuy nhiên mình gặp phải một vấn đề đối với LineObject của Crystal Report đó là dịch chuyển vị trí của chúng. Đối tượng mình cần dịch chuyển là các Line trong Section Detail. Mình đã lên google và tham khảo một số cách nhưng không ăn thua.
    Lỗi Runtime luôn xảy ra khi mình cố thay đổi thuộc tính Left của LineObject.
    Đây là một trong những cách hướng dẫn trên trang Msdn mình đã thử. Nó ko báo lỗi nhưng sau khi đổi xong LineObject bị biến mất khỏi Crystalreport(Suppress hoặc Invisible)
    Dim LineObj As LineObject = CType(CrptDocument.ReportDefinition.ReportObjects(RObj.Name), LineObject)
    Dim TOP As Integer = LineObj.Top
    Dim Bottom As Integer = LineObj.Bottom
    LineObj.Top = 0
    LineObj.Bottom = 0
    LineObj.Left = objLeft
    LineObj.Right = objLeft
    LineObj.Top = TOP
    LineObj.Bottom = Bottom

    Rất mong nhận được sự trợ giúp hoặc phản hồi của bạn qua Email
    Thanks in advance!

  57. trong đó objLeft mang giá trị integer

  58. Chào thầy Hòa!
    Em đang tự học cryal report trong VB.net nhưng em đang gặp một rắc rối là: em tạo một báo cáo nhưng số trường trong bảng của em thì rất nhiều mà em không bit làm cách nào để mở rộng báo cáo. Mong thầy giúp em giải quyết vấn đề này.
    Cám ơn thầy!

  59. Xin thầy tư vấn Says:

    Em đang viết 1 app (C#2005 Express) , với CSDL là Exel.App tạo ra các bill theo mẫu có sẵn.Dữ liệu động sẽ tự động đổ vào 1 Table và các text (họ tên,ngày tháng).Em xin thầy tư vấn dùm em trong quá trình in ấn hóa đơn này thì phải làm thế nào.Hóa đơn dài 2-5 trang A4.Nếu sử dụng Crystal report thì không biết nó sẽ được đặt vào chỗ nào trong App này.Em đang rất bí mong thầy tư vấn thêm.Email của em là :breakoflove@yahoo.com.Mong thầy có vài lời tư vấn giúp em

  60. Chào thầy!
    Em đang gặp một rắc rối trong phần report: em đã tạo ra được report, bây giờ em muốn chuyển sang word hoặc excel để in ra, khi thiết kế report em để khổ giấy A3 nằm ngang, làm thế nào để khi export ra word hoặc excel vẫn là khổ A3 nằm ngang?
    Mong thầy giúp em giải quyết vấn đề này càng sớm càng tốt vì em đang rất cần.
    Cám ơn thầy!

  61. Định dạng khi in Says:

    Kính chào thầy!
    Em có một số câu hỏi cần thầy giúp đỡ ạh
    Công việc là thế này thầy ạh, em cần tạo ra một trang in ( dang báo cáo) ví dụ như tờ giấy A4, em ,muốn chia làm 4 báo cáo khác nhau trên trang A4 này, mỗi một lần em có thể in 1/4 tờ A4, hoặc 1/2 tờ A4 hoắc 3/4 tờ A4 đều có thể in được, Nếu theo như đưa dữ liệu vào thì một lúc em có thể in rất nhiều record, hoặc 1 Record theo kiểu in thẻ học sinh. Thầy có thể giúp em vẫn đề này được không ạ? Cảm ơn thầy nhiều! hy vọng em sẽ nhận được 1 câu trả lời thật hoàn hảo!!

  62. Em rất cảm ơn những kiến thức mà thầy đã cung cấp cho chúng em.
    Thầy cho em xin hỏi một số vấn đề
    Làm cách nào để tạo một report động tức là số dòng và số cột sẽ co dãn theo số mẫu tin trong CSDL.
    Vd: In bảng điểm tổng hợp toàn khóa cho lớp và bảng điểm toàn khóa cho cá nhân (em sử dụng VB.NET và Sql server). Bảng điểm của lớp thì là một bảng các hàng mỗi hàng là một bạn sinh viên và mỗi bạn đó sẽ có số cột tùy theo các môn học trong học kỳ. Bảng phải có số cột là lớn nhất theo bạn học số môn học nhiều nhất
    Làm cách nào để tạo ảnh nền chìm trên crystal report. Em muốn in report nhưng trên nền report đó sẽ là các logo trang trí khắp trang.
    Kính mong thầy giải đáp giúp em. Em xin chân thành cảm ơn

Để lại hồi âm