DutyReport.aspx.cs
上传用户:cha0314
上传日期:2014-03-02
资源大小:12522k
文件大小:8k
源码类别:

C#编程

开发平台:

C#

  1. using System;
  2. using System.Collections;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Data.SqlClient;
  6. using System.Drawing;
  7. using System.Web;
  8. using System.Web.SessionState;
  9. using System.Web.UI;
  10. using System.Web.UI.WebControls;
  11. using System.Web.UI.HtmlControls;
  12. using UDS.Components;
  13. namespace UDS.SubModule.WorkAttendance.Report
  14. {
  15. /// <summary>
  16. /// DutyReport 的摘要说明。
  17. /// </summary>
  18. public class DutyReport : System.Web.UI.Page
  19. {
  20. protected DataSet ds_Duty;
  21. protected CrystalDecisions.Web.CrystalReportViewer cv_Duty;
  22. protected System.Web.UI.WebControls.LinkButton lbtn_IEPrint;
  23. protected DataSet ds_Report;
  24. protected string idtype,ids,begintime,endtime;
  25. protected System.Web.UI.WebControls.Button btn_Change;
  26. protected System.Web.UI.WebControls.DropDownList ddl_FileFormat;
  27. protected rpt_DutyReport myreport;
  28. private void Page_Load(object sender, System.EventArgs e)
  29. {
  30. if(!Page.IsPostBack)
  31. {
  32. idtype = Request.QueryString["idtype"].ToString();
  33. ids    = Request.QueryString["ids"].ToString();
  34. begintime = Request.QueryString["begintime"].ToString();
  35. endtime = Request.QueryString["endtime"].ToString();
  36. ViewState["idtype"] = idtype;
  37. ViewState["ids"]    = ids;
  38. ViewState["begintime"]    = begintime;
  39. ViewState["endtime"]    = endtime;
  40. }
  41. else
  42. {
  43. idtype = ViewState["idtype"].ToString();
  44. ids    = ViewState["ids"].ToString();
  45. begintime = ViewState["begintime"].ToString();
  46. endtime = ViewState["endtime"].ToString();
  47. }
  48. ds_Duty = (DataSet)Cache["WA_Duty"];
  49. //从TotalDuty.xsd获得架构
  50. ds_Report = new DataSet();
  51. ds_Report.ReadXmlSchema(Request.MapPath(".")+"\TotalDuty.xsd");
  52. #region 缓存如果不存在
  53. if(ds_Duty==null)
  54. {
  55. //重新获取ds_Duty
  56. SqlDataReader dr,dr1,dr2;
  57. SqlParameter[] prams = new SqlParameter[4];
  58. UDS.Components.Database db = new UDS.Components.Database();
  59. DataSet ds = new DataSet();
  60. //得到考勤数据
  61. prams[0] = db.MakeInParam("@begintime",SqlDbType.DateTime,8,begintime);
  62. prams[1] = db.MakeInParam("@endtime",SqlDbType.DateTime,8,endtime);
  63. prams[2] = db.MakeInParam("@ids",SqlDbType.VarChar,1000,ids);
  64. prams[3] = db.MakeInParam("@idtype",SqlDbType.VarChar,50,idtype);
  65. db.RunProc("sp_WA_GetAttendanceData",prams,out dr);
  66. DataTable datatable =  Tools.ConvertDataReaderToDataTable(dr);
  67. ds.Tables.Add(datatable);
  68. db.Dispose();
  69. dr.Close();
  70. //得到人员名单
  71. if(idtype=="staff")
  72. {
  73. SqlParameter[] prams1 = {db.MakeInParam("@ids",SqlDbType.VarChar,1000,ids)};
  74. db.RunProc("sp_WA_GetSelectedStaffFromID",prams1,out dr1);
  75. DataTable datatable1 =  Tools.ConvertDataReaderToDataTable(dr1);
  76. ds.Tables.Add(datatable1);
  77. db.Dispose();
  78. dr1.Close();
  79. }
  80. else if(idtype=="Position")
  81. {
  82. SqlParameter[] prams1 = {
  83. db.MakeInParam("@Position_id",SqlDbType.Int,4,Int32.Parse(ids)),
  84. db.MakeInParam("@Dimission",SqlDbType.Bit,1,0)
  85. };
  86. db.RunProc("sp_GetStaffInPosition",prams1,out dr1);
  87. DataTable datatable1 =  Tools.ConvertDataReaderToDataTable(dr1);
  88. ds.Tables.Add(datatable1);
  89. db.Dispose();
  90. dr1.Close();
  91. }
  92. else if(idtype=="company")
  93. {
  94. SqlParameter[] prams1 = {
  95. db.MakeInParam("@StaffType",SqlDbType.Int,4,0)
  96. };
  97. db.RunProc("sp_GetAllStaff",prams1,out dr1);
  98. DataTable datatable1 =  Tools.ConvertDataReaderToDataTable(dr1);
  99. ds.Tables.Add(datatable1);
  100. db.Dispose();
  101. dr1.Close();
  102. }
  103. SqlParameter[] prams2 = {
  104. db.MakeInParam("@begintime",SqlDbType.DateTime,8,begintime),
  105. db.MakeInParam("@endtime",SqlDbType.DateTime,8,endtime)
  106. };
  107. db.RunProc("sp_WA_GetDutyDay",prams2,out dr2);
  108. DataTable datatable2 =  Tools.ConvertDataReaderToDataTable(dr2);
  109. ds.Tables.Add(datatable2);
  110. db.Dispose();
  111. dr2.Close();
  112. //缓存数据
  113. Cache["WA_Duty"] = ds;
  114. ds_Duty = (DataSet)Cache["WA_Duty"];
  115. }
  116. #endregion
  117. //生成ds_Report以可以绑定到rpt
  118. //ds_Duty.Tables[0] 考勤数据
  119. //ds_Duty.Tables[1] 人员数据
  120. //ds_Duty.Tables[2] 考勤日期数据
  121. //遍历人员数据表以生成新的ds_Report
  122. for(int i=0;i<ds_Duty.Tables[1].Rows.Count;i++)
  123. {
  124. DataRow row = ds_Report.Tables[0].NewRow();
  125. row[0] = ds_Duty.Tables[1].Rows[i]["RealName"];
  126. row[1] = GetDutyDateCount(ds_Duty.Tables[0].DefaultView,ds_Duty.Tables[2].DefaultView,ds_Duty.Tables[1].Rows[i]["Staff_ID"].ToString(),0);
  127. row[2] = GetDutyDateCount(ds_Duty.Tables[0].DefaultView,ds_Duty.Tables[2].DefaultView,ds_Duty.Tables[1].Rows[i]["Staff_ID"].ToString(),1);
  128. row[3] = GetDutyDateCount(ds_Duty.Tables[0].DefaultView,ds_Duty.Tables[2].DefaultView,ds_Duty.Tables[1].Rows[i]["Staff_ID"].ToString(),2);
  129. row[4] = GetDutyDateCount(ds_Duty.Tables[0].DefaultView,ds_Duty.Tables[2].DefaultView,ds_Duty.Tables[1].Rows[i]["Staff_ID"].ToString(),3);
  130. row[5] = GetDutyDateCount(ds_Duty.Tables[0].DefaultView,ds_Duty.Tables[2].DefaultView,ds_Duty.Tables[1].Rows[i]["Staff_ID"].ToString(),4);
  131. ds_Report.Tables[0].Rows.Add(row);
  132. }
  133. myreport = new rpt_DutyReport();
  134. myreport.SetDataSource(ds_Report);
  135. cv_Duty.ReportSource = myreport;
  136. cv_Duty.DataBind();
  137. }
  138. string  GetDutyDateCount(DataView tv_DutyData,DataView tv_DutyDate,string staffid,int type)
  139. {
  140. //type:0 正常 1:迟到 2:早退 3:未考勤 4:总考勤天数
  141. switch(type)
  142. {
  143. case 0:
  144. tv_DutyData.RowFilter = "OnDuty_Status = false and OffDuty_Status = false and staff_id="+staffid;
  145. break;
  146. case 1:
  147. tv_DutyData.RowFilter = "OnDuty_Status=true and staff_id="+staffid;
  148. break;
  149. case 2:
  150. tv_DutyData.RowFilter = "OffDuty_Status = true and staff_id="+staffid;
  151. break;
  152. case 3:
  153. tv_DutyData.RowFilter = "staff_id=" + staffid;
  154. return((tv_DutyDate.Count - tv_DutyData.Count).ToString());
  155. break;
  156. case 4:
  157. break;
  158. }
  159. return(tv_DutyData.Count.ToString());
  160.  
  161. #region Web 窗体设计器生成的代码
  162. override protected void OnInit(EventArgs e)
  163. {
  164. //
  165. // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
  166. //
  167. InitializeComponent();
  168. base.OnInit(e);
  169. }
  170. /// <summary>
  171. /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  172. /// 此方法的内容。
  173. /// </summary>
  174. private void InitializeComponent()
  175. {    
  176. this.lbtn_IEPrint.Click += new System.EventHandler(this.lbtn_IEPrint_Click);
  177. this.btn_Change.Click += new System.EventHandler(this.btn_Change_Click);
  178. this.Load += new System.EventHandler(this.Page_Load);
  179. }
  180. #endregion
  181. private void lbtn_IEPrint_Click(object sender, System.EventArgs e)
  182. {
  183. if(lbtn_IEPrint.Text == "IE打印预览")
  184. {
  185. cv_Duty.SeparatePages = false;
  186. cv_Duty.DisplayToolbar = false;
  187. lbtn_IEPrint.Text = "取消IE打印预览";
  188. }
  189. else
  190. {
  191. cv_Duty.SeparatePages = true;
  192. cv_Duty.DisplayToolbar = true;
  193. lbtn_IEPrint.Text = "IE打印预览";
  194. }
  195. }
  196. private void btn_Change_Click(object sender, System.EventArgs e)
  197. {
  198. string filetype = "";
  199. filetype = ddl_FileFormat.SelectedValue;
  200. string contenttype = "";
  201. string myfilename = Request.MapPath(".")+"\ReportExportFile\"+Session.SessionID+"."+filetype;
  202. CrystalDecisions.Shared.DiskFileDestinationOptions mydiskfiledestinationoptions = new CrystalDecisions.Shared.DiskFileDestinationOptions();
  203. mydiskfiledestinationoptions.DiskFileName = myfilename;
  204. CrystalDecisions.Shared.ExportOptions myExportOptions = myreport.ExportOptions;
  205. myExportOptions.DestinationOptions = mydiskfiledestinationoptions;
  206. myExportOptions.ExportDestinationType = CrystalDecisions.Shared.ExportDestinationType.DiskFile;
  207. switch(ddl_FileFormat.SelectedItem.Value)
  208. {
  209. case "pdf":
  210. contenttype = "application/pdf";
  211. myExportOptions.ExportFormatType = CrystalDecisions.Shared.ExportFormatType.PortableDocFormat;
  212. break;
  213. case "doc":
  214. contenttype = "application/msword";
  215. myExportOptions.ExportFormatType = CrystalDecisions.Shared.ExportFormatType.WordForWindows;
  216. break;
  217. }
  218. myreport.Export();
  219. Response.ClearContent();
  220. Response.ClearHeaders();
  221. Response.ContentType = contenttype;
  222. Response.WriteFile(myfilename);
  223. Response.Flush();
  224. Response.Close();
  225. System.IO.File.Delete(myfilename);
  226. }
  227. }
  228. }