• 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

Đưa Image vào 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

Romeo8x
Thành viên chính thức
Thành viên chính thức
Bài viết: 23
Ngày tham gia: T.Sáu 18/04/2008 5:49 pm
Has thanked: 2 time
Been thanked: 14 time

Đưa Image vào Crystal Report

Gửi bàigửi bởi Romeo8x » T.Sáu 16/11/2012 6:00 pm

Tên chương trình: Đưa Image vào Crystal Report
Ngôn ngữ lập trình: VB.Net
Tác giả: Romeo8x
Chức năng: Đưa Image vào Crystal Report - Dùng cho những báo cáo có ảnh


Mô tả: Project này mình đã tìm rất lâu rồi, với yêu cầu của 1 bài toán quản lý nhân sự là khi đưa ra báo cáo kèm theo ảnh cá nhân của từng nhân viên. Project này đã đáp ứng được yêu cầu đó.

Hướng dẫn: Cần có 1 Dataset gồm các trường trong bảng dữ liệu cần đưa ra báo cáo, add thêm 1 column nữa có kiểu là String.Byte() -> khi đưa column này vào Crystal Report nó sẽ là một Picture Box để ta load ảnh vào đây từ CSDL

Trong CSDL, bảng cần đưa ra báo cáo có lưu thông tin về đường dẫn tới file ảnh hoặc tên file ảnh (ở bài này mình để lưu là tên file ảnh và sẽ gán đường dẫn cho nó sau)

Đã có chú thích từng dòng code trong project. Còn chỗ nào chưa hiểu mình sẽ giải thích sau.
ImageInReport (Fixed).rar
Đưa Image vào Crystal Report
(2.48 MiB) Đã tải 1015 lần
Tập tin đính kèm
untitled.JPG



Romeo8x
Thành viên chính thức
Thành viên chính thức
Bài viết: 23
Ngày tham gia: T.Sáu 18/04/2008 5:49 pm
Has thanked: 2 time
Been thanked: 14 time

Re: Đưa Image vào Crystal Report

Gửi bàigửi bởi Romeo8x » T.Sáu 16/11/2012 8:50 pm

Vì Project này mình mới test thử trên Access, không biết khi chuyển sang SQL Server thì sẽ tnào. Ai test thử cho mình kết quả nhé.

Code cho 1 dòng dữ liệu (in 1 hồ sơ):
  1.             Dim imgLink As String 'Đường dẫn file ảnh
  2.             Dim Da As OleDbDataAdapter 'Khởi tạo DataAdapter
  3.             Dim Dt As New DataTable 'Khởi tạo 1 DataTabe rỗng mới
  4.             Da = New OleDbDataAdapter("Select * from tbHoso Where MaNV='" & Label1.Text & "'", Cn) 'Select bảng tbHoSo có điều kiện
  5.             Da.Fill(Dt) 'Fill vào DataTable
  6.             Dim cc As Integer = Dt.Columns.Count - 1 'Biến đếm số column của DataTable
  7.  
  8.             Dim rDt As New DataTable 'Khởi tạo 1 DataTable rỗng mới
  9.             Dim Dr As DataRow 'Khởi tạo DataRow
  10.             Dr = rDt.NewRow 'Add 1 row vào DataTable
  11.             For i As Integer = 0 To cc 'Duyệt từ column đầu tiên tới hết
  12.                 rDt.Columns.Add(Dt.Columns(i).Caption, Dt.Columns(i).DataType) 'Add column cho DataTable
  13.                 Dr(i) = Dt.Rows(0).Item(i).ToString 'Gán giá trị cho column thứ i của DataRow
  14.             Next
  15.             rDt.Columns.Add("img", System.Type.GetType("System.Byte[]")) 'Add thêm 1 column img vào cuối
  16.  
  17.             Dim fs As FileStream
  18.             Dim br As BinaryReader 'Khởi tạo bộ đọc file
  19.             imgLink = ImgDirPath & Dt.Rows(0).Item(cc).ToString 'Gán địa chỉ ảnh
  20.             fs = New FileStream(imgLink, FileMode.Open)
  21.             br = New BinaryReader(fs) 'Đọc file
  22.             Dim imgByte(fs.Length) As Byte 'Khởi tạo biến Byte() chứa thông tin ảnh
  23.             imgByte = br.ReadBytes(Convert.ToInt32(fs.Length)) 'Gán giá trị cho biến chứa thông tin ảnh
  24.  
  25.             Dr(cc + 1) = imgByte 'Gán biến vào culumn cuối của DataRow
  26.             rDt.Rows.Add(Dr) 'Add DataRow đã được gán đầy đủ thông tin vào DataTable
  27.             br.Close()
  28.             fs.Close()
  29.  
  30.             Dim rpt As New crHoSoNV 'Hiển thị ra Crystal Report
  31.             rpt.SetDataSource(rDt)
  32.             crv.ReportSource = rpt
  33.  
  34.             Da.Dispose()
  35.             Dt.Dispose()
  36.             rDt.Dispose()
  37.             Dr = Nothing
  38.             fs = Nothing
  39.             br = Nothing
  40.             imgByte = Nothing


Còn đây là code cho cả bảng dữ liệu (in 1 lúc nhiều hồ sơ)
  1.             Dim imgLink As String 'Đường dẫn file ảnh
  2.             Dim Da As OleDbDataAdapter 'Khởi tạo DataAdapter
  3.             Dt = New DataTable 'Khởi tạo 1 DataTable rỗng mới
  4.             Da = New OleDbDataAdapter("Select * from tbHoso order by manv", Cn) 'Select toàn bộ bảng tbHoSo
  5.             Da.Fill(Dt) 'Fill vào DataTable
  6.             Dim cc As Integer = Dt.Columns.Count - 1 'Biến đếm số column của DataTable
  7.  
  8.             Dim rDt As New DataTable 'Khởi tạo DataTable rỗng mới
  9.             Dim Dr As DataRow 'Khởi tạo DataRow
  10.             For i As Integer = 0 To cc
  11.                 rDt.Columns.Add(Dt.Columns(i).Caption, Dt.Columns(i).DataType) 'Add column cho DataTable
  12.             Next
  13.             rDt.Columns.Add("img", System.Type.GetType("System.Byte[]")) 'Add thêm 1 column img vào cuối
  14.  
  15.             Dim fs As FileStream
  16.             Dim br As BinaryReader 'Khởi tạo bộ đọc file
  17.             Dim imgByte() As Byte 'Khởi tạo biến Byte() chứa thông tin ảnh
  18.             For rc As Integer = 0 To Dt.Rows.Count - 1 'Duyệt từ đầu đến cuối bảng
  19.                 Dr = rDt.NewRow 'Add 1 Row vào DataTable
  20.                 For i As Integer = 0 To cc 'Duyệt từ column đầu đến cuối của row thứ rc
  21.                     Dr(i) = Dt.Rows(rc).Item(i).ToString 'Gán giá trị cho column thứ i của DataRow
  22.                 Next
  23.  
  24.                 imgLink = ImgDirPath & Dt.Rows(rc).Item(cc).ToString 'Gán địa chỉ ảnh
  25.                 fs = New FileStream(imgLink, FileMode.Open)
  26.                 br = New BinaryReader(fs) 'Đọc file
  27.                 ReDim imgByte(fs.Length) ' Khởi tạo lại biến chứa thông tin ảnh
  28.                 imgByte = br.ReadBytes(Convert.ToInt32(fs.Length)) 'Gán giá trị cho biến chứa thông tin ảnh
  29.  
  30.                 Dr(cc + 1) = imgByte 'Gán biến vào culumn cuối của DataRow
  31.                 rDt.Rows.Add(Dr) 'Add DataRow đã được gán đầy đủ thông tin vào DataTable
  32.                 fs.Close()
  33.                 br.Close()
  34.             Next 'Lặp lại đến row cuối cùng
  35.  
  36.             Dim rpt As New crHoSoNV
  37.             rpt.SetDataSource(rDt)
  38.             crv.ReportSource = rpt
  39.  
  40.             Da.Dispose()
  41.             Dt.Dispose()
  42.             rDt.Dispose()
  43.             Dr = Nothing
  44.             fs = Nothing
  45.             br = Nothing
  46.             imgByte = Nothing

anhhungbt9025
Thành viên chính thức
Thành viên chính thức
Bài viết: 32
Ngày tham gia: T.Tư 19/09/2012 9:01 am
Has thanked: 10 time

Re: Đưa Image vào Crystal Report

Gửi bàigửi bởi anhhungbt9025 » T.Hai 25/03/2013 8:08 am

sao em tải về và chạy lên lại bị lỗi này thế !
em dùng VS 2008
Hình ảnh

kimanh
Bài viết: 2
Ngày tham gia: T.Tư 18/04/2012 10:42 am

Re: Đưa Image vào Crystal Report

Gửi bàigửi bởi kimanh » T.Năm 04/04/2013 4:17 pm

Bạn tạo báo cáo Crytal Report như thế nào vậy bạn?, bài của bạn m xem rùi rất hay nhưng mình ko biết bạn làm crHoSoNV ra sao.
mình lưu ảnh vào csdl SQL dạng đường dẫn đến file ảnh. chỉ dùm mình với mình đang cần lắm.


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.1 khách