/// <summary> /// 考试报表 /// </summary> /// <returns></returns> public ActionResult ExamReport(ExamReportModels examReportModels, ExamReportOptions examReportOptions) { /* 操作类型 */ string 操作类型 = LKExamURLQueryKey.GetString("HandleType"); bool iSWord版 = 操作类型 == "2"; #region 考试报表属性 /* 考试设置ID */ Guid g考试设置ID = examReportModels.TestID; /* 部门ID */ Guid g部门ID = examReportModels.DepartmentID; /* 考试报表选项初始化值 */ examReportOptions = new ExamReportOptions(examReportOptions); /* 考试报表选项 */ examReportModels.ExamReportOptions = examReportOptions; /* 是否导出Word */ examReportModels.ISWord版 = iSWord版; /* 分数段 */ int i分数段 = examReportOptions.ScoreSection; #endregion #region 考试分析数据 考试设置 c考试设置 = null; List<考试分析> list考试分析 = 考试分析.得到某场考试分析数据(g考试设置ID, i分数段, g部门ID, out c考试设置); examReportModels.考试分析 = list考试分析; examReportModels.考试设置 = c考试设置; examReportModels.DataTable = 导出考试分析.得到考试分析信息(g考试设置ID, g部门ID); #endregion /* *操作类型 * (1)1表示查询 * (2)2表示导出Word */ if (iSWord版) { string s部门名称 = "部门"; string sFileName = c考试设置.试卷内容.名称 + (string.IsNullOrEmpty(s部门名称) ? "" : "(" + s部门名称 + ")"); new LKExamOffice().导出考试报表到Word(examReportModels, sFileName); } else { #region 考试报表Models if (list考试分析 != null && list考试分析.Count != 0) { /* 将考试报表Models存放在Session中 */ Session["考试报表Models"] = examReportModels; Session.Timeout = 1; } #endregion } return View("~/Views/Examiner/Analysis/ExamReport.aspx", examReportModels); }
/// <summary> /// ExamReport图形 /// </summary> /// <param name="examReportModels">考试报表Models</param> /// <returns></returns> public static string ExamReport图形(ExamReportModels examReportModels) { string sContent = LKPageHtml.MvcTextTag(TagName.H3, LKExamEnvironment.考生名称 + "考试分析图表:"); List<考试分析> list考试分析 = examReportModels.考试分析; if (list考试分析 != null && list考试分析.Count != 0) { /* 图表标题 */ string sTitle = examReportModels.考试设置.试卷内容.名称; if (examReportModels.DepartmentID != Guid.Empty) { sTitle += "(" + list考试分析[0].部门名 + ")"; } Guid g考试设置ID = examReportModels.考试设置.ID; HttpRequest httpRequest = HttpContext.Current.Request; string sSrc = httpRequest.Url.Scheme + "://" + httpRequest.Url.Authority + ExamReport图形文件虚拟路径(examReportModels.ISWord版, g考试设置ID); /* 考试图表 */ sContent += LKPageHtml.MvcTextTag(TagName.IMG, null, new { src = sSrc, alt = sTitle, title = sTitle }); } else { /* 暂无考试分析 */ sContent += LKPageHtml.MvcTextTag_Div("暂无分析图表", new { @class = "nodata" }); } return LKPageHtml.MvcTextTag_Div(sContent); }
/// <summary> /// 返回考试分析Chart /// </summary> /// <param name="examReportModels">考试报表Models</param> /// <returns></returns> public Chart Get考试分析Chart(ExamReportModels examReportModels) { /* 考试报表选项 */ ExamReportOptions examReportOptions = examReportModels.ExamReportOptions; /* 考试设置 */ 考试设置 c考试设置 = examReportModels.考试设置; /* list考试分析 */ List<考试分析> list考试分析 = examReportModels.考试分析; /* 标题 */ string sTitle = c考试设置.试卷内容.名称; if (examReportModels.DepartmentID != Guid.Empty) { sTitle += "(" + list考试分析[0].部门名 + ")"; } /* 考试分析图表 */ Chart chart = new System.Web.UI.DataVisualization.Charting.Chart(); Title title = new Title(); title.Text = sTitle; title.ToolTip = sTitle; title.Font = new Font("Trebuchet MS", 15, FontStyle.Bold); title.ShadowColor = Color.FromArgb(32, 0, 0, 0); title.ShadowOffset = 3; title.ForeColor = Color.FromArgb(26, 59, 105); chart.Titles.Add(title); chart.Width = examReportModels.ISWord版 ? examReportOptions.WidthWord版 : examReportOptions.Width; chart.Height = examReportOptions.Height; chart.ImageType = ChartImageType.Png; chart.RenderType = RenderType.ImageTag; chart.Palette = ChartColorPalette.BrightPastel; chart.BackColor = Color.FromArgb(211, 223, 240); chart.BackSecondaryColor = Color.White; chart.BackGradientStyle = GradientStyle.TopBottom; chart.BorderlineDashStyle = ChartDashStyle.Solid; chart.BorderWidth = 2; chart.BorderColor = Color.FromArgb(26, 59, 105); chart.BorderSkin.SkinStyle = BorderSkinStyle.Emboss; return chart; }
/// <summary> /// 保存考试分析Chart /// </summary> /// <param name="chart"></param> public void Save考试分析Chart(ExamReportModels examReportModels) { Guid g考试设置ID = examReportModels.考试设置.ID; Chart chart = Get考试分析图形(examReportModels); #region Directory //web请求 HttpServerUtility httpServerUtility = System.Web.HttpContext.Current.Server; string directory = "/Content/File/ExamChart/"; //新图片路径对应的目录不存在 if (!Directory.Exists(httpServerUtility.MapPath(directory))) { //按虚拟路径创建所有目录和子目录 Directory.CreateDirectory(@httpServerUtility.MapPath(directory)); } #endregion string filePath = AnalysisExtensions.ExamReport图形文件虚拟路径(true, g考试设置ID); chart.SaveImage(@httpServerUtility.MapPath(filePath), ChartImageFormat.Png); chart.Dispose(); chart = null; }
/// <summary> /// 返回考试分析饼状图形 /// </summary> /// <param name="examReportModels">考试报表Models</param> /// <returns></returns> public Chart Get考试分析饼状图形(ExamReportModels examReportModels) { return Get考试分析特殊图形(examReportModels, SeriesChartType.Pie); }
/// <summary> /// 返回考试分析特殊图形 /// </summary> /// <param name="examReportModels">考试报表Models</param> /// <param name="seriesChartType">图形类型</param> /// <returns></returns> public Chart Get考试分析特殊图形(ExamReportModels examReportModels, SeriesChartType seriesChartType) { /* 考试分析Chart */ Chart chart = Get考试分析Chart(examReportModels); /* list考试分析 */ List<考试分析> list考试分析 = examReportModels.考试分析; List<string> listX = list考试分析[0].间隔值列表; for (int i = 0; i < list考试分析.Count; i++) { ChartArea chartArea = Get考试分析ChartArea(); List<int> listY = list考试分析[i].人数列表; //chartArea.Area3DStyle.Enable3D = true; chart.ChartAreas.Add(chartArea); Legend legend = new Legend(); legend.Title = "分数段"; legend.BackColor = Color.Transparent; legend.Font = new Font("Trebuchet MS", 8, FontStyle.Bold); legend.DockedToChartArea = chartArea.Name; legend.Enabled = true; legend.ShadowOffset = 3; chart.Legends.Add(legend); Series series = new Series(); series.BorderWidth = 3; series.ShadowOffset = 2; series.Legend = legend.Name; series.Label = "#PERCENT{P1}"; series.ChartType = seriesChartType; series["PieDrawingStyle"] = "SoftEdge"; series.ChartArea = chartArea.Name; for (int k = 0; k < listX.Count; k++) { DataPoint point = new DataPoint(); point.LegendText = listX[k]; point.YValues[0] = listY[k]; series.Points.Add(point); } chart.Series.Add(series); } return chart; }
/// <summary> /// 返回考试分析样条线图形 /// </summary> /// <param name="examReportModels">考试报表Models</param> /// <returns></returns> public Chart Get考试分析样条线图形(ExamReportModels examReportModels) { return Get考试分析常用图形(examReportModels, SeriesChartType.Spline); }
/// <summary> /// 返回考试分析柱形图 /// </summary> /// <param name="examReportModels">考试报表Model</param> /// <returns></returns> public Chart Get考试分析柱形图形(ExamReportModels examReportModels) { return Get考试分析常用图形(examReportModels, SeriesChartType.Column); }
/// <summary> /// 返回考试分析常用图形 /// </summary> /// <param name="examReportModels">考试报表Models</param> /// <param name="seriesChartType">图形类型</param> /// <returns></returns> public Chart Get考试分析常用图形(ExamReportModels examReportModels, SeriesChartType seriesChartType) { /* 考试分析Chart */ Chart chart = Get考试分析Chart(examReportModels); /* list考试分析 */ List<考试分析> list考试分析 = examReportModels.考试分析; List<string> listX = list考试分析[0].间隔值列表; ChartArea chartArea = Get考试分析ChartArea(); chartArea.AxisY.Title = "人数"; chartArea.AxisY.TextOrientation = TextOrientation.Stacked; chartArea.AxisY.LineColor = Color.FromArgb(64, 64, 64, 64); chartArea.AxisY.LabelStyle.Font = new Font("Trebuchet MS", 8, FontStyle.Bold); chartArea.AxisY.MajorGrid.LineColor = Color.FromArgb(64, 64, 64, 64); chartArea.AxisX.Title = "分数段"; chartArea.AxisX.LineColor = Color.FromArgb(64, 64, 64, 64); chartArea.AxisX.LabelStyle.Font = new Font("Trebuchet MS", 8, FontStyle.Bold); chartArea.AxisX.MajorGrid.LineColor = Color.FromArgb(64, 64, 64, 64); chart.ChartAreas.Add(chartArea); //加旁边显示 Legend legend = new Legend(); legend.ShadowOffset = 3; legend.BackColor = Color.Transparent; legend.Font = new Font("Trebuchet MS", 8, FontStyle.Bold); chart.Legends.Add(legend); for (int i = 0; i < list考试分析.Count; i++) { Series series = new Series(); series["PointWidth"] = "0.6"; series["BarLabelStyle"] = "Center"; series["DrawingStyle"] = "Cylinder"; series.BorderWidth = 3; series.ShadowOffset = 2; series.Name = list考试分析[i].部门名; series.ChartType = seriesChartType; series.IsValueShownAsLabel = true; series.Points.DataBindXY(listX, list考试分析[i].人数列表); chart.Series.Add(series); } return chart; }
/// <summary> /// 返回考试分析圆环图形 /// </summary> /// <param name="examReportModels">考试报表Models</param> /// <returns></returns> public Chart Get考试分析圆环图形(ExamReportModels examReportModels) { return Get考试分析特殊图形(examReportModels, SeriesChartType.Doughnut); }
/// <summary> /// 返回考试分析图形 /// </summary> /// <returns></returns> public Chart Get考试分析图形(ExamReportModels examReportModels) { /* 考试报表选项 */ ExamReportOptions examReportOptions = examReportModels.ExamReportOptions; /* 图形类型 */ int chartType = examReportOptions.ChartType; /* list考试分析 */ List<考试分析> list考试分析 = examReportModels.考试分析; Chart chart = null; #region 图形类型 switch (chartType) { /* 样条线图形 */ case 1: chart = Get考试分析样条线图形(examReportModels); break; /* 折线图形 */ case 2: chart = Get考试分析折线图形(examReportModels); break; /* 圆环图形 */ case 3: chart = Get考试分析圆环图形(examReportModels); break; /* 饼状图形 */ case 4: chart = Get考试分析饼状图形(examReportModels); break; /* 默认图形-柱形图形 */ default: chart = Get考试分析柱形图形(examReportModels); break; } #endregion return chart; }
/// <summary> /// ExamReport图形WORD版 /// </summary> /// <param name="examReportModels">考试报表Models</param> /// <returns></returns> public static string ExamReport图形WORD版(ExamReportModels examReportModels) { examReportModels.ISWord版 = true; return ExamReport图形(examReportModels); }
/// <summary> /// ExamReport图形HTML版 /// </summary> /// <param name="htmlHelper">HtmlHelper</param> /// <param name="examReportModels">考试报表Models</param> /// <returns></returns> public static MvcHtmlString ExamReport图形HTML版(this HtmlHelper htmlHelper, ExamReportModels examReportModels) { string sContent = ExamReport图形HTML版(examReportModels); return MvcHtmlString.Create(sContent); }
/// <summary> /// ExamReport图形HTML版 /// </summary> /// <param name="examReportModels">考试报表Models</param> /// <returns></returns> public static string ExamReport图形HTML版(ExamReportModels examReportModels) { examReportModels.ISWord版 = false; return ExamReport图形(examReportModels); }
/// <summary> /// 导出考试报表到Word,将ExamReportModels的考试报表导出到Word文件 /// </summary> /// <param name="examReportModels">考试报表Models</param> /// <param name="sFileName">文件名称,考试名称</param> public void 导出考试报表到Word(ExamReportModels examReportModels, string sFileName) { LKExamChart lKChart = new LKExamChart(); lKChart.Save考试分析Chart(examReportModels); HttpRequest httpRequest = HttpContext.Current.Request; string s内容 = ""; s内容 += "<link href=\"" + httpRequest.Url.Scheme + "://" + httpRequest.Url.Authority + "/Content/StyleSheet/Global.css\" rel=\"stylesheet\" type=\"text/css\" />"; s内容 += @"<style> table{width:600px;} tr{height:25px;} td{text-align: center;border: #abc0db 1px solid;} h1{font-size:20px;} h3{font-size:14px;} h1,div.detailsInfo{text-align: center;} div.manage{margin-top:30px;} </style>"; s内容 += AnalysisExtensions.ExamReport标题(examReportModels.考试设置); s内容 += AnalysisExtensions.ExamReport图形WORD版(examReportModels); s内容 += AnalysisExtensions.ExamReport表格(examReportModels.考试分析); s内容 += AnalysisExtensions.ExamReport情况(examReportModels.DataTable); s内容 += AnalysisExtensions.ExamReport管理(examReportModels.考试分析); //导出Word 导出BODY到WORD(s内容, sFileName); }