新文章

2010年7月26日 星期一

[C#] WinForm 產生Crystal report報表

           一般Google找到的多是把建好的資料表轉成報表,但是如果要使輸入的SQL語法產生出的Table再轉成報表,則要另外設計DataSet內的資料表。

這樣說也許不太清楚明瞭  (我也這樣覺得 ......



沒關係~
接下來step by step建立示範,希望我寫得夠貼近!

使用的SQL語法為:
(SELECT DISTINCT PNUMBER
FROM PROJECT,DEPARTMENT,EMPLOYEE
WHERE DNUM=DNUMBER AND MGRSSN=SSN AND LNAME='SMITH')
UNION
(SELECT DISTINCT PNUMBER
FROM PROJECT,WORKS_ON,EMPLOYEE
WHERE PNUMBER=PNO AND ESSN=SSN AND LNAME='SMITH')

以下是重新建立 :
Step 1
首先先建立初始的樣子。
專案名稱 : crystal test

  • SQL語法輸入區
  • 按鈕產生報表












Step 2

  • 加入>新增項目>建立一個DataSet
  • 工具箱拉一個TableAdapter










Step 3
產生如下圖

按下一步直到產生下一張圖












Step 4
請使用第一個選項,因為要建立的是所使用的SQL語法的Table












Step 5
把SQL語法輸入進去!!

可點圖查看!












Step 6
之後DataSet便會建立此SQL語法的Table












Step 7
接著是建立Crystal report流程見圖。








































這裡請選擇資料集內的Table,
即我剛剛在DataSet裡新增的Table
並且按 " > " 新增過去

接著按"完成"








Step 8
建好如圖所示。













Step 9
接著請把Table拉到"細目選項"。













Step 10
接著回到設計主頁,拉一個Crystal report Viewer到Form裡。














大致如此圖。


接著產生按鈕事件,並輸入如下程式碼









 private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                string ConnString;
                ConnString = "integrated security=SSPI;data source=Agau-PC;" + "persist security info=True;initial catalog=company";
                string SelectCmd = textBox1.Text;//取得我輸入的SQL語法
                SqlConnection conn = new SqlConnection(ConnString);
                conn.Open();
                SqlDataAdapter da = new SqlDataAdapter(SelectCmd, conn);
                DataSet ds = new DataSet();
                da.Fill(ds);
                DataTable dt = new DataTable();
                dt = ds.Tables[0];
                ReportDocument RD = new ReportDocument();
                RD.Load(@"C:\CrystalReport1.rpt");//這裡是放你的CrystalReport1.rpt位置
                RD.SetDataSource(dt);
                crystalReportViewer1.ReportSource = RD;
      
                conn.Close();
                da.Dispose();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "例外訊息");
            }
        }

之後執行程式在輸入區內輸入一開始的語法,並按下按鈕,即可產生。

1 則留言:

  1. 您好 此篇圖示都不見了...可否更新圖檔?? thanks

    回覆刪除