2008-10-02 27 views
9

Tôi cần tạo báo cáo trong ứng dụng C# .NET Windows. Tôi đã có một cơ sở dữ liệu SQL Server 2005, Visual Studio 2005 và khá ổn với việc tạo các thủ tục và bộ dữ liệu được lưu trữ.Sử dụng báo cáo Crystal trong Visual Studio 2005 (C# .NET Windows App)

Ai đó có thể vui lòng chỉ cho tôi đúng hướng để tạo báo cáo không? Tôi không thể làm việc được. Một số ví dụ sẽ là một khởi đầu tốt, hoặc một hướng dẫn How-to đơn giản ... bất cứ điều gì thực sự đó là một chút giải thích tốt hơn so với các tài liệu MSDN.

Tôi đang sử dụng điều khiển CrystalDecisions.Windows.Forms.CrystalReportViewer để hiển thị báo cáo, tôi cho rằng điều này là chính xác.

Nếu tôi sắp bắt tay vào một hành trình dài và phức tạp, cách đơn giản nhất để tạo và hiển thị các báo cáo cũng có thể được in là gì?

Trả lời

4

Tôi đã quản lý để thực hiện công việc này ngay bây giờ.

Tổng quan Giới thiệu tóm tắt

Nó hoạt động bằng cách có một 'lớp dữ liệu' mà chỉ là một C# lớp thông thường có chứa các biến và không có mã. Điều này sau đó được khởi tạo và đầy dữ liệu và sau đó được đặt bên trong một ArrayList. ArrayList bị ràng buộc với trình xem báo cáo, cùng với tên của báo cáo cần tải. Trong trình thiết kế báo cáo '.Net Objects' được sử dụng, thay vì giao tiếp với cơ sở dữ liệu.

Giải thích

Tôi tạo ra một lớp học để giữ dữ liệu cho báo cáo của tôi. Lớp này được điền bằng tay theo cách thủ công bằng cách truy xuất dữ liệu từ cơ sở dữ liệu theo cách thủ công.Cách bạn thực hiện việc này không quan trọng, nhưng đây là ví dụ:

DataSet ds = GeneratePickingNoteDataSet(id); 
foreach (DataRow row in ds.Tables[0].Rows) { 
    CPickingNoteData pickingNoteData = new CPickingNoteData(); 

    pickingNoteData.delivery_date = (DateTime)row["delivery_date"]; 
    pickingNoteData.cust_po = (int)row["CustomerPONumber"]; 
    pickingNoteData.address = row["CustomerAddress"].ToString(); 
    // ... and so on ... 

    rptData.Add(pickingNoteData); 
} 

Lớp này sau đó được đặt vào trong ArrayList. Mỗi phần tử trong danh sách mảng tương ứng với một 'hàng' trong báo cáo đã hoàn thành.

Phần tử đầu tiên trong danh sách cũng có thể giữ dữ liệu tiêu đề báo cáo và phần tử cuối cùng trong danh sách có thể giữ dữ liệu chân trang báo cáo. Và vì đây là một ArrayList, bình thường truy cập Mảng có thể được sử dụng để có được ở họ:

((CPickingNoteData)rptData[0]).header_date = DateTime.Now; 
((CPickingNoteData)rptData[rptData.Count-1]).footer_serial = GenerateSerialNumber(); 

Một khi bạn có một đầy đủ ArrayList của dữ liệu, ràng buộc nó để xem báo cáo của bạn như thế này, nơi 'rptData' là loại 'ArrayList'

ReportDocument reportDoc = new ReportDocument(); 
reportDoc.Load(reportPath); 
reportDoc.SetDataSource(rptData); 
crystalReportViewer.ReportSource = reportDoc; 

Bây giờ bạn sẽ cần phải ràng buộc lớp dữ liệu của bạn với chính báo cáo. Bạn làm điều này trong thiết kế:

  1. mở tab Dòng Explorer (có thể dưới 'View' menu), và nhấp chuột phải "Cơ sở dữ liệu Fields"
  2. Nhấp vào 'Data Project'
  3. Click vào
  4. Scroll' NET Objects' xuống danh sách để tìm lớp dữ liệu của bạn (nếu nó không phải là ở đó, biên dịch ứng dụng của bạn)
  5. Nhấn '>>' rồi nhấn OK
  6. bạn có thể bây giờ kéo các thành viên lớp vào báo cáo và sắp xếp chúng theo số bạn muốn.
+0

Tôi đã tìm thấy một cách tốt hơn, đơn giản hơn ... http://arcanecode.com/2009/02/09/using-a-local-reporting-services-2008-report-with-an-adonet-data- set/# comment-27511 – Piku

3

Pha lê là một tùy chọn khả thi để tạo báo cáo. Nó đã được khoảng một thời gian dài và rất nhiều người dường như thích nó.

Bạn có thể muốn xem qua các dịch vụ báo cáo SQL. Tôi đã sử dụng cả hai nhưng ưu tiên của tôi là các dịch vụ báo cáo SQL. Nó được tích hợp khá tốt vào studio và hoạt động tương tự như các dự án khác của microsoft. Nó cũng miễn phí với sql thể hiện, vv

Đây là một bài viết tốt về các dịch vụ báo cáo đầu: http://www.simple-talk.com/sql/learn-sql-server/beginning-sql-server-2005-reporting-services-part-1/

+1

Và điều này có liên quan gì đến báo cáo Crystal khác ngoài bạn không thích? – rball

1

Tôi thứ hai giới thiệu alex để nhìn vào dịch vụ báo cáo sql - nếu bạn có một giấy phép nhà phát triển sql, sau đó bạn dịch vụ có thể đã có báo cáo

tôi không thích các báo cáo tinh thể, quá nhiều sự nhàm chán trong thiết kế (biểu thức chỉnh sửa tất cả các thời gian) các vấn đề quá nhiều máy chủ triển khai (kiểm tra các tập tin giấy phép!)

1

tôi sử dụng pha lê . Tôi sẽ phác thảo phương pháp của tôi một thời gian ngắn, nhưng lưu ý rằng tôi là một cửa hàng một người và nó có thể không dịch sang môi trường của bạn.

Trước tiên, hãy tạo biểu mẫu với Trình xem CR. Sau đó:

1) Tìm ra dữ liệu bạn cần và tạo chế độ xem để truy xuất các cột mong muốn. 2) Tạo báo cáo Crystal mới bằng cách sử dụng trình hướng dẫn cho xem làm nguồn dữ liệu. 3) Kéo, thả, chèn, xóa và bất kỳ thứ gì để làm thô báo cáo của bạn thành hình dạng. Vâng, nó tẻ nhạt. 4) Tạo nút bấm cần thiết hoặc bất kỳ thứ gì và tạo chức năng để tạo báo cáo. 5) Truy xuất dữ liệu vào một DataTable (có thể trong một DataSet). Bạn không phải sử dụng chế độ xem. 6) Tạo đối tượng báo cáo. Đặt DataTable làm DataSource. Chỉ định đối tượng báo cáo cho Trình xem CR. Đây là một phần trong đó có những ví dụ.

Nhận xét:

Nếu bạn mất cửa sổ với trường cơ sở dữ liệu, v.v. (Field Explorer), hãy chuyển đến Xem/phác thảo tài liệu. (Đó là tưởng tượng của tôi để có Bill Gates trên sân khấu và yêu cầu anh ta tìm thấy nó.)

Lý do thiết lập chế độ xem là nếu bạn muốn thêm cột, bạn sửa lại chế độ xem và Trình khám phá trường sẽ cập nhật tự động. Tôi đã có tất cả các loại rắc rối làm theo cách khác. Phương pháp này cũng là một công việc xung quanh cho một lỗi đòi hỏi phải quét qua tất cả các bảng đặt lại bảng mà họ trỏ đến. Bạn muốn đưa cho Crystal một cái bàn duy nhất. Bạn không muốn cố gắng để có được Crystal để tham gia bàn, vv Tôi không nói nó không hoạt động; Tôi nói nó khó hơn.

Có (hoặc là) tài liệu cho việc triển khai VS của Crystal trên trang web Đối tượng kinh doanh, nhưng tôi tin rằng nó đã biến mất sau màn hình đăng ký/đăng nhập. (Tôi có thể tự mình biết thêm thông tin về điều đó.)

Tôi đã gặp khó khăn khi ngắt trang Pha lê khi muốn, và không ngắt trang khi tôi không muốn, v.v .. Nó cách xa người viết báo cáo tốt nhất tôi đã từng sử dụng và tôi không hiểu tại sao dường như đã khiến nhiều người khác phải kinh doanh. Ngoài ra, các chính sách cấp phép của họ rất khó để giải quyết trong một tổ chức nhỏ và linh hoạt.

Edited để thêm ví dụ:

AcctStatement oRpt = new AcctStatement() ; 
oRpt.Database.Tables[0].SetDataSource(dsRpt.Tables[0]); 
oRpt.SetParameterValue("plan_title",sPlanName) ; 
crViewer.ReportSource = oRpt ; 
2

Bạn có thể sử dụng trình xem báo cáo với báo cáo phía khách hàng xây dựng vào vs.net (ReportBuilder kiểm soát/ReportViewer). Bạn có thể tạo các báo cáo giống như cách bạn làm cho các dịch vụ báo cáo sql, ngoại trừ bạn không cần máy chủ sql (cũng không phải asp.net). Ngoài ra, bạn có toàn quyền kiểm soát chúng (cách bạn trình bày, cách bạn thu thập dữ liệu, lớp chúng được tạo ra, những gì bạn làm với chúng sau khi tạo, chẳng hạn như gửi thư, gửi tới ftp, v.v.). Bạn cũng có thể xuất dưới dạng PDF và xuất sắc.

Và trong trường hợp của bạn xây dựng một báo cáo từ dữ liệu và đầu vào của người dùng, điều này có thể hoạt động tuyệt vời khi bạn có thể xây dựng nguồn dữ liệu và dữ liệu của riêng mình. Khi dữ liệu của bạn đã sẵn sàng để được báo cáo, hãy liên kết dữ liệu đó với báo cáo của bạn.

Báo cáo có thể dễ dàng được xây dựng trong Visual Studio 2005 (Thêm báo cáo cho dự án của bạn) và được hiển thị trong ứng dụng Winforms bằng cách sử dụng điều khiển ReportViewer.

Đây là một cuốn sách tuyệt vời tôi khuyên mọi người nên xem xét nếu quan tâm đến báo cáo phía khách hàng. Nó cung cấp rất nhiều thông tin tuyệt vời và nhiều kịch bản khác nhau và cách sử dụng báo cáo phía khách hàng.

http://www.apress.com/book/view/9781590598542

0

tôi khuyên cố gắng một giải pháp báo cáo thay thế - Tôi có rất nhiều kinh nghiệm với Crystal, và đã cố gắng để làm một số điều sôi nổi với nó trong Net, nhưng khá trung thực sự hội nhập của Crystal và. Net là một con lợn tuyệt đối cho bất cứ điều gì, nhưng các trường hợp đơn giản nhất.

0

Tôi đã thử RS. Tôi đang chuyển đổi từ RS trở lại Crystal. RS chỉ là quá nặng và chậm (hoặc một cái gì đó). Không có lý do gì phải đợi 30 giây để báo cáo hiển thị là RS khi Crystal thực hiện nó trong một giây.

Các vấn đề liên quan