การสร้าง Crystal Report กับ DataSet หรือ DataTable (VB.NET,C#) |
|
|
|
การสร้าง Crystal Report กับ DataSet หรือ DataTable (VB.NET,C#) บทความนี้ Advanced ขึ้นมาอีกนิดสำหรับการสร้าง Report ของ Crystal Report กับ DataSet หรือ DataTable ของ .NET Framework เพราะแทนที่เราจะใช้ Wizard Connection ของ Crystal Report ในการ Connect กับ Database แต่เราจะใช้วิธีการสร้าง DataSource ขึ้นมาเองบน .NET Framework ด้วยภาษา VB.NET หรือ C# ผ่าน DataSet และ DataTable วิธีนี้มีประโยชน์ตรงที่เราสามารถจัดการกับ DataSet หรือ DataSource ให้ได้ตรงกับความต้องการแล้ว ค่อยโยนค่าให้กับ DataSource ของ Crystal Report เพื่อทำการแสดงผล Report ออกมา เป็นวิธีหนึ่งที่ช่วยให้การจัดการรัน Result ได้ง่ายยิ่งขึ้น หรือถ้าใครถนัดกับการเขียนผ่าน Formula ของ Crystal Report ก็สามารถทำได้เช่นเดียวกัน
Basic สร้าง Crystal Report บน Visual Studio (VB.NET , C#) Step by Step
สำหรับตัวอย่างนี้จะใช้ Table 2 ตัว คือ
- customer (เป็นตารางเก็บข้อมูล)
- audit (เป้นตารางรายละเอียดลูกค้าใช้ยอดเงิน)


แต่หลัก ๆ จะใช้แค่ Table เดียวคือ audit เพื่อจะ Query ข้อมูลของลูกค้ามาโชว์ เหมือนในรูป

โครงสร้าง ตาราง และข้อมูล ของ SQL Server สำหรับทดสอบ
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
audit
USE [mydatabase]
GO
/****** Object: Table [dbo].[audit] Script Date: 03/13/2012 13:45:08 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[audit](
[AuditID] [varchar](4) NOT NULL,
[CustomerID] [varchar](4) NULL,
[Date] [datetime] NULL,
[Used] [float] NULL,
CONSTRAINT [PK_audit] PRIMARY KEY CLUSTERED
(
[AuditID] 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 audit VALUES (1, 'C001', '2008-08-01', 100000);
INSERT INTO audit VALUES (2, 'C001', '2008-08-05', 200000);
INSERT INTO audit VALUES (3, 'C001', '2008-08-10', 300000);
INSERT INTO audit VALUES (4, 'C002', '2008-08-02', 400000);
INSERT INTO audit VALUES (5, 'C002', '2008-08-07', 100000);
INSERT INTO audit VALUES (6, 'C002', '2008-08-15', 300000);
INSERT INTO audit VALUES (7, 'C003', '2008-08-20', 400000);
INSERT INTO audit VALUES (8, 'C003', '2008-08-25', 200000);
INSERT INTO audit VALUES (9, 'C004', '2008-07-04', 100000);
INSERT INTO audit VALUES (10, 'C005', '2008-07-04', 200000);
GO
SET ANSI_PADDING OFF
นำ Query ไปรันหรือสร้าง Database ตามโครงสร้าง
มาเริ่มกันเลย

สร้าง Form ดังรูป ซึ่งประกอบด้วย Control ของ Textbox , Button และ CrystalReportViewer

ให้คลิกขวาที่ Project -> Add -> New Item

เลือกสร้าง DataSet

คลิกขวาที่ Form ของ DataSet -> Add -> DataTable

จะได้ DataTable ขึ้นมาตัวหนึ่ง ให้คลิกขวาที่ DataTable เลือก Add -> Column เหมือนในรูป
สำหรับ Report นี้เราจะดึงข้อมูลจากตาราง audit มาแสดง จะต้องสร้าง DataTable ฟิวด์รองรับจำนวน DataSource ที่จะสร้าง ซึ่งตอนนี้มีอยู่ 4 ฟิวด์ คือ
- AuditID
- CustomerID
- Date
- Used

กำหนดชื่อฟิวด์

สร้างให้ครบทุกฟิวด์ เหมือนในรูป

เปลี่ยนชื่อ DataTable ใหม่ให้เป็น myDataTable จะได้จดทำง่ายหน่อย ถ้าเรียบร้อยแล้วให้ปิดหน้าจอนี้ไปได้เลย (ตอนนี้ได้สร้าง DataSet และ DataTable ชื่อ myDataTable ไว้แล้ว)

กลับมาที่ Project ให้คลิกขวาที่ Project -> Add -> New Item

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

จะมีหน้าต่าง Pop ขึ้นให้เลือก Using the Report Wizard และ OK

อันนี้ให้เลือก Project Data-> ADO.NET DataSets -> myDataTable (ที่ได้สร้างไว้ในขั้นตอนการสร้าง DataSet และ DataTable)

เลือกฟิวด์ Fields ข้อมูลทีต้องการแสดงใน Report และคลิกที่ Finish เพื่อเสร็จสิ้นการออกแบบ แต่ถ้าหากต้องการกำหนดค่าอื่น ๆ ของ Report ลองคลิกที่ Next เพื่อปรับแต่ง Report

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

กลับมาที่หน้า Windows Form จากนั้นให้ Click ที่ Button เพื่อสร้าง Event ในการโหลด Report โดยใส่คำสั่งดังนี้
Code VB.NET
Imports CrystalDecisions.CrystalReports.Engine
Imports System.Data.SqlClient
Public Class frmReport
Private Sub btnReport_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnReport.Click
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 audit WHERE CustomerID = '" & Me.txtCustomerID.Text & "' "
objConn.ConnectionString = strConnString
With objCmd
.Connection = objConn
.CommandText = strSQL
.CommandType = CommandType.Text
End With
dtAdapter.SelectCommand = objCmd
dtAdapter.Fill(ds, "myDataTable")
dt = ds.Tables(0)
dtAdapter = Nothing
objConn.Close()
objConn = Nothing
Dim rpt As New ReportDocument()
Dim directory As String = My.Application.Info.DirectoryPath
'rpt.Load(directory & "\myCrystalReport1.rpt")
rpt.Load("C:\DemoCrystalReport2\DemoCrystalReport2\myCrystalReport1.rpt")
rpt.SetDataSource(dt)
Me.CrystalReportViewer1.ReportSource = rpt
Me.CrystalReportViewer1.Refresh()
End Sub
End Class
Code C#
using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using CrystalDecisions.CrystalReports.Engine;
using System.Data.SqlClient;
public class frmReport
{
private void btnReport_Click(System.Object sender, System.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 audit WHERE CustomerID = '" + this.txtCustomerID.Text + "' ";
objConn.ConnectionString = strConnString;
var _with1 = objCmd;
_with1.Connection = objConn;
_with1.CommandText = strSQL;
_with1.CommandType = CommandType.Text;
dtAdapter.SelectCommand = objCmd;
dtAdapter.Fill(ds, "myDataTable");
dt = ds.Tables[0];
dtAdapter = null;
objConn.Close();
objConn = null;
ReportDocument rpt = new ReportDocument();
string directory = My.Application.Info.DirectoryPath;
//rpt.Load(directory & "\\myCrystalReport1.rpt")
rpt.Load("C:\\DemoCrystalReport2\\DemoCrystalReport2\\myCrystalReport1.rpt");
rpt.SetDataSource(dt);
this.CrystalReportViewer1.ReportSource = rpt;
this.CrystalReportViewer1.Refresh();
}
}
หลังจากวาง Code เรียบร้อยแล้ว ลองกดที่ Run เพื่อดูผลลัพธ์ของ Report

ทดสอบการรัน Report จะได้ผลเหมือนในรูป
จากตัวอย่างจะเห็นว่ามีการใช้ ADO.NET ในการ Connect กับฐานข้อมูล SQL Server Database ผ่าน Connection String และมีการสร้าง DataSet ผ่าน Query
SELECT * FROM audit WHERE CustomerID = '" + this.txtCustomerID.Text + "'
เพื่อรับค่าจาก Textbox จากนั้นจะมีการ Fill ข้อมูลให้กับ DataTable ชื่อ myDataTable (ซึ่งเราได้สร้างไว้ในขั้นตอนการออกแบบ Crystal Report) ซึ่ง Data ที่เรา Query จะต้อง Map และพอดีกับจำนวนฟิวด์ที่ได้ออกแบบไว้ใน Crystal Report จากนั้นเมื่อได้ DataTable ก็จะโยนค่า DataSource ด้วยคำสั่ง rpt.SetDataSource(dt) และ Report ก็จะแสดงข้อมูลตามที่ได้ Query ไว้
Download Code!!
บทความอื่น ๆ ที่เกี่ยวข้อง
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-13 20:37:31 |
|
Download : |
No files |
|
|
|
|
|
|
|