using BLL; using NPOI.XSSF.UserModel; using NPOI.SS.UserModel; using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.IO; using System.Linq; using System.Text; using System.Web.UI; namespace FineUIPro.Web.Report { public partial class TimeSheetReport :PageBase { #region 加载 /// /// 加载页面 /// /// /// protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { GetButtonPower();//权限设置 BLL.DepartService.InitCTEDepartDropDownList(this.drpWorkCenter, false); btnSelectColumns.OnClientClick = Window1.GetShowReference("TimeSheetReportSelectColumn.aspx"); ddlPageSize.SelectedValue = Grid1.PageSize.ToString(); // 绑定表格 BindGrid(); } } /// /// 绑定数据 /// private void BindGrid() { List listStr = new List(); if (!string.IsNullOrEmpty(this.txtMonth.Text.Trim())) { listStr.Add(new SqlParameter("@YearMonths", this.txtMonth.Text.Trim())); } if (this.drpWorkCenter.SelectedValue != BLL.Const._Null && this.drpWorkCenter.SelectedItem.Text != "CTE") { listStr.Add(new SqlParameter("@WorkCenter", this.drpWorkCenter.SelectedItem.Text.Trim())); } SqlParameter[] parameter = listStr.ToArray(); DataTable tb = SQLHelper.GetDataTableRunProc("Proc_TimeSheetReport", parameter); Grid1.RecordCount = tb.Rows.Count; var table = this.GetPagedDataTable(Grid1, tb); Grid1.DataSource = table; Grid1.DataBind(); } #endregion #region 查询 /// /// 下拉框选择事件 /// /// /// protected void DropDownList_SelectedIndexChanged(object sender, EventArgs e) { BindGrid(); } protected void txtMonth_TextChanged(object sender, EventArgs e) { BindGrid(); } #endregion #region 分页、排序 /// /// 分页 /// /// /// protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e) { Grid1.PageIndex = e.NewPageIndex; BindGrid(); } /// /// 分页显示条数下拉框 /// /// /// protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e) { Grid1.PageSize = Convert.ToInt32(ddlPageSize.SelectedValue); BindGrid(); } /// /// 排序 /// /// /// protected void Grid1_Sort(object sender, FineUIPro.GridSortEventArgs e) { Grid1.SortDirection = e.SortDirection; Grid1.SortField = e.SortField; BindGrid(); } #endregion #region 选择列导出 protected void Window1_Close(object sender, WindowCloseEventArgs e) { Response.ClearContent(); string filename = Funs.GetNewFileName(); Response.AddHeader("content-disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode("TimeSheet Report" + filename, System.Text.Encoding.UTF8) + ".xls"); Response.ContentType = "application/excel"; Response.ContentEncoding = System.Text.Encoding.UTF8; this.Grid1.PageSize = 100000; this.BindGrid(); Response.Write(GetGridTableHtml(Grid1, e.CloseArgument.Split('#'))); Response.End(); } private string GetGridTableHtml(Grid grid, string[] columns) { StringBuilder sb = new StringBuilder(); sb.Append(""); List columnHeaderTexts = new List(columns); List columnIndexs = new List(); sb.Append(""); sb.Append(""); foreach (GridColumn column in grid.Columns) { if (columnHeaderTexts.Contains(column.HeaderText)) { sb.AppendFormat("", column.HeaderText); columnIndexs.Add(column.ColumnIndex); } } sb.Append(""); foreach (GridRow row in grid.Rows) { sb.Append(""); int columnIndex = 0; foreach (object value in row.Values) { if (columnIndexs.Contains(columnIndex)) { string html = value.ToString(); if (html.StartsWith(Grid.TEMPLATE_PLACEHOLDER_PREFIX)) { // 模板列 string templateID = html.Substring(Grid.TEMPLATE_PLACEHOLDER_PREFIX.Length); Control templateCtrl = row.FindControl(templateID); html = GetRenderedHtmlSource(templateCtrl); } sb.AppendFormat("", html); } columnIndex++; } sb.Append(""); } sb.Append("
{0}
{0}
"); return sb.ToString(); } /// /// 获取控件渲染后的HTML源代码 /// /// /// private string GetRenderedHtmlSource(Control ctrl) { if (ctrl != null) { using (StringWriter sw = new StringWriter()) { using (HtmlTextWriter htw = new HtmlTextWriter(sw)) { ctrl.RenderControl(htw); return sw.ToString(); } } } return String.Empty; } #endregion #region 导出 /// /// 导出按钮 /// /// /// protected void btnExport_Click(object sender, EventArgs e) { string rootPath = Server.MapPath("~/") + Const.ExcelUrl; //模板文件 string TempletFileName = rootPath + "Time_Sheet_Report.xlsx"; //导出文件 string filePath = rootPath + DateTime.Now.ToString("yyyyMMddhhmmss") + "\\"; if (!Directory.Exists(filePath)) { Directory.CreateDirectory(filePath); } string ReportFileName = filePath + "out.xlsx"; FileStream file = new FileStream(TempletFileName, FileMode.Open, FileAccess.Read); XSSFWorkbook hssfworkbook = new XSSFWorkbook(file); #region Time_Sheet_Report XSSFSheet reportModel = (XSSFSheet)hssfworkbook.GetSheet("Time_Sheet_Report"); XSSFFont cs_content_Font = (XSSFFont)hssfworkbook.CreateFont(); //创建字体 cs_content_Font.FontName = "sans-serif";//字体 cs_content_Font.FontHeightInPoints = 10; //字体大小 ICellStyle styleCenter = hssfworkbook.CreateCellStyle(); styleCenter.VerticalAlignment = VerticalAlignment.Center; styleCenter.Alignment = HorizontalAlignment.Center; styleCenter.SetFont(cs_content_Font); List listStr = new List(); if (!string.IsNullOrEmpty(txtMonth.Text.Trim())) { listStr.Add(new SqlParameter("@YearMonths", txtMonth.Text.Trim())); } if (this.drpWorkCenter.SelectedValue != BLL.Const._Null && !string.IsNullOrEmpty(this.drpWorkCenter.SelectedValue) && this.drpWorkCenter.SelectedItem.Text != "CTE") { listStr.Add(new SqlParameter("@WorkCenter", drpWorkCenter.SelectedItem.Text.Trim())); } SqlParameter[] parameter = listStr.ToArray(); DataTable table = SQLHelper.GetDataTableRunProc("Proc_TimeSheetReport", parameter); if (table.Rows.Count > 0) { var rowIndex = 1; for (int i = 0; i < table.Rows.Count; i++) { if (reportModel.GetRow(rowIndex) == null) reportModel.CreateRow(rowIndex); #region 列赋值 //Month if (reportModel.GetRow(rowIndex).GetCell(0) == null) reportModel.GetRow(rowIndex).CreateCell(0); reportModel.GetRow(rowIndex).GetCell(0).SetCellValue(table.Rows[i]["Months"].ToString()); reportModel.GetRow(rowIndex).GetCell(0).CellStyle.SetFont(cs_content_Font);//将字体绑定到样式 //Job Title if (reportModel.GetRow(rowIndex).GetCell(1) == null) reportModel.GetRow(rowIndex).CreateCell(1); reportModel.GetRow(rowIndex).GetCell(1).SetCellValue(table.Rows[i]["JobTitle"].ToString()); //Account if (reportModel.GetRow(rowIndex).GetCell(2) == null) reportModel.GetRow(rowIndex).CreateCell(2); reportModel.GetRow(rowIndex).GetCell(2).SetCellValue(table.Rows[i]["Account"].ToString()); //Op. if (!string.IsNullOrEmpty(table.Rows[i]["Op"].ToString())) { if (reportModel.GetRow(rowIndex).GetCell(3) == null) reportModel.GetRow(rowIndex).CreateCell(3); reportModel.GetRow(rowIndex).GetCell(3).SetCellValue(table.Rows[i]["Op"].ToString()); } //SubOp if (!string.IsNullOrEmpty(table.Rows[i]["SubOp"].ToString())) { if (reportModel.GetRow(rowIndex).GetCell(4) == null) reportModel.GetRow(rowIndex).CreateCell(4); reportModel.GetRow(rowIndex).GetCell(4).SetCellValue(table.Rows[i]["SubOp"].ToString()); } //Work Ctr if (reportModel.GetRow(rowIndex).GetCell(5) == null) reportModel.GetRow(rowIndex).CreateCell(5); reportModel.GetRow(rowIndex).GetCell(5).SetCellValue(table.Rows[i]["WorkCtr"].ToString()); reportModel.GetRow(rowIndex).GetCell(5).CellStyle = styleCenter; //Act. Type if (reportModel.GetRow(rowIndex).GetCell(6) == null) reportModel.GetRow(rowIndex).CreateCell(6); if (table.Rows[i]["Type"].ToString().Contains("T01_OverTime")) { string actType = table.Rows[i]["ActType"].ToString(); if (actType.Contains("2")) { string actStr = actType + "1"; reportModel.GetRow(rowIndex).GetCell(6).SetCellValue(actStr); } } else if (table.Rows[i]["Type"].ToString().Contains("T02_OverTime")) { string actType = table.Rows[i]["ActType"].ToString(); if (actType.Contains("2")) { string actStr = actType + "2"; reportModel.GetRow(rowIndex).GetCell(6).SetCellValue(actStr); } } else if (table.Rows[i]["Type"].ToString().Contains("T03_OverTime")) { string actType = table.Rows[i]["ActType"].ToString(); if (actType.Contains("2")) { string actStr = actType + "3"; reportModel.GetRow(rowIndex).GetCell(6).SetCellValue(actStr); } } else { reportModel.GetRow(rowIndex).GetCell(6).SetCellValue(table.Rows[i]["ActType"].ToString()); } reportModel.GetRow(rowIndex).GetCell(6).CellStyle = styleCenter; //Hours if (!string.IsNullOrEmpty(table.Rows[i]["Hours"].ToString())) { if (reportModel.GetRow(rowIndex).GetCell(7) == null) reportModel.GetRow(rowIndex).CreateCell(7); reportModel.GetRow(rowIndex).GetCell(7).SetCellValue(Convert.ToDouble(table.Rows[i]["Hours"])); reportModel.GetRow(rowIndex).GetCell(7).CellStyle = styleCenter; } //Type if (reportModel.GetRow(rowIndex).GetCell(8) == null) reportModel.GetRow(rowIndex).CreateCell(8); reportModel.GetRow(rowIndex).GetCell(8).SetCellValue(table.Rows[i]["Type"].ToString()); reportModel.GetRow(rowIndex).GetCell(8).CellStyle = styleCenter; //Name if (reportModel.GetRow(rowIndex).GetCell(9) == null) reportModel.GetRow(rowIndex).CreateCell(9); reportModel.GetRow(rowIndex).GetCell(9).SetCellValue(table.Rows[i]["UserName"].ToString()); reportModel.GetRow(rowIndex).GetCell(9).CellStyle = styleCenter; //Planed Hours if (reportModel.GetRow(rowIndex).GetCell(10) == null) reportModel.GetRow(rowIndex).CreateCell(10); //if (!string.IsNullOrEmpty(table.Rows[i]["PlanedHours"].ToString())) //{ reportModel.GetRow(rowIndex).GetCell(10).SetCellValue(Convert.ToDouble(table.Rows[i]["PlanedHours"])); //} //else //{ // reportModel.GetRow(rowIndex).GetCell(10).SetCellValue(0); //} //Actual Hours if (reportModel.GetRow(rowIndex).GetCell(11) == null) reportModel.GetRow(rowIndex).CreateCell(11); //if (!string.IsNullOrEmpty(table.Rows[i]["ActualHours"].ToString())) //{ reportModel.GetRow(rowIndex).GetCell(11).SetCellValue(Convert.ToDouble(table.Rows[i]["ActualHours"])); //} //else //{ // reportModel.GetRow(rowIndex).GetCell(11).SetCellValue(0); //} #endregion rowIndex++; } } #endregion reportModel.ForceFormulaRecalculation = true; using (FileStream filess = File.OpenWrite(ReportFileName)) { hssfworkbook.Write(filess); } FileInfo filet = new FileInfo(ReportFileName); Response.Clear(); Response.Charset = "GB2312"; Response.ContentEncoding = System.Text.Encoding.UTF8; // 添加头信息,为"文件下载/另存为"对话框指定默认文件名 Response.AddHeader("Content-Disposition", "attachment; filename=P11_Time_Sheet_Report_" + Server.UrlEncode(DateTime.Now.ToString("yyyyMMddhhmmss") + ".xlsx")); // 添加头信息,指定文件大小,让浏览器能够显示下载进度 Response.AddHeader("Content-Length", filet.Length.ToString()); // 指定返回的是一个不能被客户端读取的流,必须被下载 Response.ContentType = "application/ms-excel"; // 把文件流发送到客户端 Response.WriteFile(filet.FullName); // 停止页面的执行 Response.End(); } /// /// 根据sql获取数据 /// /// /// /// /// public static DataTable GetDataTableNameRunText(string strSql, string tableName = "", params SqlParameter[] parameters) { DataTable dataTable = string.IsNullOrEmpty(tableName) ? new DataTable() : new DataTable(tableName); using (SqlConnection Connection = new SqlConnection(Funs.ConnString)) { try { Connection.Open(); SqlCommand command = new SqlCommand(strSql, Connection); command.CommandType = CommandType.Text; if (parameters != null) { command.Parameters.AddRange(parameters); } SqlDataAdapter adapter = new SqlDataAdapter(command); adapter.Fill(dataTable); } finally { Connection.Close(); } } return dataTable; } #endregion #region 权限设置 /// /// 菜单按钮权限 /// private void GetButtonPower() { var buttonList = BLL.CommonService.GetAllButtonList(this.CurrUser.UserId, BLL.Const.TimeSheetReportMenuId); if (buttonList.Count() > 0) { if (buttonList.Contains(BLL.Const.BtnOut)) { this.btnExport.Hidden = false; this.btnSelectColumns.Hidden = false; } } } #endregion } }