• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

[.Net] Dynamic Crystal Report

Các bài viết hướng dẫn về Visual Basic .NET và C#

Điều hành viên: tungcan5diop, QUANITGROBEST

Hình đại diện của người dùng
thuytrang2542000
Thành viên tích cực
Thành viên tích cực
Bài viết: 155
Ngày tham gia: T.Hai 21/04/2008 3:10 am
Đến từ: TP.HCM
Been thanked: 6 time

[.Net] Dynamic Crystal Report

Gửi bàigửi bởi thuytrang2542000 » CN 18/01/2009 11:23 pm

Tên bài viết: Dynamic Crystal Report
Tác giả: Đoàn Thị Thùy Trang
Cấp độ bài viết: Cơ bản + Hơi nâng cao
Tóm tắt: Hướng dẫn thao tác với Crystal Report động (Crystal Report.Net)


Dynamic Crystal Report


-Đa số các trường hiển thị trong các báo cáo đều được thiết kế cố định, tức là lúc thiết kế thế nào thì lúc hiển thị nó sẽ y thế ấy. Tuy nhiên, trong một số trường hợp, chúng ta lại có nhu cầu điều khiển, tùy biến việc hiển thị của các trường đó, vậy phải làm thế nào đây? Tạo report động.
-Bài viết này là kết quả của quá trình tìm hiểu, học hỏi của mình. Vì vậy, để hiển thị một report động, cách thực hiện của mình có thể hơi dài dòng một xíu. Nói chung, nó cũng còn theo phong cách “du kích”, đụng đâu đánh đó thôi, mà kệ, miễn nó chạy ầm ầm hong báo lỗi là ok òi. Bạn nào có cách hay hơn thì chia xẻ nhé. Nếu không thì … cũng hong sao. :D Mình cũng mới tập viết tut thôi nên nếu thấy chỗ nào khó hiểu hay lướt quá thì mọi người cứ đóng góp ý kiến nha.

1. Giới thiệu:
“Tin học” là gì ? Hì, hiểu nôm na, mau lẹ là có tin mới học :)) Bởi vậy, học qua ví dụ là cách tốt nhất, hiệu quả nhất. Nào bắt đầu nhá.
- Dữ liệu để test report: Đặt trong thư mục Data của Project
- Tên CSDL: DynamicReport.mdb Pass: 123
DynamicReportVB.rar
Dynamic Crystal Report (VB.Net)
(74.74 KiB) Đã tải 7313 lần

2. Module phục vụ cho việc hiển thị report:
- Kiểm tra sự tồn tại của bảng dữ liệu trong CSDL. Trong đó, tablename là tên bảng cần kiểm tra.

Mã: Chọn hết

 Function Kiemtra(ByVal tablename As String) As Boolean   Dim dt As DataTable = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, _                                New Object() {Nothing,Nothing, Nothing, "TABLE"})   For Each dr As DataRow In dt.Rows        If dr("TABLE_NAME") = tablename Then             Kiemtra = True             Exit For        End If    Next    Return KiemtraEnd Function 


- Hiển thị report:

Mã: Chọn hết

 Sub ShowReport(ByVal frm As FrmReport, ByVal rpt As ReportDocument, _                       ByVal ds As DataSet, _                       Optional ByVal bien() As Integer = Nothing, _                       Optional ByVal giatri() As String = Nothing)    rpt.SetDatabaseLogon("Admin", "123")    rpt.SetDataSource(ds)    If Not bien Is Nothing Then          For i As Integer = 0 To bien.Length - 1              rpt.SetParameterValue(bien(i), giatri(i))          Next    End If    frm.crp.ReportSource = rpt    frm.crp.Refresh()    frm.crp.Zoom(100)    frm.Show() End Sub 


Trong đó:
+ FrmReport: form hiển thị Report, form này chứa control CrystalReportViewer tên là crp.
+ bien, giatri: các tham số tùy chọn dùng để truyền giá trị cho các parameter trong report. Nếu report không có thì thiết lập bằng nothing.

- Thực thi câu truy vấn sql

Mã: Chọn hết

 Sub execute(ByVal s As String)      Dim cmd As OleDbCommand = New OleDbCommand(s, con)      cmd.ExecuteNonQuery()      cmd.Dispose()      cmd = NothingEnd Sub 
Sửa lần cuối bởi thuytrang2542000 vào ngày CN 18/01/2009 11:56 pm với 3 lần sửa.


^^ Nhìn lên thì không bằng ai . Nhìn xuống thì hổng còn ai ngoài mình ^^

Hình đại diện của người dùng
thuytrang2542000
Thành viên tích cực
Thành viên tích cực
Bài viết: 155
Ngày tham gia: T.Hai 21/04/2008 3:10 am
Đến từ: TP.HCM
Been thanked: 6 time

Re: [.Net] Dynamic Crystal Report

Gửi bàigửi bởi thuytrang2542000 » CN 18/01/2009 11:39 pm

3. Các ví dụ report động: ví dụ dễ thấy nhất là trong quản lý lương nên mình cho toàn ví dụ về lương thôi :D
a. Cơ bản: vẫn còn trong khả năng thiết kế, mặc dù hơi phiền 1 xíu. :(
hinh1.JPG
hinh1.JPG (8.93 KiB) Đã xem 20269 lần

- optThang, cboThang, cboNamThang
- optQuy, cboQuy, cboNamQuy
- btnXem, btnThoat

Ví dụ 1:
- Trường hợp Quyết toán lương theo quý. Một năm có 4 quý. Xem theo quý 1 thì sẽ hiện thông tin lương tháng 1,2,3 ; quý 2 sẽ hiện tháng 4,5,6 ;quý 3 sẽ hiện tháng 7,8,9 ; quý 4 sẽ hiện tháng 10,11,12. Xét chung lại thì chỉ có 4 trường hợp này xảy ra. Vì vậy, đối với trường hợp này, ta chỉ cần làm 1 việc rất ư là đơn giản, ngồi thiết kế 4 cái report tương ứng cho 4 quý. >:)
- Giải quyết: tạo 1 bảng tạm để lấy dữ liệu theo từng quý. Sau đó thiết kế report dựa vào bảng đó. Đầu tiên là quý 1. Ta sẽ select dữ liệu theo quý 1 rồi đưa ra bảng tạm có tên là LQ rồi thực hiện theo các bước sau :
Bước 1: Tạo Report dùng Report Wizard cho nhanh nhé. Trong Create New Connection --- > Access/Excel(DAO) và thiết lập như hình -- > chọn bảng LQ làm nguồn --- > Next --- > Next --- > Finish

hinh2.JPG


hinh3.JPG


Bước 2: Kéo các field vô, thiết kế, chỉnh sửa lại report. Vậy là xong … được 1 quý.
Bước 3: Xóa cái table tạm LQ ở trên đi, select dữ liệu theo quý 2 rồi đưa vào bảng tạm có tên là LQ, thực hiện lại các bước trên. Tương tự cho các quý còn lại.
Bước 4: Hiển thị report.

Mã: Chọn hết

  1.  
  2. Dim tablename As String
  3. Dim nam As String
  4. nam = cboNamQuy.Text.Trim
  5. ' Kiểm tra sự tồn tại của bảng LQ trong dữ liệu, nếu có thì xóa nó đi, nếu chưa có thì tạo bảng LQ
  6. '--------------------------
  7. If Kiemtra("LQ") Then execute(" Drop table LQ ")
  8. Dim Q As String = cboQuy.Text.Trim
  9. Dim s As String = ""
  10. Dim s1 As String = " Select "
  11. Dim s2 As String = " "
  12. Dim s3 As String = " From "
  13. Dim f As Boolean = False
  14. Dim p As String = ""
  15. For i As Integer = (((CInt(Q) - 1) * 3) + 3) To (((CInt(Q) - 1) * 3) + 1) Step -1
  16.     If i < 10 Then
  17.          tablename = "Luong0" & Trim(Str(i)) & Trim(nam)
  18.     Else
  19.          tablename = "Luong" & Trim(Str(i)) & Trim(nam)
  20.     End If
  21.     If Kiemtra(tablename) Then
  22.         If f = False Then
  23.            s1 = s1 & tablename & ".MaNV," & tablename & ".Hoten," & tablename & ".MaCV," & tablename & ".TenCV," & tablename & ".MaBP," & tablename & ".TenBP,"
  24.            s2 = "iif(" & tablename & ".Thuclanh is null,0," & tablename & ".Thuclanh) as T" & Mid(tablename, 6, 2) & s2
  25.            p = tablename
  26.            f = True
  27.            s3 = s3 & tablename
  28.         Else
  29.            s1 = s1
  30.            s2 = "iif(" & tablename & ".Thuclanh is null,0," & tablename & ".Thuclanh) as T" & Mid(tablename, 6, 2) & "," & s2
  31.            s3 = s3 & " left join " & tablename & " on " & p & ".MaNV=" & tablename & ".MaNV"
  32.         End If
  33.     Else
  34.         If f = False Then
  35.            s1 = s1
  36.            s2 = " , 0 as T" & Mid(tablename, 6, 2) & s2
  37.         Else
  38.            s1 = s1
  39.            s2 = " 0 as T" & Mid(tablename, 6, 2) & "," & s2
  40.         End If
  41.      End If
  42.      s = s1 & s2 & " into LQ " & s3
  43. Next
  44. Dim s4 As String = s
  45. '---------------------------------------------
  46. If f = True Then
  47.     ‘tạo bảng tạm LQ
  48.      execute(s4)
  49.      'gọi report
  50.      Dim daLQ As New OleDbDataAdapter("Select * From LQ", con)
  51.      Dim dsLQ As DataSet = New DataSet()
  52.      daLQ.Fill(dsLQ)
  53.      If CInt(Q) = 1 Then ShowReport(FrmReport, New crpLQ1(), dsLQ, _
  54.                                      New Integer() {0, 1}, New String() {Q, nam})
  55.      If CInt(Q) = 2 Then ShowReport(FrmReport, New crpLQ2(), dsLQ, _
  56.                                      New Integer() {0, 1}, New String() {Q, nam})
  57.      If CInt(Q) = 3 Then ShowReport(FrmReport, New crpLQ3(), dsLQ, _
  58.                                      New Integer() {0, 1}, New String() {Q, nam})
  59.      If CInt(Q) = 4 Then ShowReport(FrmReport, New crpLQ4(), dsLQ, _
  60.                                      New Integer() {0, 1}, New String() {Q, nam})
  61. Else
  62.     MessageBox.Show("Không có dữ liệu quý " & cboQuy.Text & " năm " & nam)
  63. End If
  64.  


Kết quả :
hinh4.JPG
Sửa lần cuối bởi thuytrang2542000 vào ngày T.Hai 19/01/2009 12:00 am với 1 lần sửa.
^^ Nhìn lên thì không bằng ai . Nhìn xuống thì hổng còn ai ngoài mình ^^

Hình đại diện của người dùng
thuytrang2542000
Thành viên tích cực
Thành viên tích cực
Bài viết: 155
Ngày tham gia: T.Hai 21/04/2008 3:10 am
Đến từ: TP.HCM
Been thanked: 6 time

Re: [.Net] Dynamic Crystal Report

Gửi bàigửi bởi thuytrang2542000 » CN 18/01/2009 11:53 pm

Ví dụ 2:
- Trường hợp xem bảng lương theo tháng, khi người dùng chọn tháng nào thì cho xem bảng lương tháng đó. Các bảng lương tháng có cấu trúc giống nhau, chỉ khác ở phần số liệu trong từng tháng. Trong đó các bảng lương tháng được đặt tên theo nguyên tắc sau : Luong[thang][nam] . Ví dụ: Luong072008
- Giải quyết: yêu cầu trong dữ liệu phải tổn tại 1 bảng lương tháng bất kỳ dùng để phục vụ cho việc thiết kế.
Bước 1: Tạo Blank Report.
Bước 2: Right Click vào Database Fields --- > Database Expert …
hinh5.JPG

Bước 3: Chọn Add Command rồi gõ câu sql vô như hình
hinh6.JPG

Trong đó:
+{?thang} {?nam} là các parameter cần truyền vào để report biết đó là bảng lương của tháng nào, năm nào. Để tạo các parameter này, chọn Create… ,trong phần Default Value gõ vào tháng của bảng lương (tồn tại trong dữ liệu). Ví dụ trong dữ liệu ta có bảng lương Luong072008 thì gõ vào 07 . Tương tự, đối với parameter nam gõ vào 2008 .
+ Chọn Value Type kiểu gì thì khi truyền biến từ form vào report nhớ truyền theo kiểu ấy.
hinh7.JPG
hinh7.JPG (15.42 KiB) Đã xem 20247 lần

Bước 4: Kéo các field vào và thiết kế, chỉnh sửa lại report.
Bước 5: Hiển thị Report

Mã: Chọn hết

  1.  
  2. Dim tablename As String
  3. Dim thang As String
  4. Dim nam As String
  5. nam = cboNamThang.Text.Trim
  6. thang = cboThang.Text.Trim
  7. If CInt(cboThang.Text) < 10 Then thang = "0" + cboThang.Text.Trim
  8. tablename = "Luong" + Trim(thang) + Trim(nam)
  9. 'Kiểm tra bảng dữ liệu
  10. If Kiemtra(tablename) Then
  11.      Dim daLT As New OleDbDataAdapter("Select * From " & tablename, con)
  12.      Dim dsLT As DataSet = New DataSet()
  13.      daLT.Fill(dsLT)
  14.      ShowReport(FrmReport, New crpLuongThang(), dsLT, _
  15.                                                     New Integer() {0, 1}, New String() {nam, thang})
  16. Else
  17.       MessageBox.Show("Không có dữ liệu tháng " & thang & " năm " & nam, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information)
  18. End If
  19.  


Kết quả:
hinh8.JPG
^^ Nhìn lên thì không bằng ai . Nhìn xuống thì hổng còn ai ngoài mình ^^

Hình đại diện của người dùng
thuytrang2542000
Thành viên tích cực
Thành viên tích cực
Bài viết: 155
Ngày tham gia: T.Hai 21/04/2008 3:10 am
Đến từ: TP.HCM
Been thanked: 6 time

Re: [.Net] Dynamic Crystal Report

Gửi bàigửi bởi thuytrang2542000 » CN 18/01/2009 11:58 pm

b. Nâng cao (1 xíu thôi :D )
chờ mọi người cho ý kiến phần trên ròi mới viết tiếp :x
^^ Nhìn lên thì không bằng ai . Nhìn xuống thì hổng còn ai ngoài mình ^^

Hình đại diện của người dùng
tungcan5diop
Cựu chiến binh
Cựu chiến binh
Bài viết: 1123
Ngày tham gia: T.Tư 24/09/2008 4:04 pm
Đến từ: TPHCM
Has thanked: 1 time
Been thanked: 28 time

Re: [.Net] Dynamic Crystal Report

Gửi bàigửi bởi tungcan5diop » T.Hai 02/03/2009 1:32 pm

bài viết đang hay mà Trang,Trang viết tiếp luôn đi,thành một bài hoàn chỉnh để mình đưa vào bài viết Hướng Dẫn luôn,tui và một số mem nữa chắc chắn là rất cần những cái mà Trang đang viết,viết tiếp nha :D
Hỡi thế gian bug(lỗi) là gì?
Mà sửa...hoài không hết!

huycodon
Bài viết: 5
Ngày tham gia: T.Bảy 08/11/2008 8:49 am

Re: [.Net] Dynamic Crystal Report

Gửi bàigửi bởi huycodon » T.Ba 17/03/2009 8:01 pm

Bạn ơn mình cũng rất cần tài liệu này! Bạn cho mình hỏi mình có cơ sở dữ liệu trong SQL Sever 2000 mình muốn tạo 01 report trong vb 6.0. Thì mình phải làm như thế nào rất mong bạn giup

Hình đại diện của người dùng
thuytrang2542000
Thành viên tích cực
Thành viên tích cực
Bài viết: 155
Ngày tham gia: T.Hai 21/04/2008 3:10 am
Đến từ: TP.HCM
Been thanked: 6 time

Re: [.Net] Dynamic Crystal Report

Gửi bàigửi bởi thuytrang2542000 » T.Ba 17/03/2009 9:44 pm

@huycodon: Bạn nè, bạn dùng CrystalReport luôn à, nếu bạn dùng nó thì T sẽ giúp bạn. T dùng CrystalReport10. Cũng tương tự như cái hướng dẫn T viết ở trên thôi. Để T coi lại đã. Lâu không viết VB rồi :(
^^ Nhìn lên thì không bằng ai . Nhìn xuống thì hổng còn ai ngoài mình ^^

hatrunghoa
Thành viên chính thức
Thành viên chính thức
Bài viết: 18
Ngày tham gia: T.Bảy 27/09/2008 11:37 am

Re: [.Net] Dynamic Crystal Report

Gửi bàigửi bởi hatrunghoa » T.Ba 17/03/2009 10:46 pm

Download về dùng thử xem sao

Hình đại diện của người dùng
huongsonngochung
Thành viên chính thức
Thành viên chính thức
Bài viết: 38
Ngày tham gia: T.Bảy 07/02/2009 8:34 am
Đến từ: Hồ Chí Minh
Has thanked: 2 time
Been thanked: 3 time
Liên hệ:

Re: [.Net] Dynamic Crystal Report

Gửi bàigửi bởi huongsonngochung » T.Tư 13/05/2009 4:41 pm

Cám ơn nhiều, Mình đang cần cái này.
HƯƠNG SƠN NGỌC HƯNG

longlanh123123
Thành viên chính thức
Thành viên chính thức
Bài viết: 10
Ngày tham gia: T.Hai 16/03/2009 10:48 am

Re: [.Net] Dynamic Crystal Report

Gửi bàigửi bởi longlanh123123 » T.Tư 13/05/2009 10:24 pm

bạn thuytrang ơi bạn có thể up lên đoạn code kiểm tra sự tồn tại của bảng 'LQ' khi kết nối với Sql server 2000 được không? và cả cách bạn tạo bảng tam LQ như thế nào nữa.

Hình đại diện của người dùng
thuytrang2542000
Thành viên tích cực
Thành viên tích cực
Bài viết: 155
Ngày tham gia: T.Hai 21/04/2008 3:10 am
Đến từ: TP.HCM
Been thanked: 6 time

Re: [.Net] Dynamic Crystal Report

Gửi bàigửi bởi thuytrang2542000 » T.Hai 18/05/2009 9:24 pm

cách t dùng
1. kiểm tra sự tồn tại của bảng: ví dụ kiểm tra bảng 'HopDong' xem có tồn tại trong CSDl hay không

Mã: Chọn hết

  1.  
  2. SELECT name
  3. FROM  sysobjects
  4. WHERE name='HopDong'  
  5.  

2. tạo bảng LQ , t dùng sql "Select ... Into LQ From ...."

Mã: Chọn hết

  1.  
  2. #Region "Thực thi câu sql"
  3.     Public Sub execute(ByVal s As String)
  4.         Dim cmd As SqlCommand = New SqlCommand(s, con)
  5.         cmd.ExecuteNonQuery()
  6.         cmd.Dispose()
  7.         cmd = Nothing
  8.     End Sub
  9. #End Region
  10.  

Mã: Chọn hết

  1.  
  2. If KiemTra("LQ") Then execute(" Drop table LQ ")
  3. Dim Q As String = cboQuy.Text.Trim
  4. Dim s As String = ""
  5. Dim s1 As String = " Select "
  6. Dim s2 As String = " "
  7. Dim s3 As String = " From "
  8. Dim f As Boolean = False
  9. Dim p As String = ""
  10. For i As Integer = (((CInt(Q) - 1) * 3) + 3) To (((CInt(Q) - 1) * 3) + 1) Step -1
  11.     If i < 10 Then
  12.        tablename = "Luong0" & Trim(Str(i)) & Trim(nam)
  13.     Else
  14.        tablename = "Luong" & Trim(Str(i)) & Trim(nam)
  15.     End If
  16.     If KiemTra(tablename) Then
  17.        If f = False Then
  18.          s1 = s1 & tablename & ".MaNV," & tablename & ".Hoten," & tablename & ".MaCV," & tablename & ".TenCV," & tablename & ".MaBP," & tablename & ".TenBP,"
  19.          s2 = tablename & ".Thuclanh as T" & Mid(tablename, 6, 2) & s2
  20.          p = tablename
  21.          f = True
  22.          s3 = s3 & tablename
  23.        Else
  24.          s1 = s1
  25.          s2 = tablename & ".Thuclanh as T" & Mid(tablename, 6, 2) & "," & s2
  26.          s3 = s3 & " left join " & tablename & " on " & p & ".MaNV=" & tablename & ".MaNV"
  27.        End If
  28.     Else
  29.        If f = False Then
  30.           s1 = s1
  31.           s2 = " , 0 as T" & Mid(tablename, 6, 2) & s2
  32.        Else
  33.           s1 = s1
  34.           s2 = " 0 as T" & Mid(tablename, 6, 2) & "," & s2
  35.        End If
  36.     End If
  37.     s = s1 & s2 & " into LQ " & s3
  38.     Next
  39.     Dim s4 As String = s
  40.     MessageBox.Show(s4)
  41.     If f = True Then
  42.        execute(s4)
  43.        'Update giá trị null
  44.        For i As Integer = (((CInt(Q) - 1) * 3) + 3) To (((CInt(Q) - 1) * 3) + 1) Step -1
  45.            If i < 10 Then
  46.                execute("Update LQ set T0" & i & "=0 where T0" & i & " is Null")
  47.            Else
  48.                execute("Update LQ set T" & i & "=0 where T" & i & " is Null")
  49.            End If
  50.         Next
  51. '//////////////////////////// xem report
  52. If CInt(Q) = 1 Then showreport(FrmReport, New crpLQ1(), New Integer() {0, 1}, New String() {Q, nam})
  53. If CInt(Q) = 2 Then showreport(FrmReport, New crpLQ2(), New Integer() {0, 1}, New String() {Q, nam})
  54. If CInt(Q) = 3 Then showreport(FrmReport, New crpLQ3(), New Integer() {0, 1}, New String() {Q, nam})
  55. If CInt(Q) = 4 Then showreport(FrmReport, New crpLQ4(), New Integer() {0, 1}, New String() {Q, nam})
  56. '/////////////////////
  57. Else
  58.      MessageBox.Show("Không có dữ liệu quý " & cboQuy.Text & " năm " & nam)
  59. End If
  60.  
^^ Nhìn lên thì không bằng ai . Nhìn xuống thì hổng còn ai ngoài mình ^^

tamnv
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 56
Ngày tham gia: T.Năm 30/04/2009 10:52 pm

Re: [.Net] Dynamic Crystal Report

Gửi bàigửi bởi tamnv » T.Hai 25/05/2009 10:21 pm

Bạn ơi mình chạy chương trình lỗi "Logon failed, Please try again", Đồng thời khi tắt Chương trình màn hình nhấp nháy đến 5 phút rồi mới thoát được.

Hình đại diện của người dùng
hoangthu1974
Guru
Guru
Bài viết: 813
Ngày tham gia: T.Năm 09/03/2006 9:30 am
Đến từ: Hà Nội --> Tp. Hồ Chí Minh
Been thanked: 13 time
Liên hệ:

Re: [.Net] Dynamic Crystal Report

Gửi bàigửi bởi hoangthu1974 » T.Ba 07/07/2009 8:58 pm

Chào mừng thuytrang tái xuất giang hồ. Bài viết của em rất hay.
Anh chỉ bổ sung một chi tiết nhỏ thôi

Mã: Chọn hết

  1. Function Kiemtra(ByVal tablename As String) As Boolean
  2.     Dim dt As DataTable = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, _
  3.                                                                         New Object() {Nothing,Nothing, Nothing, "TABLE"})
  4.     For Each dr As DataRow In dt.Rows
  5.         If dr("TABLE_NAME") = tablename Then Return True
  6.     Next
  7.     Return False
  8. End Function

Lệnh Return sẽ nhảy ra khỏi For ngay lập tức. Và, theo như vo_minhdat2007, For Each sẽ chạy chậm hơn For..Next 500 lần nên nếu ở project cần xử lý nhiều, nên dùng hàm For i As Integer = 0 to dt.Rows.Count - 1 Step 1 để tăng tốc độ xử lý.

manhit45

Re: [.Net] Dynamic Crystal Report

Gửi bàigửi bởi manhit45 » T.Bảy 15/08/2009 10:02 am

Khi in ra báo cáo em nhập mật khẩu 123 mà không được thế là sao nhỉ.

phuongtagtime
Bài viết: 1
Ngày tham gia: T.Năm 31/12/2009 11:50 am

Re: [.Net] Dynamic Crystal Report

Gửi bàigửi bởi phuongtagtime » CN 10/01/2010 9:11 am

Xin chào cả nhà !
Mình có một số thắc mắc về bài viết trên
1. Bài viết của "thuytrang2542000" là kết nối csdl từ bảng trong access nếu mà kết nối từ querry thì code sửa lại như thế nào
2. Không biết trong query mình lọc dữ liệu theo từng tháng được không ?
Xin cả nhà giải đáp thắc mắc giùm mình nhé
Thanks a lot !

Hình đại diện của người dùng
bocapit
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 393
Ngày tham gia: T.Năm 02/10/2008 6:34 am
Đến từ: C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\
Has thanked: 1 time
Been thanked: 44 time

Re: [.Net] Dynamic Crystal Report

Gửi bàigửi bởi bocapit » CN 10/01/2010 9:29 am

  1. Imports System.Data.SqlClient
  2. Imports CrystalDecisions.CrystalReports.Engine
  3. Imports CrystalDecisions.Shared
  4. Imports System.Data
  5. Public Class Form1
  6.     Dim objRpt As New CrystalReport1
  7.     Private Sub Button1_Click(ByVal sender As System.Object,
  8.     ByVal e As System.EventArgs) Handles Button1.Click
  9.         Dim cnn As SqlConnection
  10.         Dim connectionString As String
  11.         Dim sql As String
  12.  
  13.         connectionString = "data source=SERVERNAME; _
  14.         initial catalog=crystaldb;user id=sa;password=PASSWORD;"
  15.         cnn = New SqlConnection(connectionString)
  16.         cnn.Open()
  17.         sql = procesSQL()
  18.         Dim dscmd As New SqlDataAdapter(sql, cnn)
  19.         Dim ds As New DataSet1
  20.         dscmd.Fill(ds, "Product")
  21.         objRpt.SetDataSource(ds.Tables(1))
  22.         CrystalReportViewer1.ReportSource = objRpt
  23.         CrystalReportViewer1.Refresh()
  24.     End Sub
  25.     Public Function procesSQL() As String
  26.         Dim sql As String
  27.         Dim inSql As String
  28.         Dim firstPart As String
  29.         Dim lastPart As String
  30.         Dim selectStart As Integer
  31.         Dim fromStart As Integer
  32.         Dim fields As String()
  33.         Dim i As Integer
  34.         Dim MyText As TextObject
  35.  
  36.         inSql = TextBox1.Text
  37.         inSql = inSql.ToUpper
  38.  
  39.         selectStart = inSql.IndexOf("SELECT")
  40.         fromStart = inSql.IndexOf("FROM")
  41.         selectStart = selectStart + 6
  42.         firstPart = inSql.Substring(selectStart, (fromStart - selectStart))
  43.         lastPart = inSql.Substring(fromStart, inSql.Length - fromStart)
  44.  
  45.         fields = firstPart.Split(",")
  46.         firstPart = ""
  47.         For i = 0 To fields.Length - 1
  48.             If i > 0 Then
  49.                 firstPart = firstPart  &  " , "  _
  50.                 & fields(i).ToString() & "  AS COLUMN" & i + 1
  51.                 MyText = CType(objRpt.ReportDefinition.ReportObjects("Text"  _
  52.                 & i + 1), TextObject)
  53.                 MyText.Text = fields(i).ToString()
  54.             Else
  55.                 firstPart = firstPart & fields(i).ToString() & _
  56.                 "  AS COLUMN" & i + 1
  57.                 MyText = CType(objRpt.ReportDefinition.ReportObjects("Text" & _
  58.                  i + 1), TextObject)
  59.                 MyText.Text = fields(i).ToString()
  60.             End If
  61.         Next
  62.         sql = "SELECT " & firstPart & " " & lastPart
  63.         Return sql
  64.     End Function
  65.  
  66. End Class
  67.  


Ở đây cả núi, cái gì củng thấy hết nè! Có hình ảnh nữa, không đọc được thì củng nhìn được
http://vb.net-informations.com/crystal- ... string.htm
^#(^ Không có định mệnh, mọi chuyện do chính ta tạo nên. [-X

huongcntt
Bài viết: 3
Ngày tham gia: T.Ba 25/02/2014 5:10 pm
Đến từ: Vĩnh phúc

Re: [.Net] Dynamic Crystal Report

Gửi bàigửi bởi huongcntt » T.Ba 25/02/2014 5:24 pm

Mình không biết tải CrystalReport ở đâu cả, vì mình đang dùng VB 6.0
mình muốn mở bài Vb có sẵn nhưng ko tài nào mở đc Trang ời
toàn báo lỗi thiếu file thôi
giúp tớ với

binsun93
Bài viết: 9
Ngày tham gia: T.Tư 16/10/2013 8:37 pm

Re: [.Net] Dynamic Crystal Report

Gửi bàigửi bởi binsun93 » T.Hai 03/03/2014 9:46 pm

làm sao in theo mã vậy bạn, nó xuất hiện 1 khung với mã là @MAPB (mã phòng ban) thì mình làm 1 combobox để lấy dữ liệu rồi report ra thoi


Quay về “[.NET] Bài viết hướng dẫn”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.3 khách