Wednesday, January 4, 2012

Crystalreport with Dataset on ASP.NET

สิ่งที่จำเป็น (Prerequisites)
  • Microsoft SQL Server 2005 Express
  • Crystal Report Bsic for Visaul Studio 2008
  • Microsoft Visual Studio 2008 Professionan Edition

ต่อเนื่องจากบทความ How to use AttachDbFilename binding data in CrystalReport ซึ่งเป็นแอพบน Desktop บทความนี้จึงขอออกรายงานบน Web บ้าง เผื่อว่าสิ่งเล็กๆ น้อยๆ เหล่านี้จะเป็นผลประโยชน์แก่สังคมบ้าง… หากจะช่วยเติมเต็มให้ความขัดแย้งในสังคมไห้เบาบางลง บ้านเมืองประเทศชาติจะได้ก้าวเดินในก้าวต่อๆ ไป…

เป้าประสงค์ของเรา:
ออกรายงานสินค้า และสามารถกรองดูช่วงข้อมูลตามรหัสสินค้า
x1 x2
x3 x4

สร้างโปรเจ็กต์:
1. สร้างโปรเจ็กต์ด้วยเทมเพลต ASP.NET Web site
2. คลิกขวาบน โปรเจ็กต์ => Add New Item… เลือก Item template DataSet
1
3. ดับเบิ้ลคลิกไปที่ DataSet เพื่อเข้าหน้าจอ Dataset designer จากนั้นคลิกลงบน Server Explorer เพื่อแสดงหน้าต่าง Server Explorer ให้เราทำการสร้าง Connecttion ไปยังฐานข้อมูล Northwind ในบทความนี้ขอใช้ข้อมูลในตาราง Products ทำลากตาราง Products มาวางบน Dataset designer ดังรูป
2 3_1
4. หลังจากเราทำการสร้าง DataSet เรียบร้อยแล้วเบื้องหลัง VS 2008 จัดการ Gen ConnectionString ไว้ในไฟล์ web.config ดังรูป
9

ออกแบบรายงาน ด้วย Crystal Report:
1. คลิกขวาบน โปรเจ็กต์ => Add New Item… เลือก Item template Crystal Report
2. เลือก Using the Report Wizard > Standard > คลิก OK
3 4
3. เลือก Data Source จาก Project Data > ADO.Net DataSet > DataSet1 > คลิกเลือก Product  และเลือกฟิลด์ที่ต้องการ
5 6
4. กด Next…. จนมาถึง Finish เป็นอันจบกระบวนการผูกข้อมูลให้ Crystal Report ผ่าน DataSet 
7     8

นำรายงานไปแสดงบน Page ASP.NET:
ลาก CrystalReportViewer มาวางบน Page พร้อม TextBox และ Button เพื่อเป็นกล่องใส่เงื่อนไขรายงาน และปุ่มค้นหา แล้วทำการโค้ดดิ้งได้เลยครับ

10

โค้ดดิ้ง:
using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
public partial class _Default : System.Web.UI.Page {
    string strUsr = "";
    
string strPwd = "";
    
string strServer = "";
    
string strDB = "";
    protected void Page_Load(object sender, EventArgs e)
    
{
        
strUsr = "dbUser";
        
strPwd = "dbPass";
        
strServer = @".\SQLEXPRESS";
        
strDB = "ServicesMSDB";
        if (this.Session["ReportSource"] != null)
            
CrystalReportViewer1.ReportSource = this.Session["ReportSource"];
    
}
    private void showReport()
    
{
        string strConn = ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString;
        
using (System.Data.SqlClient.SqlConnection Conn = new System.Data.SqlClient.SqlConnection(strConn))
        
{
            
if (Conn.State == ConnectionState.Closed)
                
Conn.Open();
            DataTable tmpTable = new DataTable();
            
string sql = "SELECT * FROM Products where ProductID between ‘" + TextBox1.Text.Trim() + "’ and ‘" + TextBox2.Text.Trim() + "’";
            
System.Data.SqlClient.SqlCommand com = new System.Data.SqlClient.SqlCommand(sql, Conn);
            
System.Data.SqlClient.SqlDataReader dr = com.ExecuteReader();
            
if (dr.HasRows)
            
{
                
tmpTable.Load(dr);
            
}
            
dr.Close();
            if (tmpTable.Rows.Count > 0)
            
{
                
CrystalDecisions.CrystalReports.Engine.ReportDocument rpt = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
                
rpt.Load(Server.MapPath("CrystalReport.rpt"));
                
rpt.SetDatabaseLogon(strUsr, strPwd, strServer, strDB);
                
rpt.SetDataSource(tmpTable);
                
this.Session["ReportSource"] = rpt;
                
CrystalReportViewer1.ReportSource = this.Session["ReportSource"]; ;
            
}
        
}
    
}
    protected void Button1_Click(object sender, EventArgs e)
    
{
        
showReport();
    
}
}
 

แหล่งข้อมูลศึกษาเพิ่มเติม:

No comments:

Post a Comment