Đã xong bước tạo report, trên Form1 chúng ta tạo lúc nãy,kéo vô 1 cái Button và 1 cái CrystalReportViewer control,khi click vô button thì sẽ hiện ra báo cáo :PHP Code: ReportDocument cry
Trang 1Hôm nay tui sẽ dành viết mấy bài tut cơ bản nhất về crystal reports!
Đầu tiên, ta tạo 1 database nhỏ để làm việc với nó, các bạn tạo trong sqlserver 1 database
có tên là example, có 3 table là OrderMaster , OrderDetails ,Product
CREATE TABLE [ dbo ].[ OrderMaster ](
[ OrderMaster_id ] [ int ] NOT NULL ,
[ OrderMaster_date ] [ datetime ] NULL ,
[ OrderMaster_customername ] [ varchar ]( 50 ) NULL ,
[ OrderMaster_createduser ] [ varchar ]( 50 ) NULL ,
CONSTRAINT [ PK_OrderMaster ] PRIMARY KEY CLUSTERED
(
[ OrderMaster_id ] ASC
) WITH ( PAD_INDEX = OFF , STATISTICS_NORECOMPUTE = OFF , IGNORE_DUP_KEY =
OFF , ALLOW_ROW_LOCKS = ON , ALLOW_PAGE_LOCKS = ON ) ON [ PRIMARY ]
CREATE TABLE [ dbo ].[ OrderDetails ](
[ OrderDetails_id ] [ int ] NOT NULL ,
[ OrderDetails_masterid ] [ int ] NULL ,
[ OrderDetails_productid ] [ int ] NULL ,
[ OrderDetails_qty ] [ int ] NULL ,
CONSTRAINT [ PK_OrderDetails ] PRIMARY KEY CLUSTERED
(
[ OrderDetails_id ] ASC
) WITH ( PAD_INDEX = OFF , STATISTICS_NORECOMPUTE = OFF , IGNORE_DUP_KEY =
OFF , ALLOW_ROW_LOCKS = ON , ALLOW_PAGE_LOCKS = ON ) ON [ PRIMARY ]
Trang 2GO
CREATE TABLE [ dbo ].[ Product ](
[ Product_id ] [ int ] NOT NULL ,
[ Product_name ] [ varchar ]( 50 ) NULL ,
[ Product_price ] [ numeric ]( 18 , 0 ) NULL ,
CONSTRAINT [ PK_Product ] PRIMARY KEY CLUSTERED
(
[ Product_id ] ASC
) WITH ( PAD_INDEX = OFF , STATISTICS_NORECOMPUTE = OFF , IGNORE_DUP_KEY =
OFF , ALLOW_ROW_LOCKS = ON , ALLOW_PAGE_LOCKS = ON ) ON [ PRIMARY ]
) ON [ PRIMARY ]
GO
SET ANSI_PADDING OFF
GO
Tạo 1 project winform application trong VS
Vào menu PROJECT >Add New Item Chọn item là Crytal Report
Hiện ra 1 bảng chọn mẫu báo cáo, ở đây tôi sẽ để mặc định
Trang 3Connection để kết nối.
Chọn OLEDB connection ở hôp thoại Create New Connection
Điền các thông tin kết nối vào :
Trang 4Ở hộp thoại kế tiếp sẽ hiện các thông số kết nối, cứ việc Finish
Ở đây tôi muốn hiện thị table Product, nên chọn table Product
Trang 5Chọn các trường của table product
Trang 6Chọn next và chọn các kiểu hình thức của report, cuối cùng là Finish
Trang 7Đã xong bước tạo report, trên Form1 chúng ta tạo lúc nãy,kéo vô 1 cái Button và 1 cái CrystalReportViewer control,khi click vô button thì sẽ hiện ra báo cáo :
PHP Code:
ReportDocument cryRpt = new ReportDocument ();
cryRpt Load (@ "C:\Documents and Settings\Qu@n Bom\My Document s\Visual Studio 2008\Projects\Example\Example\CrystalReport1.rpt" ); crystalReportViewer1 ReportSource = cryRpt ;
crystalReportViewer1 Refresh ();
Quên, nhớ là phải using CrystalDecisions.CrystalReports.Engine;
Bài 2:
Tạo reports từ nhiều bảng
Bài trên ta đã tạo report chỉ với 1 bảng là Product, bây giờ sẽ tạo report với nhiều bảng xem sao nhé
Mọi việc cũng giống như trên, đến bước chọn các table thì ta chọn cả 3 table cho nó máu,
Trang 8sau đấy là chọn các fields muốn report :
Mọi chuyện lại tiếp tục như thế
Bài 3:
Sử dụng parameter trong crytal report
Ở bài này tôi sẽ hướng dẫn cách sử dụng String parameter
Ví dụ,bạn muốn đưa vào 1 tham số là customername,và sẽ hiện ra các đơn đặt hàng của khách hàng đó ở report
Ở đây, tui sẽ sử dụng tiếp cái report đã tạo ở bài trên
Chọn Fields Explorer (menu Crytal Reports ->Fields Explorer),chuột phải vào Parameter Fields,rồi new,điền các tham số vào :
Trang 9Tôi chọn kiểu là string, các kiểu khác làm cũng tương tự
Sau khi tạo xong parameter, ta sẽ tạo biểu thức cho các fields,vào cửa sổ design của crytal reports rồi làm như hình :
Trang 10Hiện ra 1 editor để bạn thiết kế fomular, muốn sử dụng field nào thì chọn field đó,các bạn
cứ làm theo thứ tự tớ oánh số trong hình nhá
Trang 11Thiết kế form như trong hình :
Trang 12Bi giờ ta viết code cho sự kiện của nút show
Trang 13Tạo reports từ DataSet
Mấy bài trước tui chỉ tạo report từ database, ở bài này tui sẽ tạo 1 report từ DataSet coi sao nhé
Tạo 1 project winform mới, add thêm vào 1 DataSet,giữ nguyên các thông tin mặc định của nó,trên DataSet đó ta tạo ra 1 datatable có 2 column là ID và Item :
Trang 14Bây giờ ta sẽ tạo 1 report từ DataSet mới tạo ra Vào menu Project->Add new item, chọn crytal report như mấy cái trên kia, để các thông số mặc định luôn cho tiện Nhưng ở đây
ta ko tạo ra connect tới database nào mà chọn luôn dataset lúc này :
Ở bước kế tiếp, chọn luôn cả 2 column của DataTable trên DataSet lúc nãy nhé
Trang 15Bây giờ tạo thêm vào form 1 cái button và 1 crystalReportViewer control như mấy cái trước Tui sẽ tạo dữ liệu đơn giản cho dataset và hiển thị ở report :
C# code:
Lựa chọn code | Ẩn/Hiện codeprivate void button1_Click(object sender, EventArgs e)
{
DataSet1 ds = new DataSet1();
DataTable t = ds.Tables.Add("Items");
t.Columns.Add("id",
Type.GetType("System.Int32"));
t.Columns.Add("Item",
Type.GetType("System.String"));
Trang 16CrystalReport1 objRpt = new CrystalReport1(); objRpt.SetDataSource(ds.Tables[1]);
crystalReportViewer1.ReportSource = objRpt; crystalReportViewer1.Refresh();
}
bai 5:
Tạo reports từ Sql query
Ở bài này tui sẽ tạo report từ kết quả của các query trong Sql, vẫn sử dụng DataSet.Tui sẽ tạo report cho bảng Product trong cái database đã nói ở bài trên cùng nhé,câu truy vấn của chúng ta như sau :
PHP Code:
sql = "SELECT Product_id,Product_name,Product_price FROM Product" ; Tạo mới 1 project winform và add vào 1 DataSet mới,trên DataSet đó tạo thêm 1
DataTable, và trên DataTable đó ta add 3 column vào nhá
Tuơng tự như bài vừa trên, tui sẽ tạo thêm 1 crytal report và vẫn sử dụng ProjectData :
Trang 17Ở bước kế tiếp tui sẽ chọn cả 3 fields Product_id,Product_name,Product_price.
Đã xong phần thiết kế report
Theo truyền thống, ta lai tạo 1 button và 1 crytalReportViewer như mấy cái trên kia nhéC# code:
Lựa chọn code | Ẩn/Hiện codeprivate void button1_Click(object sender, EventArgs e)
Product_id,Product_name,Product_price FROM Product";
SqlDataAdapter dscmd = new SqlDataAdapter(sql, cnn);
DataSet1 ds = new DataSet1();
dscmd.Fill(ds, "Product");
Trang 18Tạo dynamic reports trong C#
Mấy bài trước, chúng ta tạo report từ những database đã được chọn sẵn, bây giờ ta tạo report từ kết quả của các query SQL lúc runtime
Ta cũng tạo project winform và cũng thêm vào 1 DataSet như bài trên kia nhưng ko kết nối vào database nào cả Trên Dataset, ta cũng thêm 1 datatable vào DataSet đó, trên Datatable ta tạo mấy cái column như sau:
Tạo thêm 1 cái crytal report như baì trước!
Các bạn thực hiện như các bước ở các bài trên tớ làm, cũng sử dụng ProjectData và chọn tất cả cac column của cái Datatable vừa tạo nhá
Trang 19Bi giờ ta sẽ thiết kế 1 cài Form như bên giưới,report sẽ phụ thuộc vào cac queyry lúc runtime:
Trang 20Viết 1 hàm xử lý cho các query nhập vào :
string inSql = null;
string firstPart = null;
string lastPart = null;
inSql = textBox1.Text;
inSql = inSql.ToUpper();
Trang 21fromStart = inSql.IndexOf("FROM");
selectStart = selectStart + 6;
firstPart = inSql.Substring(selectStart,
(fromStart - selectStart));
lastPart = inSql.Substring(fromStart,
inSql.Length - fromStart);
fields = firstPart.Split(',');
objRpt.ReportDefinition.ReportObjects[i+1];
MyText.Text = fields[i].ToString();
(TextObject)objRpt.ReportDefinition.ReportObjects[i+1];
MyText.Text = fields[i].ToString();
connectionString = "data source=SERVER
NAME;initial catalog=crystaldb;user id=USER
NAME;password=PASSWORD;";
Trang 22objRpt.SetDataSource(ds.Tables[1]);
crystalReportViewer1.ReportSource = objRpt;
crystalReportViewer1.Refresh();
}
À các bạn nhớ using mấy cái namespace cần thiết nhá
Còn 1 điều nữa là mọi vi dụ đều dùng database ở bài đâu,khi chạy ví dụ thì các bạn nhớ chỉnh lại chuỗi kết nối cho phù hợp
Trang 23Xuất kết quả report ra Excel,PDF
Đọc mấy bài ở trên các bạn chắc đã nắm đc sơ sơ về crytal report rùi, giờ nói thêm về việc trích xuất ra các định dạng của Excel hoặc PDF
Các bạn cỏ thể sử dụng ExportOptions để tùy chỉnh các định dạng trích xuất
Quay lại bài đầu tiên, ta thêm 2 cái button nữa,sau khi đã tạo và hiển thị thành công report, ta có thể export ra pdf hoặc excel
Đây là export ra 1 file excel (file test.xls sẽ dc tạo ở ổ C)
C# code:
Lựa chọn code | Ẩn/Hiện codetry
{
Trang 24CrExportOptions.ExportFormatType =
ExportFormatType.PortableDocFormat;
CrExportOptions.DestinationOptions = CrDiskFileDestinationOptions;
CrExportOptions.FormatOptions =
CrFormatTypeOptions;