Wednesday, January 4, 2012

Row Color in Crystal Report #1

สิ่งที่จำเป็น (Prerequisites)
  • Microsoft Visual Studio 2008 (C#)
  • SQL Server (2005,2008) Express

หากว่าเราได้รับโจทย์จากผู้ใช้งานฝ่ายคลังสินค้าว่า ต้องการรายงานสินค้าทั้งหมดในคลัง โดยตรวสอบว่าถ้าจำนวนในสต็อก (UnitInStock) ไม่มี (=0) ให้ลงสีเร็คคอร์ตดังกล่าวให้เป็นสีแดง เพื่อให้ง่ายในการตรวจสอบรายงาน และเราจำเป็นต้องใช้งาน Crystal Report เนื่องจากว่าเราต้องผูกเข้ากับระบบเดิม(เรื่องสมมุติ) โดยเป้าประสงค์ของผู้ใช้งานต้องการรายงานดังรูป  
14

เริ่มสร้างโปรเจ็กต์(Windows Application) กันเลย จากนั้นเพิ่มไอเทม DataSet เข้าไป
1

คลิกเมาส์บน Server Explorer
2 3

และสร้างคอนเนคชันชี้ไปที่ฐานข้อมูลที่เราต้องการ ในที่นี้ใช้ฐานข้อมูล Nortwind จากนั้นลากตาราง Products ไปวางบนพื้นที่ออกแบ Dataset การออกแบบ DataSet ของเราเป็นอันเรียบร้อยครับ ทำการบันทึกและปิดมัน
4 5

ทำการเพิ่มไอเทม Crystal Report เข้าไปในโปรเจ็กต์
6 

เลือก Report Wizard
7

เลือกแหล่งข้อมูล (DataSource) เลือก Project Data ADO.NET DataSet…. และเลือกฟิลด์ที่ต้องการ
8 9

กด Next,Next,Next และ  Finish ขั้นตอนการผูกข้อมูลใส่ Crstal Report เป็นอันเสร็จเรียบร้อย
10 
ไปทำการใส่สีในเร็กคอร์ตที่ไม่มีสต็อก (สต็อกเป็น 0) ให้เป็นสีแดงโดยการคลิกขวา บน Section Detail แล้วเลือก Section Expert…
11

เมื่อเราเข้ามาที่หน้าต่าง Section Expert ไปที่แท็บ Color ติ๊ก Backgroung Color เพื่อเป็นการใส่สีพื้นให้รายงาน แต่เราจะไม่ใส่ทุกเร็กคอร์ต 
เราจะใส่เฉพาะเร็กคอร์ตที่จำนวนสต็อกเป็นศูนย์เท่านั้น เราต้องเข้าไปใส่เงื่อนไขใน Formula ครับโดยคลิกเมาส์บนปุ่ม X*2 Crystal Report จะนำเราเข้าสู่หน้าจอ Formula Workshop ให้เราใส่ Scrip นี้ลงไปครับ
if {Products.UnitsInStock}=0 then crRed else crNoColor

แค่นี้ก็เป็นอันเรียบร้อย ให้เรากดปุ่ม Save and close เพื่อบันทึก script และออกจากหน้า Formula Workshop 
12 13

จากนั้นเราไปใส่โค้ตใน Form1 เพื่อดึงรายงานไปแสดงกันเลยครับ
Code:
        private void Form1_Load(object sender, EventArgs e)
        {
            string sql = "Select * from Products";
            string strConn = System.Configuration.ConfigurationManager.ConnectionStrings["WinCry.Properties.Settings.NorthwindConnectionString"].ConnectionString;
            System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(strConn);
            conn.Open();
            System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(sql, conn);
            System.Data.SqlClient.SqlDataReader dr = cmd.ExecuteReader();
            DataTable dt = new DataTable();

            if (dr.HasRows)
            {
                dt.Load(dr);
            }
            dr.Close();

            CrystalReport1 crp = new CrystalReport1();
            crp.SetDataSource(dt);
            crystalReportViewer1.ReportSource = crp;

        }

No comments:

Post a Comment