การสร้าง Crystal Report กับการสร้าง Class และ DataSource (.NET) |
|
|
|
การสร้าง Crystal Report กับการสร้าง Class และ DataSource (.NET) บทความก่อน ๆ เกี่ยวกับ Crystal Report จะเป็นการใช้ผ่าน Wizard หรือการเขียน DataSource บน Crystal Report แต่วิธีนี้จะใช้การสร้าง Class ใน .NET Framework เพื่อรองรับค่าที่จะสร้างจาก DataSet และ DataTable โดยการสร้าง Class ที่มี Property ที่จะรองรับ Column ที่สามารถนำไปใช้บน Crystal Report ผ่านการกำหนดค่าหรือสร้างค่าจาก Database ในรูปแบบของ DataSet/DataTable หรือจะเป็นค่าอื่น ๆ จาก List หรือ Array List ก็สามารถทำได้เช่นเดียวกัน สำหรับตัวอย่างนี้จะใช้การอ่านค่าจาก Database ในรูปแบบของ DataSet และ DataTable
โครงสร้าง Database

ตัวอย่างนี้ใช้การเชื่อมต่อกับฐานข้อมูล SQL Server ตารางชื่อ customer
customer
USE [mydatabase]
GO
/****** Object: Table [dbo].[customer] Script Date: 03/13/2012 13:42:18 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[customer](
[CustomerID] [varchar](4) NOT NULL,
[Name] [varchar](50) NULL,
[Email] [varchar](50) NULL,
[CountryCode] [varchar](2) NULL,
[Budget] [float] NULL,
[Used] [float] NULL,
CONSTRAINT [PK_customer] PRIMARY KEY CLUSTERED
(
[CustomerID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
INSERT INTO customer VALUES ('C001', 'Win Weerachai', '[email protected]', 'TH', 1000000, 600000);
INSERT INTO customer VALUES ('C002', 'John Smith', '[email protected]', 'EN', 2000000, 800000);
INSERT INTO customer VALUES ('C003', 'Jame Born', '[email protected]', 'US', 3000000, 600000);
INSERT INTO customer VALUES ('C004', 'Chalee Angel', '[email protected]', 'US', 4000000, 100000);
GO
SET ANSI_PADDING OFF
นำ Query ไปรันเพื่อสร้าง table
เริ่มต้นด้วยการสร้าง Project เป็น ASP.NET Application หรือ ASP.NET WebSite

เลือกหน้าจอดังรูป
ขั้นตอนแรกให้สร้าง Class ขึ้นมาตัวหนึ่ง

กลับมาที่ Project ให้คลิกขวาที่ Project -> Add -> New Item เพื่อสร้างรายการใหม่

เลือกเป็น Class ตั้ชื่อเป็น myClass.vb (สำหรับ VB.NET) หรือ myClass.cs (สำหรับ C#)
ใส่คำสั่งดังต่อไปนี้
สำหรับ VB.NET
Public Class myReport
Public Property CustomerID() As Integer
Get
Return sCustomerID
End Get
Set(ByVal value As Integer)
sCustomerID = value
End Set
End Property
Public Property Name() As Integer
Get
Return sName
End Get
Set(ByVal value As Integer)
sName = value
End Set
End Property
Public Property Email() As Integer
Get
Return sEmail
End Get
Set(ByVal value As Integer)
sEmail = value
End Set
End Property
Public Property CountryCode() As Integer
Get
Return sCountryCode
End Get
Set(ByVal value As Integer)
sCountryCode = value
End Set
End Property
Public Property Budget() As Integer
Get
Return sBudget
End Get
Set(ByVal value As Integer)
sBudget = value
End Set
End Property
Public Property Used() As Integer
Get
Return sUsed
End Get
Set(ByVal value As Integer)
sUsed = value
End Set
End Property
Public sCustomerID As String
Public sName As String
Public sEmail As String
Public sCountryCode As String
Public sBudget As String
Public sUsed As String
End Class
สำหรับ C#
using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
public class myReport
{
public string CustomerID
{
get;
set;
}
public string Name
{
get;
set;
}
public string Email
{
get;
set;
}
public string CountryCode
{
get;
set;
}
public int Budget
{
get;
set;
}
public int Used
{
get;
set;
}
}
จากนั้นให้ทำการ Build Project ให้เรียบร้อย
เพิ่มเติม
จะเห็นว่าใน myClass มีการสร้าง Property ที่มีชื่อเดียวกับใน Table customer ทั้งนี้เพื่อไว้รองรับค่า DataSet และ DataTable ซึ่งจะประกอบด้วย
- CustomerID
- Name
- Email
- CountryCode
- Budget
- Used
สร้าง Report

กลับมาที่ Project ให้คลิกขวาที่ Project -> Add -> New Item เพื่อสร้างรายการใหม่

เลือก Crystal Report และกำหนดชื่อให้เรียบร้อย

จะมีหน้าต่าง Pop ให้เลือกแบบ Wizard ของ Crystal Report และให้เลือก Using the Report Wizard และ OK เพื่อข้ามไปขั้นตอนถัดไป

ในส่วนนี้ให้เลือกที่ Project Data -> .NET Project เลือก Class ที่ชื่อว่า myReport หรือ NameSpace ตามด้วย ชื่อ Class ดังรูป

จะเห็นว่าจะมีชื่อ Column ที่เราได้สร้างรองรับจากการสร้าง Class ให้เลือกทั้งหมด หรือจะเลือกเฉพาะ Column ที่ต้องการก็ได้ และคลิกที่ Finish เพื่อเสร็จสิ้นการออกแบบ แต่ถ้าหากต้องการกำหนดค่าอื่น ๆ ของ Report ลองคลิกที่ Next เพื่อปรับแต่ง Report ในรูปแบบต่าง ๆ ในมุมมองของ Wizard

หน้าตา Design Report ที่สามารถปรับแต่งรายละเอียดอื่น ๆ ได้ตามความต้องการ

กลับมาที่หน้า Web Form (.aspx) จากนั้นให้ลาก Control ชื่อ CrystalReportViewer มาใส่ใน WebForm จากนั้นให้สร้าง Event ของ Page_Load() ใส่ code ดังต่อไปนี้
Code VB.NET
Imports CrystalDecisions.CrystalReports.Engine
Imports System.Data
Imports System.Data.SqlClient
Partial Public Class _Default
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim objConn As New SqlConnection
Dim objCmd As New SqlCommand
Dim dtAdapter As New SqlDataAdapter
Dim ds As New DataSet
Dim dt As DataTable
Dim strConnString, strSQL As String
strConnString = "Server=localhost;UID=sa;PASSWORD=;database=mydatabase;Max Pool Size=400;Connect Timeout=600;"
strSQL = "SELECT * FROM customer ORDER BY CustomerID ASC "
objConn.ConnectionString = strConnString
With objCmd
.Connection = objConn
.CommandText = strSQL
.CommandType = CommandType.Text
End With
dtAdapter.SelectCommand = objCmd
dtAdapter.Fill(ds, "myReport")
dt = ds.Tables(0)
dtAdapter = Nothing
objConn.Close()
objConn = Nothing
Dim rpt As New ReportDocument()
rpt.Load(Server.MapPath("CrystalReport1.rpt"))
rpt.SetDataSource(dt)
Me.CrystalReportViewer1.ReportSource = rpt
End Sub
End Class
Code C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using CrystalDecisions.CrystalReports.Engine;
using System.Data;
using System.Data.SqlClient;
namespace CrystalReportClassCS
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
SqlConnection objConn = new SqlConnection();
SqlCommand objCmd = new SqlCommand();
SqlDataAdapter dtAdapter = new SqlDataAdapter();
DataSet ds = new DataSet();
DataTable dt = null;
string strConnString = null;
string strSQL = null;
strConnString = "Server=localhost;UID=sa;PASSWORD=;database=mydatabase;Max Pool Size=400;Connect Timeout=600;";
strSQL = "SELECT * FROM customer ORDER BY CustomerID ASC ";
objConn.ConnectionString = strConnString;
var _with1 = objCmd;
_with1.Connection = objConn;
_with1.CommandText = strSQL;
_with1.CommandType = CommandType.Text;
dtAdapter.SelectCommand = objCmd;
dtAdapter.Fill(ds, "myReport");
dt = ds.Tables[0];
dtAdapter = null;
objConn.Close();
objConn = null;
ReportDocument rpt = new ReportDocument();
rpt.Load(Server.MapPath("CrystalReport1.rpt"));
rpt.SetDataSource(dt);
this.CrystalReportViewer1.ReportSource = rpt;
}
}
}
หลังจากวาง Code เรียบร้อยแล้ว ลองกดที่ Run เพื่อดูผลลัพธ์ของ Report

ทดสอบการรัน Report ผ่านหน้า Web จะได้ผลเหมือนในรูป
จากตัวอย่างจะเห็นว่ามีการเลือกข้อมูลจาก table ชื่อ customer ใช้ ADO.NET อ่านข้อมูลในรูปแบบของ DataSet และการกำหนดค่าให้กับ dtAdapter.Fill(ds, "myReport") ซึ่งเป็นชื่อเดียวกับ Class ที่ใช้กำหนด Column ของข้อมูลใน Crystal Report สำหรับวิธีนี้มี
ประโยชน์ที่ไม่ต้องเขียน Query หรือสร้าง DataSource บน Crystal Report แต่เราสามารถจัดการกับข้อมูลต่าง ๆ ที่อยู่ในโปรแกรมให้เสร็จเรียบร้อย และนำค่าที่ได้โยนให้กับ DataSource ของ Crystal Report ทีเดียว ซึ่งจะช่วยให้การเขียนรายงานนั้นมีความง่าย และ ได้ผลลัพธ์ ตามต้องการ แทนการใช้ Formula หรือจัดการ Data บน Crystal Report
สำหรับตัวย่างนี้ใช้ได้ทั้ง Windows Application และ Web Application (ASP.NET) ซึ่งการใช้งานแทบจะไม่ต่างกันเลย หรือลองอ่านบทความที่เกี่ยวข้อง ซึ่งมีตัวอย่างทั้ง Win App และ Web App และตัรอวย่างในบทความเลือกใช้ทั้งภาษา VB.NET และ C#
Download Code!!
สำหรับบทความอื่น ๆ อยากให้ลองอ่านดูเพราะมีประโยชน์มาก ๆ
Go to : สุดยอดบทความ Crystal Report กับ .NET Framework (VB.NET , C#)
Go to : สร้าง Crystal Report บน Visual Studio (VB.NET , C#) Step by Step
Go to : สร้าง Parameter และ Formula Fields บน Crystal Reports (VB.NET,C#)
Go to : ASP.NET ReportViewer - rsweb:ReportViewer
Go to : ASP.NET and CrystalReportViewer
Go to : ASP.NET แสดงรูปภาพ Image บน Crystal Report แบบ Step by Step (VB.NET / C#)
Go to : การสร้าง Sub Report (Subreport) บน Crystal Report แบบ Step by Step (VB.NET /C#)
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
|
|
By : |
TC Admin
|
|
Score Rating : |
- |
|
Create Date : |
2012-03-30 10:11:54 |
|
Download : |
No files |
|
|
|
|
|
|
|