水晶報表


一:水晶報表的安裝

a,下載: http://downloads.businessobjects.com/akdlm/cr4vs2010/CRforVS_13_0_1.exe

b,安裝,很簡單,基本就是“下一步”到頭,這里不再介紹。

二:如何在vs2010里使用

a,運行環境不能為.NET FRAMEWORK 4.0 CLINET PROFILE,要改為.NET FRAMEWORK 4,選中項目右鍵屬性就可以更改了

b,在項目中加一個APP.CONFIG(這是針對WINFORM項目),如果是WEB項目就不用加了,里面有一個WEB.CONFIG;在這配
置文件中加上  <startup useLegacyV2RuntimeActivationPolicy="true">
   <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup>
這可以避免ADO.NET與水晶報表運行時由於.NET版本問題出錯,如圖:

2014-04-09_163422

c,下面就是新建一個水晶報表了,新建一個水晶報表.rpt,右擊 解決方案的報表文件夾 CR  -> 添加-> 新建項
    從左側“已安裝的模板”列表中選 “Reporting”,右側列表中選 “Crystal Reports”
    在下側 “名稱”處 輸入希望的名稱,比如: CrystalReport.rpt, 按“添加”進入。如圖:

2014-04-10_194428

d,新建一個用放置報表的顯示控件的框體.cs,拖放一個crystalReportViewer,如圖:

2014-04-10_194911

e,設計水晶報表.rpt,右鍵單擊數據字段,新建字段,找到數據源的字段,(當然可以為水晶報表新建一個專用的類,用於水晶報表.rpt的數據設計操作)如圖加入字段,然后就是拖放新建的字段到水晶報表.rpt,在其他字段里新建其他需要的字段,並拖放到需要的位置。

2014-04-09_173155

2014-04-10_195306

 

三:實例截圖

2014-04-10_200230

四:PrintSalarySheet.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using HRMSys.DAL;
using HRMSys.Model;

namespace HYMSys.UI.EmployeeMgr
{
    public partial class PrintSalarySheet : Form
    {
        public PrintSalarySheet()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 窗口自動載入事件,載入部門
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void PrintSalarySheet_Load(object sender, EventArgs e)
        {
            DepartmentDAL dal = new DepartmentDAL();
            cb_depart.DataSource= dal.ListAll();
            cb_depart.DisplayMember = "Name";
            //cb_depart.SelectedValue = "Id";//這里應該寫 cb_depart.ValueMember = "Id",SelectedValue現在為空,因為就沒有選擇
            cb_depart.ValueMember = "Id";
        }
        /// <summary>
        /// 搜索某年某月的工資表
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_search_Click(object sender, EventArgs e)
        {
            //取得文本框里的值
            int year = Convert.ToInt32( tb_year.Text);
            int month = Convert.ToInt32(tb_month.Text);
            Guid id = (Guid)cb_depart.SelectedValue;
            //判斷是否已經生成工資表
            SalarySheetDAL sheetDAL = new SalarySheetDAL();
            if (sheetDAL.IsExists(year, month, id) == false)
            {
                MessageBox.Show("還未生成工資!");
                return;
            }

           //得到員工的工資表,將信息轉換位水晶報表的字段

            Guid sheetId = sheetDAL.GetYearMonthDepartSheetId(year, month, id);
            SalarySheetItemList[] items = sheetDAL.GetSalaryItems(sheetId);
            //聲明一個水晶報表的顯示字段
            SalarySheetItemRpt[] rptItems = new SalarySheetItemRpt[items.Length];
            for (int i = 0; i < items.Length; i++)
            {
                SalarySheetItemList item = items[i];
                SalarySheetItemRpt rptItem = new SalarySheetItemRpt();
                rptItem.BaseSalary = item.BaseSalary;
                rptItem.Bonus = item.Bonus;
                rptItem.Fine = item.Fine;
                rptItem.Other = item.Other;
                //select emp.Name join T_employee

                rptItem.EmployeeName = item.EmployeeName;
                rptItems[i] = rptItem;
            }
            //聲明一個水晶報表類
            SalarySheetReport report = new SalarySheetReport();
            report.SetDataSource(rptItems);
            report.SetParameterValue("年", year);
            report.SetParameterValue("月", month);
            report.SetParameterValue("部門名稱", cb_depart.SelectedText);

            crystalReportViewer1.ReportSource = report;

        }
    }
}

五:SalarySheetItemRpt.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace HYMSys.UI.EmployeeMgr
{
    public class SalarySheetItemRpt
    {
        public decimal Bonus { get; set; }
        public decimal BaseSalary { get; set; }
        public decimal Fine { get; set; }
        public decimal Other { get; set; }
        public string EmployeeName { get; set; }
    }
}

六:App.config

<?xml version="1.0"?>
<configuration>
  <connectionStrings>
    <add name="constr" connectionString="server=.;database=HRMSysDB1;uid=sa;pwd=123123"/>
  </connectionStrings>
  <appSettings>
    <add key="PasswodSalt" value="Love@.&gt;1"/>
  </appSettings>
<startup useLegacyV2RuntimeActivationPolicy="true"><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>

七:其中的報錯處理

解決,將承載進程去到

八:總結

今天為止我的小的人事管理系統就完成了,經歷了將近兩個多月的時間,太不容易了,特別對於我這種菜鳥來說,這個是仿照一個WPF的小項目做的winform程序,做到這里我感覺自己有太多太多的知識不是理解的很透徹,唯有“紙上得來終覺淺,絕知此事要躬行”這樣才能學好編程!在這里希望開發界的前輩多來來吐槽、批評和指導。-------紅馬車


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM