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

 

Download source:
http://cid-7d608959d854cb28.skydrive.live.com/embedrowdetail.aspx/SourcesCode/WebSite|_Crystal|_13-10-2008.zip

ต่อเนื่องจากบทความ 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();
   
}
}

 

 

Download source:
http://cid-7d608959d854cb28.skydrive.live.com/embedrowdetail.aspx/SourcesCode/WebSite|_Crystal|_13-10-2008.zip

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

 

Advertisements
เกี่ยวกับ

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
11 comments on “Crystalreport with Dataset on ASP.NET
  1. ลาภลอย พูดว่า:

    ขอบคุณสำหรับการเผยแพร่บทความดีๆ  บล็อนี้ดีน่านิยมครับลาภลอย วานิชอังกูร

  2. Nuchit พูดว่า:

    ขอบคุณ อ.ลาภลอย ครับที่เข้ามาเยี่ยม
    ส่วนตัวผมเองติดตามผลงานทั้งในหนังสือ, นิตยสาร และ  blog (http://thai-cs.spaces.live.com/
    ได้ทั้งความรู้ ได้ทั้งความสนุก ขอบคุณเช่นกันครับ อาจารย์

  3. panatda พูดว่า:

    รบกวนขอข้อมูล การทำ store procedure ด้วยนะคะ

  4. Nuchit พูดว่า:

    จัดให้ครับ ตาม link นี้ครับ:ออกแบบรายงาน CrystalReport จาก Storeprocedure:=>http://janawat.spaces.live.com/blog/cns!7D608959D854CB28!2991.entry

  5. ∞ǽ∞ พูดว่า:

    ขอบคุณสำหรับความรู้ดีๆครับ ขออนุญาติเรียกอาจารย์นะครับผมได้ลองเอาตัวอย่าง coding ของอาจารย์แล้วแปลงเป็น VB ดูครับ ซึ่งก็ run ได้ตามปกติ แต่พอลองสั่ง print ปรากฎว่ามันต้องให้ใส่ username password และ server name ครับ ต้องแก้ไขอย่างไรครับขอความรู้เพิ่มเติมด้วยครับ

  6. Nuchit พูดว่า:

    ระบุ Database UserName ใช้เมธอด *.SetDatabaseLogon() ครับเช่นโค้ดบรรทัดนี้ rpt.SetDatabaseLogon(UserของDB, passของUserDB, ชื่อหรือ IP ของ Server DB, ชื่อDB);

  7. ∞ǽ∞ พูดว่า:

    อาจารย์ Nano ครับ ได้ลอง set ตามที่แนะนำแล้ว ยังใช้ไม่ได้เหมือนเดิมครับ ไม่ทราบว่าต้องแก้ที่จุดไหนอีกหรือปล่าวครับ

  8. Nuchit พูดว่า:

    ลองเอาเอาโค้ดมาดูกันหน่อยครับ

  9. MonSiChA พูดว่า:

    เป็นแนวทางดีๆสำหรับโปรแกรมเมอร์มืออ่อน หุๆ ขอบคุณค่ะ ^^

  10. Be dOubleO eM พูดว่า:

    ขอบคุณมาก ๆนะคับ ผมก้อไม่ได้รู้จักคุณเลย เน้อ แต่ว่า คงเป็นเพราะวาสนา ให้เราได้คุยกัน ขอบคุณมาก ๆคับ จะบอกว่า ผมทำได้เพราะคุณคับ จู๊บๆ ๆ ๆ ๆ ๆ ๆ ๆ ๆ

  11. Nuchit พูดว่า:

    ยินดีด้วยครับ

ใส่ความเห็น

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: