วันอังคารที่ 15 ตุลาคม พ.ศ. 2556

How to Print Report by Crystal Reports (C#) ตอนที่ 3 Query Database to DataSet And Display Report

How to Print Report by Crystal Reports (C#) ตอนที่ 3 Query Database to DataSet And Display Report

1. Method สำหรับ นำคำสั่ง SQL ไป Query ข้อมูล ออกมาในรูปแบบของ DataSet

        public DataSet First(String Emp_code, String isYear)
        {
            DataSet2 sDs = new DataSet2(); // DataSet ทีสร้าง ไว้ก่อนหน้านี้ 
            String strSQl = "select e.Emp_code,e.Prename_th,e.Firstname_th,e.Lastname_th,"
                             + " e.Prename_eng,e.Firstname_eng,e.Lastname_eng,e.Grade_name,"
                             + " d.Dept_name,e.Emp_date"
                             + " from ITR_EMP_db e left join ITR_Dept_db d"
                             + " on e.Dept = d.Dept_no"
                             + "  where e.act <> 'D' and e.Emp_code = '" + Emp_code.Trim() + "'";
            //strSQl สำหรับ ดึงหัวข้อ เพื่อแสดงที่ Page Header มี 1 ค่า 

             String strSQL2 = "Select t.Topic_code,t.Pln_from,t.Pln_to,t.Topic_name,t.Term,"
                              + "t.Trainner1,t.Approve,d.Result,t.Unit from ITR_Details d"
                              + " left join ITR_Topic_db t on d.Topic_code = t.Topic_code"
                              + " where t.act <> 'D' and d.act <> 'D' and d.Emp_code = '" + Emp_code+ "'"
                              + " and t.pln_from like '%" + isYear.Trim() + "'"
                             + " and (Select COUNT(*) from ITR_Details s"
                             + " where s.Act <> 'D' and s.Topic_code = t.Topic_code and s.Result = '-') = 0 "
                             
                              + " order by (SUBSTRING(t.Pln_from,4,2)+SUBSTRING(t.Pln_from,1,2))";
            //StrSQL สำหรับ ดึงค่า Details ออกมาแสดง ในส่วนของ Details มีมากกว่า 1 ค่า      
           return Query_Report(strSQl, strSQL2, "ITR_EMP_db", "ITR_Topic_db", sDs); // Return เป็น DataSet
        }

__________________________________________________

2. Method สำหรับ Query ออกมา แล้ว Return ออก ในรูปแบบ DataSet ที่สร้างไว้ใน DataSet2

    public DataSet2 Query_Report(String isSQL, String isSQL2, String Database, String Database2, DataSet2 sds)
        {
          try{
            this.objConn.Open();
       // 1
            this.objCmd = new SqlCommand(isSQL, objConn);
            SqlDataAdapter sadpter = new SqlDataAdapter(this.objCmd);
            sds.Clear();
            sadpter.Fill(sds, Database);
      //  2
            this.objCmd = new SqlCommand(isSQL2, objConn);
            sadpter = new SqlDataAdapter(this.objCmd);
            sadpter.Fill(sds, Database2);

            this.objConn.Close();
            return sds;
        }
        catch (InvalidOperationException XcpInvOp)
            {
                System.Windows.Forms.MessageBox.Show(XcpInvOp.ToString());
                  return null;
            }
            catch (Exception e)
            {
                System.Windows.Forms.MessageBox.Show(e.ToString());
                   return null;
            }
        }

_______________________________________________

3.Method สำหรับ จัดการข้อมูล และ  แสดง Report 

using System.IO;  //เอาไว้หาข้อมูลปัจจุบัน Directory.GetCurrentDirectory()
using CrystalDecisions.CrystalReports.Engine; // เอาไว้เรียก Report ReportDocument 

 public void First()
        {
                Result_view_con tvc = new Result_view_con();
                DataSet Data2 = tvc.First(this.Emp_code, this.is_Year);  // สำหรับ Query ข้อมูล Return เป็น DataSet
         
                Data2 = addPic(Data2, this.Emp_code); // เพิ่มรูปภาพ
                Data2 = chkdataset(Data2); // ตรวจสอบข้อมูลที่แสดงออก Details
                ReportDocument rpt = new ReportDocument();
       
            //*******************************************************************************************   Connect report c# 
                try
                {
                    String Report = Directory.GetCurrentDirectory() + "\\Report\\QR-AD-002.rpt";  // สำหรับ เรียกหา Report โดย Directory.GetCurrentDirectory() ดึงที่อยู่ปัจจุบัน
                    rpt.Load(Report);
                }
                catch (Exception)
                {
                    rpt.Load("..\\..\\QR-AD-002.rpt");
                }
                //*******************************************************************************************   Connect report c# 
   
                rpt.Database.Tables[0].SetDataSource(Data2.Tables[0]); // เพิ่ม ตารางใน DataSet ที่สร้าง ตารางที่ 1
                rpt.Database.Tables[1].SetDataSource(Data2.Tables[1]); // ตารางใน DataSet ที่สร้าง ตารางที่ 2
                rpt.Database.Tables[2].SetDataSource(Data2.Tables[2]); // ตารางใน DataSet ที่สร้าง ตารางที่ 3
                rpt.SetParameterValue("isYear", this.is_Year); // เพิ่มค่าในตัวแปร isYear ใน Report

                this.Result_view_form.ReportSource = rpt;
                this.Result_view_form.DisplayGroupTree = false;  
                this.Result_view_form.Refresh();

        }

____________________________________________________________________

ไม่มีความคิดเห็น:

แสดงความคิดเห็น