บทความ – Display image from file path in Crystal .NET Report


 

By Nano October 22, 2007

MS Visual Studio 2005
Windows Application (C#)

Crystal .NET Report

 

พบกันเช่นเคยครับ เพื่อตอบข้อสงสัยของหลายๆ คำถาม ถามถึงการแสดงรูปภาพบน Crystal Report

บทความนี้เป็นการค้นหาคำตอบให้ท่าน โดยการแสดงรูปภาพจาก path files 

ข้อมูล path files ของรูปภาพ ถูกเก็บเป็น String บน SQL base เพื่ออ้างอิง ไฟล์รูปภาพบน Folder Photo ใน Folder Application ของเรา

การดึงรูปภาพที่เป็นไฟล์ มาแสดงบน Crystal Report ได้โดยการต้องแปลงข้อมูลไฟล์ภาพ (*.gif,*.jpg, ฯลฯ) เป็น ข้อมูล Binary

เริ่มกันเลยครับ…

ระบบรายงานข้อมูลพนักงาน (รายงานแบบลูกทุ่งๆไม่ว่ากันนะครับ)

ออกแบบระบบ

1. New Project เป็น WindowsApplication (C#) , ลาก CrystalReportViewer วางบน Form1

2. New Item เพื่อออกแบบ Dataset

3. เลือก Templates: เป็น Dataset

4. คลิกขวาบน Dataset Dataset Designer :=> Add => DataTable

5. เปลี่ยนชื่อ DataTable1 => imEmployees

6.เพิ่ม Column โดยคลิกขวาบน Table imEmployees :=>Add =>Column

7.Add Column ดังรูป Set DataType ของ Emp_ID, FName,LName เป็น System.String

8. DataType ของ Photo เป็น Byte Array:  System.Byte[]

9. เลือก Systen.Byte

10. set เป็น Byte Array โดยพิมพ์ [] ต่อท้าย Systen.Byte ดังรูป

11. เพิ่ม Crystal Report Item เข้ามาใน Project

12. คลิก OK

13. Data Source เลือก ADO.Net DataSets ดังรูป

14.

15. Design Report เรียบร้อย

16. ลาก Field Photo เข้ามาในรายงาน ปรับรายงานตามต้องการ

17.ทดสอบ Previous report

18. ยังไม่มีรูปครับ แสดงข้อมูลตามที่ระบบสุ่มให้

19.เนื่องจากเราต้องการดึงข้อมูลใน Table Employees ใน base Northwind เราต้อง update ค่าใน Field PhotoPath เป็น Photo/ชื่อรูปภาพ.jpg (Photo/*.jpg =เป็น path เก็บรูปภาพของเรา)

20. สร้าง Folder Photo ใน Folder Bin แล้ว Copy รูปไปวางไว้ครับ

21.วางรูปใน Folder Photo

ออกแบบระบบเรียบร้อย…

เขียนโปรแกรมกันเลยครับ

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Data.SqlClient;

using System.IO;

namespace WinCSCrystal_Img

{

public partial class Form1 : Form

{

                DataSet dsImg = new DataSet(); // ผ่านข้อมูลให้ Crystal Report

SqlDataReader sdr;// อ่านข้อมูลจาก sql base

public Form1()

{

InitializeComponent();

}

private void Form1_Load(object sender, EventArgs e)

{

string sql = "select EmployeeID, FirstName, LastName,PhotoPath from Employees";

SqlConnection cnn = new SqlConnection("Server=(local);uid=xx;pwd=xxxx;database=Northwind;");

cnn.Open();

//สร้าง temp table Add column ตาม DataSet = imEmployees

DataTable dt = new DataTable("imEmployees");// ชื่อ Table imEmployees

dt.Columns.Add(new DataColumn("Emp_ID", typeof(string)));

dt.Columns.Add(new DataColumn("FName", typeof(string)));

dt.Columns.Add(new DataColumn("LName", typeof(string)));

dt.Columns.Add(new DataColumn("Photo", typeof(System.Byte[]))); // DataType ของ Photo เป็น System.Byte[]

dsImg.Tables.Add(dt);// Add table เข้าไปใน DataSet

SqlDataAdapter da = new SqlDataAdapter(sql, cnn);

sdr = da.SelectCommand.ExecuteReader();

if (sdr.HasRows)

{

while (sdr.Read())

{

string path = Application.StartupPath + "\" + sdr["PhotoPath"].ToString();

FileStream FilStr = new FileStream(path, FileMode.Open);// เปิด file แบบ Stream เพื่ออ่านเป็น Binary

BinaryReader BinRed = new BinaryReader(FilStr);

DataRow dr = this.dsImg.Tables["imEmployees"].NewRow(); //เพิ่ม Rows ใหม่

// Add ข้อมูลที่อ่านจาก SQL Base ใส่เข้าไปแต่ละ Rows ของ Temp Table

dr["Emp_ID"] = sdr["EmployeeID"];

dr["FName"] = sdr["FirstName"];

dr["LName"] = sdr["LastName"];

// Column Photo ใส่ข้อมูล Binary

dr["Photo"] = BinRed.ReadBytes((int)BinRed.BaseStream.Length);

dsImg.Tables["imEmployees"].Rows.Add(dr); //Add Row เข้าไปใน Temp Table

// คืน memory ให้ OS

FilStr.Close(); //ปิด FileStream

BinRed.Close(); //ปิด BinaryReader

}

// คืน memory ให้ OS

sdr.Close();

cnn.Close();

CrystalReport1 crp = new CrystalReport1();

crp.SetDataSource(dsImg.Tables["imEmployees"]);

crystalReportViewer1.ReportSource = crp;

crystalReportViewer1.Refresh();

}

}

}

}

ทดสอบรายงาน

รายงานข้อมูลพนักงาน

ใน Table Employees มี Field Photo ซึ่ง DataType เป็น image ซึ่งสามารถออกรายงานบน Crystal Report ได้

ทันที ไม่ต้องแปลงไฟล์เหมือนวิธีดึงรูปจาก Path ดังรูป

Summary

หวังว่าบทความนี้สามารถตอบข้อสงสัย ผู้อ่านได้บ้างไม่มากก็น้อย และหวังเป็นอย่างยิ่งว่า ท่านจะสนุกกับการเดินบนเส้นทางของ โลก.Net ต่อไป

หากเกิดข้อผิดพลาดประการได ขอน้อมรับคำแนะนำ และพร้อมแก้ไขในครั้งต่อๆ ไป…

อ้าอิง:

Importing Dynamic Images to the Crystal Report without Database Overhead using Visual Studio 2005: http://aspalliance.com/1097_Importing_Dynamic_Images_to_the_Crystal_Report_without_Database_Overhead_using_Visual_Studio_2005.all#top


 

เกี่ยวกับ

Nuchit Atjanawat is a Microsoft MVP, GreatFriends Community Leader, WindowsITPro Columnist(Mr.Nano), Silverlight Business Application Instructor, Speaker in various Microsoft events, Author, passionate Blogger and a Software Engineer by profession. He has a very good skill over Silverlight, LightSwitch, C#, XAML & Blend. He shares his technical findings, tutorials in his technical blog. Follow his Blog and Facebook page to be updated on latest articles. - Technical Blog: https://janawat.wordpress.com - WindowsITPro Columnist(Mr.Nano): http://windowsitpro.net - The GreatFriends.Biz Community Discussion Board (nano): http://greatfriends.biz - witter: https://twitter.com/janawat - Facebook Page: https://www.facebook.com/nuchit - Instructor: http://bit.ly/GF250-01, http://bit.ly/GF150-02

เขียนใน Crystal Reports

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s

In Archive
%d bloggers like this: