บทความนี้เป็นตัวอย่าง การออกแบบรายงาน CrystalReport จาก Storeprocedure โดยการผ่าน Parameter จาก CrystalReport ไปสู่ Storeprocedure
{ตอบปัญหาเพื่อนๆ ท่านหนึ่ง}
ขั้นตอนการออกแบบรายงาน
- ออกแบบรายงานจาก Storeprocedure
- ใส่โด้ดดึงรายงานโดยผ่านพารามิเตอร์ทางเมธอด SetParameterValue()
1.ออกแบบรายงานจาก Storeprocedure
ออกแบบตามขั้นตอนในรูปภาพเลยครับ
สร้างโปรเจ็กต์ ASP.Net และ Add Item CrystalReport เข้าใปในโปรเจ็กต์
ออกแบบโดยใช้โหมด Report Wizard และ Connect database โดยใช้ OLE DB
เลือก Provider แบบ SQL native Client
ระบุ ชื่อ Server DB User DB และ Password แล้ว Next, Next
ขยายจนถึง Stored Procedures และเข้าไปทำการเลือกชื่อ Stored Procedures ที่ต้องการ ในบทความนี้ขอใช้ SalesByCategory (รายงานการขายตามประเภทสินค้า) แล้วกดปุ่ม เพื่อเลือก Stored Procedures
OK, Next
เลือกฟิลด์ทั้งหมดโดยกดปุ่ม >> จากนั้น Next, Next
Next, Finish
ได้แบบรายงานมาเรียบร้อย ปรับเอาเองตามใจชอบ(User)
ทดสอบดูตัวอย่างรายงาน (Report Previe)
Report Previe
Crystal Report จะสร้าง Parameter ให้อัตโนมัติ ตาม Stored Procedures SalesByCategory
ลากตัวคอนโทรล CrystalReportViewer ไปวางบน WebForm แล้วไปทำการใส่โด้ดดึงรายงาน กันเลยครับ
2. ใส่โด้ดดึงรายงานโดยผ่านพารามิเตอร์ทางเมธอด SetParameterValue()
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;public partial class _Default : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){CrystalDecisions.CrystalReports.Engine.ReportDocument rpt = newCrystalDecisions.CrystalReports.Engine.ReportDocument();rpt.Load(Server.MapPath("CrystalReport.rpt"));rpt.SetDatabaseLogon("sa","1234");rpt.SetParameterValue("@CategoryName", "Meat/Poultry");rpt.SetParameterValue("@OrdYear", "1996");CrystalReportViewer1.ReportSource = rpt;}}
ผลการรันแอพพลิเคชัน
แหล่งข้อมูลดาวน์โหลด ที่นี่
ตัวอย่างดึงพารามิเตอร์จาก app.config หรือ web.config
ต้อง ref: System.configuration เข้ามาใน Project ก่อนครับ
สมมุติ connectionStrings ชื่อ NorthwindConnectionString
string conn = System.Configuration.ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString;
จะได้ค่า: ประมาณนี้
//conn = Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Persist Security Info=True;User ID=sa;Password=1234
แยกส่วนออกด้วยการ split
string[] _conn = conn.Split("=".ToCharArray());
จะได้ค่า: ประมาณนี้
/*
_conn[0] = "Data Source"
_conn[1] = ".\SQLEXPRESS;Initial Catalog"
_conn[2] = "Northwind;Persist Security Info"
_conn[3] = "True;User ID"
_conn[4] = "sa;Password"
_conn[5] = "1234"
*/
แยกส่วนครั้งแรกยังไม่จบ split ครั้งที่ 2 ด้วย ";" แล้วเอาค่าแรก [0]
string _serdb = _conn[1].Split (";".ToCharArray ())[0];
string _db = _conn[2].Split(";".ToCharArray())[0];
string _user = _conn[4].Split(";".ToCharArray())[0];
string _pwd = _conn[5];
แล้วส่งต่อให้ อ็อบเจ็กต์ ReportDocument
CrystalDecisions.CrystalReports.Engine.ReportDocument rpt = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
rpt.SetDatabaseLogon(_user, _pwd, _serdb, _db);
หรือ
rpt.SetDatabaseLogon (_user, _pwd);
ปล.
การ split connectionStrings ตามตัวอย่างดังกล่าง ต้องระวังเรื่องการแก้ไข connectionStrings แล้วสับตำแหน่งพารามิเตอร์ด้วยนะครับ
เพราะทำให้ดึงค่าผิดได้ครับ
แหล่งข้อมูล Download https://skydrive.live.com/self.aspx/SourcesCode/PassParamFromCrystal2Storeprocedure.zip?cid=7d608959d854cb28&sc=documents
No comments:
Post a Comment