report

19
LTUDQL 2 ©HCMUS . -1 - Tạo Report trên VS .NET Bùi Tấn Lộc [email protected]

Upload: dung-dinh

Post on 08-Jul-2015

1.750 views

Category:

Education


2 download

TRANSCRIPT

Page 1: Report

LTUDQL 2

©HCMUS. - 1 -

Tạo Report trên VS .NET

Bùi Tấn Lộc

[email protected]

Page 2: Report

LTUDQL 2

©HCMUS.

Nội dung

• Loại report hỗ trợ cơ bản trên VS.NET

• Crystal Report hay RDLC?

• Làm thế nào sử dụng Crystal Report trên VS .NET 2010?

• Đã cài Crystal Report, nhưng khi tạo mới 1 report (*.rpt) lại

báo lỗi lúc biên dịch, không tìm thấy control ReportViewer?

• Tạo Crystal Report với file *.mdf

- 2 -

Page 3: Report

LTUDQL 2

©HCMUS.

1.Loại report hỗ trợ cơ bản trên VS.NET

• Crystal Report (*.rpt)

• Từ phiên bản VS 2010 không còn cài sẵn, muốn sử dụng phải cài thêm

gói SAP Crystal Report

• RDLC - Report Definition Language Client-side (*.rdlc)

• Còn gọi là SQL Server Reporting Services hoặc Microsoft Report

- 3 -

Page 4: Report

LTUDQL 2

©HCMUS.

2.Crystal Report hay RDLC?

• Thông tin thảo luận trên forum Microsoft:

• http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/b1068dca-

75d6-4d93-bf9f-2371547b94e9

• So sánh giữa Crystal Report và RDLC:

• http://www.crystalreportsbook.com/SSRSandCR_Conclusion.asp

• Ý kiến cá nhân:

• RDLC có giao diện in ấn đẹp mắt

• Khi tạo setup cho ứng dụng RDLC tự động nhúng vào gói cài đặt, còn

Crystal Report phải dùng merge module

• Khi chạy trên máy khác, đối với Crystal Report cài cho VS2010 cần cài

“DotNet Framework 4 full” trên client để chạy tốt.

• Crystal Report dễ sử dụng hơn RDLC

- 4 -

Page 6: Report

LTUDQL 2

©HCMUS.

4.Đã cài Crystal Report, nhưng khi tạo mới 1 report (*.rpt) lại

báo lỗi lúc biên dịch, không tìm thấy control ReportViewer?

- 6 -

Page 7: Report

LTUDQL 2

©HCMUS.

4.(tt) Sửa lỗi trên project VB.NET

• Right Click Project/Properties/Compile/Advanced Compile Options

- 7 -

Page 8: Report

LTUDQL 2

©HCMUS.

4.(tt) Sửa lỗi trên project VB.NET

• Target framework/.NET Framework 4

- 8 -

Page 9: Report

LTUDQL 2

©HCMUS.

4.(tt) Sửa lỗi trên project C#

•Right Click Project/Properties/Application/Target

framework/.NET framework 4

- 9 -

Page 10: Report

LTUDQL 2

©HCMUS.

5.Tạo Crystal Report với file *.mdf

• Crystal Report không kết nối trực tiếp đến *.mdf. Có thể giải

quyết như sau:

• Attach *.mdf vào SQL Server (khi attach phải run as Administrator)USE [master]

GO

CREATE DATABASE [TruongHoc] ON

( FILENAME = N'C:\QuanLyTruongHoc\Presentation\bin\Debug\TruongHoc.mdf' ),

( FILENAME = N'C:\QuanLyTruongHoc\Presentation\bin\Debug\TruongHoc_Log.ldf' )

FOR ATTACH

GO

• Sử dụng Crystal Report kết nối đến CSDL SQL Server

• Vấn đề: Cystal Report sẽ xung đột truy xuất CSDL với kỹ

thuật LINQ nếu làm theo cách này!

• Nên sử dụng cùng một cách thức truy xuất CSDL cho LINQ

và Crystal Report (thông qua SQL Server)

- 10 -

Page 11: Report

LTUDQL 2

©HCMUS.

6.Áp dụng LINQ vào Crystal Report

• DataSource của CrystalReportDocument có thể là dạng kiểu

tập hợp (danh sách, bảng dữ liệu, DataSet, …)

• Chuyển kết quả truy vấn của LINQ sang dạng danh sách,

DataTable, DataSet (DataTable không bị lỗi biên dịch)

• Sử dụng .NET Framework 3.5 để biên dịch

- 11 -

Page 12: Report

LTUDQL 2

©HCMUS.

6.Áp dụng LINQ vào Crystal Report (tt)

'Thong ke hoc sinh theo diem trung binh

lstHs = hsBus.ThongKeHocSinhTheoDTB(5)

Dim tableDemo As New DataTable("demo")

tableDemo.Columns.Add("Ma")

tableDemo.Columns.Add("Ten")

tableDemo.Columns.Add("DTB")

tableDemo.Columns.Add("TenLop")

For Each item In lstHs

Dim dr As DataRow

dr = tableDemo.NewRow()

dr("Ma") = item.Ma

dr("Ten") = item.Ten

dr("DTB") = item.DTB

dr("TenLop") = item.LopHoc.Ten

tableDemo.Rows.Add(dr)

Next

rpt.SetDataSource(tableDemo)

CrystalReportViewer1.ReportSource = rpt

- 12 -

Page 13: Report

LTUDQL 2

©HCMUS.

7.Chạy ứng dụng trên máy khác – App.Config (Presentation)

<?xml version="1.0"?>

<configuration>

<startup>

<supportedRuntime version="v2.0.50727"/></startup>

<appSettings>

<add key="connectionString" value="Data Source=BTLOC-LAPTOP\SQLEXPRESS;Initial Catalog=TruongHoc;IntegratedSecurity=True" />

</appSettings>

</configuration>

• Khi biên dịch sẽ tạo ra file <TenProject>.exe.config có nội dung

như trên. File này nằm cùng thư mục với tập tin thực thi. Chỉ

cần chỉnh sửa giá trị của file config được biên dịch này là có thể

chạy trên máy khác.

- 13 -

Page 14: Report

LTUDQL 2

©HCMUS.

7.Chạy ứng dụng trên máy khác – Đọc chuỗi kết nối

Dim cnStr As String

cnStr = System.Configuration.ConfigurationSettings.AppSettings("ConnectionString")

- 14 -

Page 15: Report

LTUDQL 2

©HCMUS.

7. Chạy ứng dụng trên máy khác

Thay đổi chuỗi kết nối cho Crystal Report

Dim rpt As New rptDanhSachHocSinh()

MyModule.ChangeConnection(rpt, cnStr)

Dim lhBus As New LopHocBus(cnStr)

Dim dsLopHoc As IList

dsLopHoc = lhBus.LayDanhSach()

- 15 -

Page 16: Report

LTUDQL 2

©HCMUS.

7. Chạy ứng dụng trên máy khác

Hàm ChangeConnection

Dim conn_string_array() As String = Split(cnStr, ";")

Dim key_value() As String

For i = 0 To conn_string_array.Count - 1

key_value = Split(conn_string_array(i), "=")

If key_value(0).ToLower = "data source" Then

server_name = key_value(1)

ElseIf key_value(0).ToLower = "initial catalog" Then

database_name = key_value(1)

ElseIf key_value(0).ToLower = "user id" Then

user_id = key_value(1)

ElseIf key_value(0).ToLower = "password"Then

password = key_value(1)

ElseIf key_value(0).ToLower = "integrated security" Then

sspi = key_value(1)

End If

Next

For i = 0 To rpt.Database.Tables.Count - 1

Dim logoninfo As TableLogOnInfo

logoninfo = rpt.Database.Tables(i).LogOnInfo

logoninfo.ConnectionInfo.ServerName = server_name

logoninfo.ConnectionInfo.DatabaseName = database_name

logoninfo.ConnectionInfo.UserID = user_id

logoninfo.ConnectionInfo.Password = password

logoninfo.ConnectionInfo.IntegratedSecurity= sspi

rpt.Database.Tables.Item(i).ApplyLogOnInfo(logoninfo)

Next

- 16 -

Page 17: Report

LTUDQL 2

©HCMUS.

7. Chạy ứng dụng trên máy khác

Thay đổi chuỗi cnStr cho LINQ

Public Class LopHocBus

Private _cnStr As String

Public Sub New(ByVal cnStr As String)

_cnStr = cnStr

End Sub

Public Function LayDanhSach() As IList

'Kiem tra business rule neu co

Dim db As New TruongHocDataContext(_cnStr)

Dim query = From lh In db.LopHocs

Select lh

Return query.ToList()

End Function

End Class

- 17 -

Page 18: Report

LTUDQL 2

©HCMUS.

8.Áp dụng

• Làm lại theo video demo

• Thử đem ứng dụng lên máy 1 người khác chạy

- 18 -

Page 19: Report

LTUDQL 2

©HCMUS.

Câu hỏi?

- 19 -