/*------------------------------------------------------------------------------------------- * 选项分组对比 * 创建:杨斌 2011-12-01 * 修改:杨斌 2012-03-22 * ----------------------------------------------------------------------------------------*/ 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 GeneralLib; namespace SunVoteARSPPT { public partial class FrmAnalyzeSlideGroup : Form { /// /// 图表类 /// public ManageChart Chart = null; /// /// 是否反转交叉图表的对比选项 /// private bool IsInvertCross = true; public FrmAnalyzeSlideGroup() { InitializeComponent(); } //关闭窗体 private void btnClose_Click(object sender, EventArgs e) { this.Close(); } /// /// 是否正在加载窗体 /// private bool IsLoading = false; /// /// 后台打开。杨斌 2017-02-27 /// private bool IsShowBack = false; private ChartTypes ShowBackChartType; private bool ShowBackIs3D; //加载窗体 private void FrmAnalyzeSlideGroup_Load(object sender, EventArgs e) { //2013-2-19 日本定制 增加词条 赵丽 if (GlobalInfo.OEMLogo == OEMLogos.oem3eAnalyzer) { lblSource.Visible = true; lblTarget.Visible = true; lblGroup.Visible = false; lvwSlide.Top = lblSource.Bottom - 5; lvwSlide.Height = lblTarget.Top - lvwSlide.Top; } else { lblSource.Visible = false; lblTarget.Visible = false; lblGroup.Visible = true; lvwSlide.Top = pnlChart.Top; lvwSlide.Height = lblGroup.Top - lvwSlide.Top; } IsLoading = true; ResponseDB.UpdateSlideIndexToDB(); Chart = new ManageChart(); Chart.MsChart = this.MSChart; MSChart.Dock = DockStyle.Fill; GlobalInfo.SysLanguage.SetLanguage(this.Name, this); LoadSlide(); LoadGroup(); if (!IsShowBack) ShowChartGroupComp(); IsLoading = false; //杨斌 2014-07-25 List lstRadio = new List(); lstRadio.Add(GlobalInfo.IniCtlSystem.ReadString(this.Name, "ChartDataLabel", "")); lstRadio.Add(GlobalInfo.IniCtlSystem.ReadString(this.Name, "ChartType", "")); ControlOper.SetControlCheck(this, lstRadio); } public void ShowBack() { IsShowBack = true; //this.Hide(); //this.FrmAnalyzeSlideGroup_Load(null, null); this.Show();//调试 } public void CreateChartPic(int sldSelIndex, int grpSelIndex, int chartLabel, ChartTypes showBackChartType, bool showBackIs3D, bool isInvert, string path, string filePic, int W, int H) { lvwSlide.Items[sldSelIndex].Selected = true; lvwGroup.Items[grpSelIndex].Selected = true; IsInvertCross = !isInvert; ShowBackChartType = showBackChartType; ShowBackIs3D = showBackIs3D; List lstRadio = new List(); lstRadio.Add("rbtChartDataLabel" + chartLabel); ControlOper.SetControlCheck(this, lstRadio); ShowChartGroupComp(); if (!System.IO.Directory.Exists(path)) { // 目录不存在,建立目录 System.IO.Directory.CreateDirectory(path); } MSChart.Size = new System.Drawing.Size(W, H); MSChart.SaveImage(path + filePic, System.Windows.Forms.DataVisualization.Charting.ChartImageFormat.Png); } /// /// 查询的反馈题目类型 /// //private string cResponseType = "'Choice','Judge','Vote','Grade','Order'";//'Group','SignIn', private string cResponseType = "'Choice','Judge','Vote','Grade'";//'Group','SignIn', /// /// 加载反馈幻灯片信息 /// private void LoadSlide() { try { lvwSlide.Items.Clear(); if (((GlobalInfo.OEMLogo == OEMLogos.oemPowerVote) || (GlobalInfo.OEMLogo == OEMLogos.oemAngage)) && (GlobalInfo.OEMLogo2 == OEMLogos2.SunVote))//杨斌 2018-03-22 { cResponseType = "'Choice','Judge','Vote','Grade','Order'"; } //加载数据 string sql = "Select * From ST_Topic" + " WHERE (((ST_Topic.TT_ID) IN (" + cResponseType + ")) And (len(T_ID)<12))" + " Order By T_Index Asc"; GlobalInfo.DBOperation.OpenDataSet(sql); DataTable tb = GlobalInfo.DBOperation.DataSet.Tables[0]; for (int iRow = 0; iRow < tb.Rows.Count; iRow++) { DataRow row = tb.Rows[iRow]; ListViewItem item = lvwSlide.Items.Add(row["T_Index"].ToString()); item.SubItems.Add(row["T_Title"].ToString()); item.SubItems[0].Tag = row["TT_ID"].ToString();//杨斌 2016-05-10 item.Tag = "'" + row["T_ID"].ToString() + "'";//存放题目ID } GlobalInfo.DBOperation.CloseDataSet(); //默认选中题目 if (lvwSlide.Items.Count > 0) lvwSlide.Items[0].Selected = true; } catch (Exception ex) { SystemLog.WriterLog(ex); } } //public static Dictionary GetDicSlide() //{ // Dictionary res = new Dictionary(); // try // { // string sResponseType = "'Choice','Judge','Vote','Grade'"; // //加载数据 // string sql = "Select * From ST_Topic" + // " WHERE (((ST_Topic.TT_ID) IN(" + sResponseType + ")) And (len(T_ID)<12))" + // " Order By T_Index Asc"; // GlobalInfo.DBOperation.OpenDataSet(sql); // DataTable tb = GlobalInfo.DBOperation.DataSet.Tables[0]; // for (int iRow = 0; iRow < tb.Rows.Count; iRow++) // { // DataRow row = tb.Rows[iRow]; // string tid = row["TT_ID"] + ""; // string title = row["T_Index"] + "." + row["T_Title"]; // ListViewItem item = lvwSlide.Items.Add(row["T_Index"].ToString()); // item.SubItems.Add(row["T_Title"].ToString()); // item.SubItems[0].Tag = row["TT_ID"].ToString();//杨斌 2016-05-10 // item.Tag = "'" + row["T_ID"].ToString() + "'";//存放题目ID // } // GlobalInfo.DBOperation.CloseDataSet(); // } // catch (Exception ex) // { // SystemLog.WriterLog(ex); // } // return res; //} /// /// 加载分组内容 /// private void LoadGroup() { try { lvwGroup.Items.Clear(); //名单分组 string sql = ""; DataTable tb = null; if (GlobalInfo.response.EnableList) { sql = "SELECT ST_RosterColumn.RC_Index, ST_RosterColumn.RC_Name, ST_RosterColumn.RC_ID" + " FROM ST_RosterColumn" + " WHERE (((ST_RosterColumn.RC_Index)>1))" + " ORDER BY ST_RosterColumn.RC_Index ASC"; GlobalInfo.DBOperation.OpenDataSet(sql); tb = GlobalInfo.DBOperation.DataSet.Tables[0]; for (int iRow = 0; iRow < tb.Rows.Count; iRow++) { DataRow row = tb.Rows[iRow]; string cid = row["RC_ID"].ToString(); string name = row["RC_Name"].ToString(); ListViewItem item = lvwGroup.Items.Add((lvwGroup.Items.Count + 1).ToString()); item.SubItems.Add(name); item.Tag = cid;//名单分组,数字类型,不带"'" } GlobalInfo.DBOperation.CloseDataSet(); } //反馈分组 sql = "SELECT ST_Topic.T_ID, ST_Topic.T_Index, ST_Topic.T_Name, ST_Topic.TT_ID" + " FROM ST_Topic" + " WHERE (((ST_Topic.TT_ID)='Group') And (len(T_ID)<12))" + " ORDER BY ST_Topic.T_Index ASC"; //sql = "SELECT ST_Topic.T_ID, ST_Topic.T_Index, ST_Topic.T_Name, ST_Topic.TT_ID" + // " FROM ST_Topic" + // " WHERE (((ST_Topic.TT_ID) IN (" + cResponseType + ")) And (len(T_ID)<12))" + // " ORDER BY ST_Topic.T_Index ASC"; GlobalInfo.DBOperation.OpenDataSet(sql); tb = GlobalInfo.DBOperation.DataSet.Tables[0]; for (int iRow = 0; iRow < tb.Rows.Count; iRow++) { DataRow row = tb.Rows[iRow]; string name = row["T_Name"].ToString(); ListViewItem item = lvwGroup.Items.Add((lvwGroup.Items.Count + 1).ToString()); item.SubItems.Add(name); item.Tag = "'" + row["T_ID"].ToString() + "'";//反馈分组,字符串类型,带"'" } GlobalInfo.DBOperation.CloseDataSet(); //默认选中分组 if (lvwGroup.Items.Count > 0) lvwGroup.Items[0].Selected = true; } catch (Exception ex) { SystemLog.WriterLog(ex); } } /// /// 刷新图表数据 /// /// 图例文本 /// 选项系列文本 /// 数据 private void ShowChartData(string[] aryLegentText, string[] aryOptionText, List lstData, string slideType = "", Dictionary optionTextFull = null) { //杨斌 2014-06-04 int max = 20; if (aryLegentText.Length > max) { string[] aryLegentNew = new string[max]; Array.Copy(aryLegentText, aryLegentNew, max); aryLegentText = aryLegentNew; } if (lstData.Count > max) { lstData.RemoveRange(max, lstData.Count - max); } //图例文本 Chart.LegentText = aryLegentText; Chart.XValue = aryOptionText; //数据值 Chart.YValues = lstData; //图表类型 if (IsShowBack) { Chart.ChartType = ShowBackChartType; Chart.Is3D = ShowBackIs3D; } else { RadioButton rbtChartType = ControlOper.GetChecked(rbtChartType2); Chart.ChartType = EnumName.GetEnum(rbtChartType.Tag.ToString()); Chart.Is3D = (rbtChartType.Name.IndexOf("3D") > 0); } //图表数据标签样式 RadioButton rbtChartDataLabel = ControlOper.GetChecked(rbtChartDataLabel1); Chart.LabelType = EnumName.GetEnum(rbtChartDataLabel.Tag.ToString()); //图表图例显示 Chart.LegendEnable = true; Chart.LegentDocking = LegentDockings.ldRight; //图表高度 Chart.Width = MSChart.Width; Chart.Height = MSChart.Height; //图表标题显示题目标题。杨斌 2015-06-12 if (lvwSlide.SelectedItems.Count > 0) { System.Windows.Forms.DataVisualization.Charting.Chart mChart = Chart.MsChart; mChart.Titles.Clear(); mChart.Titles.Add(lvwSlide.SelectedItems[0].SubItems[1].Text); mChart.Titles[0].Alignment = ContentAlignment.TopCenter; mChart.Titles[0].Font = Chart.ItemLabelFont; } //杨斌 2016-05-10 if (slideType == "Order") { Chart.UseStacked = false;//杨斌 2016-05-17 Chart.UpdateChart2(optionTextFull);//刷新图表 btnInvert.Visible = false; } else { Chart.UseStacked = true;//杨斌 2016-05-17 Chart.UpdateChart();//刷新图表 btnInvert.Visible = true; } groupBox1.Enabled = btnInvert.Visible; } private void ShowChartGroupComp() { try { ListViewItem selTopic = null; if (lvwSlide.SelectedItems.Count > 0) selTopic = lvwSlide.SelectedItems[0]; if (selTopic == null) return; //杨斌 2016-05-10 string slideType = ""; if (selTopic.SubItems[0].Tag != null) slideType = selTopic.SubItems[0].Tag.ToString(); ListViewItem selGroup = null; if (lvwGroup.SelectedItems.Count > 0) selGroup = lvwGroup.SelectedItems[0]; if (selGroup == null) return; int topicCount = 2; string[] aryTopicID = new string[topicCount]; aryTopicID[0] = selTopic.Tag.ToString(); aryTopicID[1] = selGroup.Tag.ToString(); //string[] aryTopicText = new string[topicCount]; //aryTopicText[0] = selTopic.SubItems[1].Text; //aryTopicText[1] = selGroup.SubItems[1].Text; MSChart.Visible = false; ShowChartGroupComp(slideType, aryTopicID); MSChart.Visible = true; } catch (Exception ex) { SystemLog.WriterLog(ex); } } /// /// 刷新选项分组对比图表 /// private void ShowChartGroupComp(string slideType, string[] aryTopicID) { try { //ListViewItem selTopic = null; //if (lvwSlide.SelectedItems.Count > 0) // selTopic = lvwSlide.SelectedItems[0]; //if (selTopic == null) return; ////杨斌 2016-05-10 //string slideType = ""; //if (selTopic.SubItems[0].Tag != null) // slideType = selTopic.SubItems[0].Tag.ToString(); //ListViewItem selGroup = null; //if (lvwGroup.SelectedItems.Count > 0) // selGroup = lvwGroup.SelectedItems[0]; //if (selGroup == null) return; //int topicCount = 2; //string[] aryTopicID = new string[topicCount]; //aryTopicID[0] = selTopic.Tag.ToString(); //aryTopicID[1] = selGroup.Tag.ToString(); ////string[] aryTopicText = new string[topicCount]; ////aryTopicText[0] = selTopic.SubItems[1].Text; ////aryTopicText[1] = selGroup.SubItems[1].Text; string idQ1 = aryTopicID[0]; string idQ2 = aryTopicID[1]; //二维图表选项文本 TDictionary dicOptionText = new TDictionary();//Key=题目ID,Item=选项文本[] TDictionary dicOptionCount = new TDictionary(); //二维图表各个分量数据 TDictionary dicResultQ1 = new TDictionary(); TDictionary dicResultQ2 = new TDictionary(); //人员ID列表 List lstVId = new List(); string VoteRateCol = "";//杨斌 2018-12-25 //杨斌 2016-05-17 System.Collections.Generic.Dictionary dicQuesItem = new Dictionary(); string sql = ""; DataTable tb = null; if (aryTopicID[1].Contains("'")) { string topicID = string.Join(",", aryTopicID); //获取选项个数,最大选项个数 int maxOptionCount = 0; sql = "SELECT ST_TopicPar.T_ID, ST_TopicPar.TP_Value" + " FROM ST_TopicPar" + " WHERE (((ST_TopicPar.T_ID) In (" + topicID + ")) AND ((ST_TopicPar.TP_Name)='OptionCount'))"; GlobalInfo.DBOperation.OpenDataSet(sql); tb = GlobalInfo.DBOperation.DataSet.Tables[0]; for (int iRow = 0; iRow < tb.Rows.Count; iRow++) { DataRow row = tb.Rows[iRow]; string id = "'" + row["T_ID"].ToString() + "'"; int count = ConvertOper.Convert(row["TP_Value"].ToString()).ToInt; if ((count > 0) && (!dicOptionCount.Contains(id))) { dicOptionCount.Add(id, count); if (count > maxOptionCount) maxOptionCount = count; } } GlobalInfo.DBOperation.CloseDataSet(); if (dicOptionCount.Count < 2) return; //获取选项文本 string[] aryWherePar = new string[maxOptionCount]; for (int i = 0; i < maxOptionCount; i++) { aryWherePar[i] = "'OptionText_" + (i + 1).ToString() + "'"; } string wherePar = string.Join(",", aryWherePar); wherePar += ",'VoteRateCol'";//杨斌 2018-12-25 sql = "SELECT DISTINCT ST_TopicPar.T_ID, ST_TopicPar.TP_Name, ST_TopicPar.TP_Value" + " FROM ST_TopicPar" + " WHERE (((ST_TopicPar.TP_Name) In (" + wherePar + ")) AND ((ST_TopicPar.T_ID) In (" + topicID + ")))" + " ORDER BY ST_TopicPar.T_ID, ST_TopicPar.TP_Name"; sql = "SELECT DISTINCT ST_TopicPar.T_ID, ST_TopicPar.TP_Name, ST_TopicPar.TP_Value, ST_Topic.TT_ID" + " FROM ST_Topic INNER JOIN ST_TopicPar ON ST_Topic.T_ID = ST_TopicPar.T_ID" + " WHERE (((ST_TopicPar.TP_Name) In (" + wherePar + ")) AND ((ST_TopicPar.T_ID) In (" + topicID + ")))" + " ORDER BY ST_TopicPar.T_ID, ST_TopicPar.TP_Name;"; GlobalInfo.DBOperation.OpenDataSet(sql); tb = GlobalInfo.DBOperation.DataSet.Tables[0]; for (int iRow = 0; iRow < tb.Rows.Count; iRow++) { DataRow row = tb.Rows[iRow]; string id = "'" + row["T_ID"].ToString() + "'"; string tName = row["TP_Name"].ToString(); string tValue = row["TP_Value"].ToString(); string rType = row["TT_ID"].ToString(); int optionCount = dicOptionCount[id]; //int index = ConvertOper.Convert(tName.Replace("OptionText_", "")).ToInt - 1; //杨斌 2018-12-25 int index = -1; if ((tName == "VoteRateCol") && (!string.IsNullOrEmpty(tValue))) { VoteRateCol = tValue; } else { index = ConvertOper.Convert(tName.Replace("OptionText_", "")).ToInt - 1; } if (dicOptionText.Contains(id)) { if ((index >= 0) && (index < optionCount))//杨斌 2012-06-29 { if (rType == "Order")//杨斌 2016-05-17 { dicOptionText[id][index] = (index + 1).ToString(); string itmNo = (index + 1).ToString(); if (!dicQuesItem.ContainsKey(itmNo)) dicQuesItem.Add(itmNo, tValue); } else { if (slideType == "Order")//杨斌 2016-05-17 dicOptionText[id][index] = tValue; else //dicOptionText[id][index] = (index + 1).ToString() + "." + tValue; dicOptionText[id][index] = PPTOper.FormatNumABC(index + 1, true) + "." + tValue; } } } else { string[] options = new string[optionCount]; for (int i = 0; i < optionCount; i++) options[i] = ""; if ((index >= 0) && (index < optionCount))//杨斌 2012-06-29 { if (rType == "Order")//杨斌 2016-05-17 { options[index] = (index + 1).ToString(); string itmNo = (index + 1).ToString(); if (!dicQuesItem.ContainsKey(itmNo)) dicQuesItem.Add(itmNo, tValue); } else { if (slideType == "Order")//杨斌 2016-05-17 options[index] = tValue; else //options[index] = (index + 1).ToString() + "." + tValue; options[index] = PPTOper.FormatNumABC(index + 1, true) + "." + tValue; } } dicOptionText.Add(id, options); } } GlobalInfo.DBOperation.CloseDataSet(); //加载数据 sql = "SELECT ST_Response.V_ID, ST_Response.T_ID, ST_Response.R_Result" + " FROM ST_Response" + " WHERE (((ST_Response.T_ID) In (" + topicID + ")))"; GlobalInfo.DBOperation.OpenDataSet(sql); tb = GlobalInfo.DBOperation.DataSet.Tables[0]; for (int iRow = 0; iRow < tb.Rows.Count; iRow++) { DataRow row = tb.Rows[iRow]; string id = row["V_ID"].ToString(); string tid = "'" + row["T_ID"].ToString() + "'"; string result = row["R_Result"].ToString() + ","; if (tid == idQ1) { if (!dicResultQ1.Contains(id)) dicResultQ1.Add(id, result); } if (tid == idQ2) { if (!dicResultQ2.Contains(id)) dicResultQ2.Add(id, result); } if (!lstVId.Contains(id)) lstVId.Add(id); } GlobalInfo.DBOperation.CloseDataSet(); } else { //获取反馈选项个数,选项文本 int optionCountQ1 = 0; TDictionary dicOptionTextTemp = new TDictionary(); sql = "SELECT ST_TopicPar.T_ID, ST_TopicPar.TP_Name, ST_TopicPar.TP_Value" + " FROM ST_TopicPar" + " WHERE ((ST_TopicPar.T_ID) In (" + idQ1 + "))" + " Order By ST_TopicPar.TP_Name Asc"; GlobalInfo.DBOperation.OpenDataSet(sql); tb = GlobalInfo.DBOperation.DataSet.Tables[0]; for (int iRow = 0; iRow < tb.Rows.Count; iRow++) { DataRow row = tb.Rows[iRow]; string id = "'" + row["T_ID"].ToString() + "'"; string name = row["TP_Name"].ToString(); string value = row["TP_Value"].ToString(); if (name == "OptionCount") { optionCountQ1 = ConvertOper.Convert(value).ToInt; if (!dicOptionText.Contains(id)) dicOptionText.Add(id, new string[optionCountQ1]); if ((optionCountQ1 > 0) && (!dicOptionCount.Contains(id))) { dicOptionCount.Add(id, optionCountQ1); } } if (name.IndexOf("OptionText_") == 0) { string sNo = name.Replace("OptionText_", ""); if (!dicOptionTextTemp.Contains(sNo)) dicOptionTextTemp.Add(sNo, value); } if (name == "VoteRateCol")//杨斌 2018-12-25 { VoteRateCol = value; } } for (int i = 0; i < optionCountQ1; i++) { dicOptionText[idQ1][i] = ""; string sNo = (i + 1).ToString(); if (dicOptionTextTemp.Contains(sNo))//杨斌 2012-06-29 { if (slideType == "Order")//杨斌 2016-05-17 { dicOptionText[idQ1][i] = (i + 1).ToString(); if (!dicQuesItem.ContainsKey(sNo)) dicQuesItem.Add(sNo, dicOptionTextTemp[sNo]); } else { //dicOptionText[idQ1][i] = dicOptionTextTemp[sNo]; dicOptionText[idQ1][i] = PPTOper.FormatNumABC(i + 1, true) + "." + dicOptionTextTemp[sNo]; } } } GlobalInfo.DBOperation.CloseDataSet(); //获取分组个数 sql = "SELECT DISTINCT ST_RosterValue.RV_Text" + " FROM ST_RosterColumn INNER JOIN ST_RosterValue ON ST_RosterColumn.RC_ID = ST_RosterValue.RC_ID" + " WHERE (((ST_RosterColumn.RC_ID)=" + idQ2 + "))" + " ORDER BY ST_RosterValue.RV_Text Asc"; GlobalInfo.DBOperation.OpenDataSet(sql); tb = GlobalInfo.DBOperation.DataSet.Tables[0]; int optionCountQ2 = tb.Rows.Count; if (optionCountQ2 > 0) { dicOptionCount.Add(idQ2, optionCountQ2); dicOptionText.Add(idQ2, new string[optionCountQ2]); for (int iRow = 0; iRow < optionCountQ2; iRow++) { DataRow row = tb.Rows[iRow]; string groupText = row["RV_Text"].ToString(); dicOptionText[idQ2][iRow] = groupText; } GlobalInfo.DBOperation.CloseDataSet(); } //加载反馈数据数据 sql = "SELECT ST_Response.V_ID, ST_Response.T_ID, ST_Response.R_Result" + " FROM ST_Response" + " WHERE (((ST_Response.T_ID) In (" + idQ1 + ")))"; GlobalInfo.DBOperation.OpenDataSet(sql); tb = GlobalInfo.DBOperation.DataSet.Tables[0]; for (int iRow = 0; iRow < tb.Rows.Count; iRow++) { DataRow row = tb.Rows[iRow]; string id = row["V_ID"].ToString(); string result = row["R_Result"].ToString() + ","; if (!dicResultQ1.Contains(id)) dicResultQ1.Add(id, result); if (!lstVId.Contains(id)) lstVId.Add(id); } GlobalInfo.DBOperation.CloseDataSet(); //加载人员对应的名单分组编号 List lstOptionText = dicOptionText[idQ2].ToList(); sql = "SELECT ST_Voter.V_ID, ST_RosterValue.RV_Text" + " FROM ST_Voter INNER JOIN ST_RosterValue ON ST_Voter.RR_ID = ST_RosterValue.RR_ID" + " WHERE (((ST_RosterValue.RC_ID)=" + idQ2 + "))"; GlobalInfo.DBOperation.OpenDataSet(sql); tb = GlobalInfo.DBOperation.DataSet.Tables[0]; for (int iRow = 0; iRow < tb.Rows.Count; iRow++) { DataRow row = tb.Rows[iRow]; string id = row["V_ID"].ToString(); string groupText = row["RV_Text"].ToString(); int groupNo = lstOptionText.IndexOf(groupText); if (groupNo >= 0) groupNo++; if (!dicResultQ2.Contains(id)) dicResultQ2.Add(id, groupNo.ToString() + ","); if (!lstVId.Contains(id)) lstVId.Add(id); } GlobalInfo.DBOperation.CloseDataSet(); } int countOptionQ1 = dicOptionCount[idQ1]; int countOptionQ2 = dicOptionCount[idQ2]; //杨斌 2018-12-25 int nVoteRateCol = -1; if (!string.IsNullOrEmpty(VoteRateCol)) { for (int i = 1; i < RosterList.RosterLoad.Columns.Count; i++) { if (RosterList.RosterLoad.Columns[i].ColumnName == VoteRateCol) { nVoteRateCol = i; break; } } } List lstData = new List(); for (int i = 0; i < countOptionQ1; i++) { double[] aryData = new double[countOptionQ2]; lstData.Add(aryData); } for (int i = 0; i < lstVId.Count; i++) { string id = lstVId[i]; if ((dicResultQ1.Contains(id)) && (dicResultQ2.Contains(id))) { //杨斌 2020-03-05 string resultQ1 = dicResultQ1[id]; string resultQ2 = dicResultQ2[id]; int n1 = ConvertOper.Convert(resultQ1.Split(',')[0]).ToInt - 1; int n2 = ConvertOper.Convert(resultQ2.Split(',')[0]).ToInt - 1; double rate1 = 1; if (nVoteRateCol > 0) { var row1 = RosterList.RosterLoad.GetRowByVoterID(id); if (row1 != null) rate1 = ConvertOper.Convert(row1.Cells[nVoteRateCol]).ToInt; } lstData[n1][n2] += rate1;//ToDo:需要计算权重。2018-12-10 /* for (int n1 = 0; n1 < countOptionQ1; n1++) { for (int n2 = 0; n2 < countOptionQ2; n2++) { string resultQ1 = dicResultQ1[id]; string resultQ2 = dicResultQ2[id]; string noQ1 = (n1 + 1).ToString() + ","; string noQ2 = (n2 + 1).ToString() + ","; if (resultQ1.Contains(noQ1) && resultQ2.Contains(noQ2)) { //lstData[n1][n2]++;//ToDo:需要计算权重。2018-12-10 double rate1 = 1; if (nVoteRateCol > 0) { var row1 = RosterList.RosterLoad.GetRowByVoterID(id); if (row1 != null) rate1 = ConvertOper.Convert(row1.Cells[nVoteRateCol]).ToInt; } lstData[n1][n2] += rate1;//ToDo:需要计算权重。2018-12-10 } } }*/ } } //刷新图表 string[] aryOptionQ1 = dicOptionText[idQ1]; string[] aryOptionQ2 = dicOptionText[idQ2]; if (IsInvertCross) { List lstDataInvert = new List(); for (int i = 0; i < countOptionQ2; i++) { double[] aryData = new double[countOptionQ1]; for (int j = 0; j < countOptionQ1; j++) { aryData[j] = lstData[j][i]; } lstDataInvert.Add(aryData); } ShowChartData(aryOptionQ2, aryOptionQ1, lstDataInvert, slideType, dicQuesItem);//杨斌 2016-05-10 } else { ShowChartData(aryOptionQ1, aryOptionQ2, lstData, slideType, dicQuesItem);//杨斌 2016-05-10 } } catch (Exception ex) { SystemLog.WriterLog(ex); } } /// /// 刷新选项分组对比图表 /// 杨斌 2017-03-20 /// public static void GetChartGroupCompData(string[] aryTopicID, bool IsInvertCross, out string[] aryOption1, out string[] aryOption2, out List lstShowData) { aryOption1 = null; aryOption2 = null; lstShowData = null; string VoteRateCol = ""; try { string idQ1 = aryTopicID[0]; string idQ2 = aryTopicID[1]; //二维图表选项文本 TDictionary dicOptionText = new TDictionary();//Key=题目ID,Item=选项文本[] TDictionary dicOptionCount = new TDictionary(); //二维图表各个分量数据 TDictionary dicResultQ1 = new TDictionary(); TDictionary dicResultQ2 = new TDictionary(); //人员ID列表 List lstVId = new List(); //杨斌 2016-05-17 System.Collections.Generic.Dictionary dicQuesItem = new Dictionary(); string sql = ""; DataTable tb = null; if (aryTopicID[1].Contains("'")) { string topicID = string.Join(",", aryTopicID); //获取选项个数,最大选项个数 int maxOptionCount = 0; sql = "SELECT ST_TopicPar.T_ID, ST_TopicPar.TP_Value" + " FROM ST_TopicPar" + " WHERE (((ST_TopicPar.T_ID) In (" + topicID + ")) AND ((ST_TopicPar.TP_Name)='OptionCount'))"; GlobalInfo.DBOperation.OpenDataSet(sql); tb = GlobalInfo.DBOperation.DataSet.Tables[0]; for (int iRow = 0; iRow < tb.Rows.Count; iRow++) { DataRow row = tb.Rows[iRow]; string id = "'" + row["T_ID"].ToString() + "'"; int count = ConvertOper.Convert(row["TP_Value"].ToString()).ToInt; if ((count > 0) && (!dicOptionCount.Contains(id))) { dicOptionCount.Add(id, count); if (count > maxOptionCount) maxOptionCount = count; } } GlobalInfo.DBOperation.CloseDataSet(); if (dicOptionCount.Count < 2) return; //获取选项文本 string[] aryWherePar = new string[maxOptionCount]; for (int i = 0; i < maxOptionCount; i++) { aryWherePar[i] = "'OptionText_" + (i + 1).ToString() + "'"; } string wherePar = string.Join(",", aryWherePar); wherePar += ",'VoteRateCol'";//杨斌 2018-12-25 sql = "SELECT DISTINCT ST_TopicPar.T_ID, ST_TopicPar.TP_Name, ST_TopicPar.TP_Value" + " FROM ST_TopicPar" + " WHERE (((ST_TopicPar.TP_Name) In (" + wherePar + ")) AND ((ST_TopicPar.T_ID) In (" + topicID + ")))" + " ORDER BY ST_TopicPar.T_ID, ST_TopicPar.TP_Name"; sql = "SELECT DISTINCT ST_TopicPar.T_ID, ST_TopicPar.TP_Name, ST_TopicPar.TP_Value, ST_Topic.TT_ID" + " FROM ST_Topic INNER JOIN ST_TopicPar ON ST_Topic.T_ID = ST_TopicPar.T_ID" + " WHERE (((ST_TopicPar.TP_Name) In (" + wherePar + ")) AND ((ST_TopicPar.T_ID) In (" + topicID + ")))" + " ORDER BY ST_TopicPar.T_ID, ST_TopicPar.TP_Name;"; GlobalInfo.DBOperation.OpenDataSet(sql); tb = GlobalInfo.DBOperation.DataSet.Tables[0]; for (int iRow = 0; iRow < tb.Rows.Count; iRow++) { DataRow row = tb.Rows[iRow]; string id = "'" + row["T_ID"].ToString() + "'"; string tName = row["TP_Name"].ToString(); string tValue = row["TP_Value"].ToString(); string rType = row["TT_ID"].ToString(); int optionCount = dicOptionCount[id]; //index = ConvertOper.Convert(tName.Replace("OptionText_", "")).ToInt - 1; //杨斌 2018-12-25 int index = -1; if ((tName == "VoteRateCol") && (!string.IsNullOrEmpty(tValue))) { VoteRateCol = tValue; } else { index = ConvertOper.Convert(tName.Replace("OptionText_", "")).ToInt - 1; } if (dicOptionText.Contains(id)) { if ((index >= 0) && (index < optionCount))//杨斌 2012-06-29 { if (rType == "Order")//杨斌 2016-05-17 { dicOptionText[id][index] = (index + 1).ToString(); string itmNo = (index + 1).ToString(); if (!dicQuesItem.ContainsKey(itmNo)) dicQuesItem.Add(itmNo, tValue); } else { //if (slideType == "Order")//杨斌 2016-05-17 // dicOptionText[id][index] = tValue; //else //dicOptionText[id][index] = (index + 1).ToString() + "." + tValue; dicOptionText[id][index] = PPTOper.FormatNumABC(index + 1, true) + "." + tValue; } } } else { string[] options = new string[optionCount]; for (int i = 0; i < optionCount; i++) options[i] = ""; if ((index >= 0) && (index < optionCount))//杨斌 2012-06-29 { if (rType == "Order")//杨斌 2016-05-17 { options[index] = (index + 1).ToString(); string itmNo = (index + 1).ToString(); if (!dicQuesItem.ContainsKey(itmNo)) dicQuesItem.Add(itmNo, tValue); } else { //if (slideType == "Order")//杨斌 2016-05-17 // options[index] = tValue; //else //options[index] = (index + 1).ToString() + "." + tValue; options[index] = PPTOper.FormatNumABC(index + 1, true) + "." + tValue; } } dicOptionText.Add(id, options); } } GlobalInfo.DBOperation.CloseDataSet(); //加载数据 sql = "SELECT ST_Response.V_ID, ST_Response.T_ID, ST_Response.R_Result" + " FROM ST_Response" + " WHERE (((ST_Response.T_ID) In (" + topicID + ")))"; GlobalInfo.DBOperation.OpenDataSet(sql); tb = GlobalInfo.DBOperation.DataSet.Tables[0]; for (int iRow = 0; iRow < tb.Rows.Count; iRow++) { DataRow row = tb.Rows[iRow]; string id = row["V_ID"].ToString(); string tid = "'" + row["T_ID"].ToString() + "'"; string result = row["R_Result"].ToString() + ","; if (tid == idQ1) { if (!dicResultQ1.Contains(id)) dicResultQ1.Add(id, result); } if (tid == idQ2) { if (!dicResultQ2.Contains(id)) dicResultQ2.Add(id, result); } if (!lstVId.Contains(id)) lstVId.Add(id); } GlobalInfo.DBOperation.CloseDataSet(); } else { //获取反馈选项个数,选项文本 int optionCountQ1 = 0; TDictionary dicOptionTextTemp = new TDictionary(); sql = "SELECT ST_TopicPar.T_ID, ST_TopicPar.TP_Name, ST_TopicPar.TP_Value" + " FROM ST_TopicPar" + " WHERE ((ST_TopicPar.T_ID) In (" + idQ1 + "))" + " Order By ST_TopicPar.TP_Name Asc"; GlobalInfo.DBOperation.OpenDataSet(sql); tb = GlobalInfo.DBOperation.DataSet.Tables[0]; for (int iRow = 0; iRow < tb.Rows.Count; iRow++) { DataRow row = tb.Rows[iRow]; string id = "'" + row["T_ID"].ToString() + "'"; string name = row["TP_Name"].ToString(); string value = row["TP_Value"].ToString(); if (name == "OptionCount") { optionCountQ1 = ConvertOper.Convert(value).ToInt; if (!dicOptionText.Contains(id)) dicOptionText.Add(id, new string[optionCountQ1]); if ((optionCountQ1 > 0) && (!dicOptionCount.Contains(id))) { dicOptionCount.Add(id, optionCountQ1); } } if (name.IndexOf("OptionText_") == 0) { string sNo = name.Replace("OptionText_", ""); if (!dicOptionTextTemp.Contains(sNo)) dicOptionTextTemp.Add(sNo, value); } if (name == "VoteRateCol")//杨斌 2018-12-25 { VoteRateCol = value; } } for (int i = 0; i < optionCountQ1; i++) { dicOptionText[idQ1][i] = ""; string sNo = (i + 1).ToString(); if (dicOptionTextTemp.Contains(sNo))//杨斌 2012-06-29 { //if (slideType == "Order")//杨斌 2016-05-17 //{ // dicOptionText[idQ1][i] = (i + 1).ToString(); // if (!dicQuesItem.ContainsKey(sNo)) // dicQuesItem.Add(sNo, dicOptionTextTemp[sNo]); //} //else //{ //dicOptionText[idQ1][i] = dicOptionTextTemp[sNo]; dicOptionText[idQ1][i] = PPTOper.FormatNumABC(i + 1, true) + "." + dicOptionTextTemp[sNo]; //} } } GlobalInfo.DBOperation.CloseDataSet(); //获取分组个数 sql = "SELECT DISTINCT ST_RosterValue.RV_Text" + " FROM ST_RosterColumn INNER JOIN ST_RosterValue ON ST_RosterColumn.RC_ID = ST_RosterValue.RC_ID" + " WHERE (((ST_RosterColumn.RC_ID)=" + idQ2 + "))" + " ORDER BY ST_RosterValue.RV_Text Asc"; GlobalInfo.DBOperation.OpenDataSet(sql); tb = GlobalInfo.DBOperation.DataSet.Tables[0]; int optionCountQ2 = tb.Rows.Count; if (optionCountQ2 > 0) { dicOptionCount.Add(idQ2, optionCountQ2); dicOptionText.Add(idQ2, new string[optionCountQ2]); for (int iRow = 0; iRow < optionCountQ2; iRow++) { DataRow row = tb.Rows[iRow]; string groupText = row["RV_Text"].ToString(); dicOptionText[idQ2][iRow] = groupText; } GlobalInfo.DBOperation.CloseDataSet(); } //加载反馈数据数据 sql = "SELECT ST_Response.V_ID, ST_Response.T_ID, ST_Response.R_Result" + " FROM ST_Response" + " WHERE (((ST_Response.T_ID) In (" + idQ1 + ")))"; GlobalInfo.DBOperation.OpenDataSet(sql); tb = GlobalInfo.DBOperation.DataSet.Tables[0]; for (int iRow = 0; iRow < tb.Rows.Count; iRow++) { DataRow row = tb.Rows[iRow]; string id = row["V_ID"].ToString(); string result = row["R_Result"].ToString() + ","; if (!dicResultQ1.Contains(id)) dicResultQ1.Add(id, result); if (!lstVId.Contains(id)) lstVId.Add(id); } GlobalInfo.DBOperation.CloseDataSet(); if (dicOptionText.Count < 1)//杨斌 2017-09-22 return; //加载人员对应的名单分组编号 if (idQ2 == null) { string s = "2018-12-25"; } List lstOptionText = dicOptionText[idQ2].ToList(); sql = "SELECT ST_Voter.V_ID, ST_RosterValue.RV_Text" + " FROM ST_Voter INNER JOIN ST_RosterValue ON ST_Voter.RR_ID = ST_RosterValue.RR_ID" + " WHERE (((ST_RosterValue.RC_ID)=" + idQ2 + "))"; //sql = "SELECT ST_Voter.V_ID, ST_RosterValue.RV_Text, ST_Response.T_ID" + // " FROM(ST_Voter INNER JOIN ST_RosterValue ON ST_Voter.RR_ID = ST_RosterValue.RR_ID) INNER JOIN ST_Response ON ST_Voter.V_ID = ST_Response.V_ID" + // " WHERE(((ST_RosterValue.RC_ID) = " + idQ2 + ") AND((ST_Response.T_ID) = " + idQ1 + ")) "; GlobalInfo.DBOperation.OpenDataSet(sql); tb = GlobalInfo.DBOperation.DataSet.Tables[0]; for (int iRow = 0; iRow < tb.Rows.Count; iRow++) { DataRow row = tb.Rows[iRow]; string id = row["V_ID"].ToString(); string groupText = row["RV_Text"].ToString(); int groupNo = lstOptionText.IndexOf(groupText); if (groupNo >= 0) groupNo++; if (!dicResultQ2.Contains(id)) dicResultQ2.Add(id, groupNo.ToString() + ","); //dicResultQ2.Add(id, groupText); if (!lstVId.Contains(id)) lstVId.Add(id); } GlobalInfo.DBOperation.CloseDataSet(); } int countOptionQ1 = 0; int countOptionQ2 = 0; if (dicOptionCount.Contains(idQ1)) countOptionQ1 = dicOptionCount[idQ1]; if (dicOptionCount.Contains(idQ2)) countOptionQ2 = dicOptionCount[idQ2]; //杨斌 2018-12-25 int nVoteRateCol = -1; if (!string.IsNullOrEmpty(VoteRateCol)) { for (int i = 1; i < RosterList.RosterLoad.Columns.Count; i++) { if (RosterList.RosterLoad.Columns[i].ColumnName == VoteRateCol) { nVoteRateCol = i; break; } } } List lstData = new List(); for (int i = 0; i < countOptionQ1; i++) { double[] aryData = new double[countOptionQ2]; lstData.Add(aryData); } for (int i = 0; i < lstVId.Count; i++) { string id = lstVId[i]; if ((dicResultQ1.Contains(id)) && (dicResultQ2.Contains(id))) { //杨斌 2020-03-05 string resultQ1 = dicResultQ1[id]; string resultQ2 = dicResultQ2[id]; int n1 = ConvertOper.Convert(resultQ1.Split(',')[0]).ToInt - 1; int n2 = ConvertOper.Convert(resultQ2.Split(',')[0]).ToInt - 1; double rate1 = 1; if (nVoteRateCol > 0) { var row1 = RosterList.RosterLoad.GetRowByVoterID(id); if (row1 != null) rate1 = ConvertOper.Convert(row1.Cells[nVoteRateCol]).ToInt; } lstData[n1][n2] += rate1;//ToDo:需要计算权重。2018-12-10 /* for (int n1 = 0; n1 < countOptionQ1; n1++) { for (int n2 = 0; n2 < countOptionQ2; n2++) { string resultQ1 = dicResultQ1[id]; string resultQ2 = dicResultQ2[id]; string noQ1 = (n1 + 1).ToString() + ","; string noQ2 = (n2 + 1).ToString() + ","; if (resultQ1.Contains(noQ1) && resultQ2.Contains(noQ2)) { //lstData[n1][n2]++;//ToDo:需要计算权重。2018-12-10 double rate1 = 1; if (nVoteRateCol > 0) { var row1 = RosterList.RosterLoad.GetRowByVoterID(id); if (row1 != null) rate1 = ConvertOper.Convert(row1.Cells[nVoteRateCol]).ToInt; } lstData[n1][n2] += rate1;//ToDo:需要计算权重。2018-12-10 } } }*/ } } //刷新图表 string[] aryOptionQ1 = dicOptionText[idQ1]; string[] aryOptionQ2 = dicOptionText[idQ2]; if (IsInvertCross) { List lstDataInvert = new List(); for (int i = 0; i < countOptionQ2; i++) { double[] aryData = new double[countOptionQ1]; for (int j = 0; j < countOptionQ1; j++) { aryData[j] = lstData[j][i]; } lstDataInvert.Add(aryData); } aryOption1 = aryOptionQ2; aryOption2 = aryOptionQ1; lstShowData = lstDataInvert; //ShowChartData(aryOptionQ2, aryOptionQ1, lstDataInvert);//杨斌 2016-05-10 } else { aryOption1 = aryOptionQ1; aryOption2 = aryOptionQ2; lstShowData = lstData; //ShowChartData(aryOptionQ1, aryOptionQ2, lstData);//杨斌 2016-05-10 } } catch (Exception ex) { SystemLog.WriterLog(ex); } } //选择题目 private void lvwSlide_SelectedIndexChanged(object sender, EventArgs e) { if (IsLoading) return; ShowChartGroupComp(); } //选择分组内容 private void lvwGroup_SelectedIndexChanged(object sender, EventArgs e) { if (IsLoading) return; ShowChartGroupComp(); } //设置图表标签样式 private void rbtChartDataLabel_CheckedChanged(object sender, EventArgs e) { if (IsLoading) return; if (IsShowBack) return;//杨斌 2017-02-27 ShowChartGroupComp(); GlobalInfo.IniCtlSystem.WriteValue(this.Name, "ChartDataLabel", (sender as Control).Name);//杨斌 2014-07-25 } //设置图表样式 private void rbtChartType_CheckedChanged(object sender, EventArgs e) { if (IsLoading) return; if (IsShowBack) return;//杨斌 2017-02-27 ShowChartGroupComp(); GlobalInfo.IniCtlSystem.WriteValue(this.Name, "ChartType", (sender as Control).Name);//杨斌 2014-07-25 } //双击全屏 private void pnlChart_DoubleClick(object sender, EventArgs e) { ShowChartFull(); } //反转对比选项 private void btnInvert_Click(object sender, EventArgs e) { if (IsLoading) return; IsInvertCross = !IsInvertCross; ShowChartGroupComp(); } //全屏显示图表 private void btnShowFull_Click(object sender, EventArgs e) { ShowChartFull(); } /// /// 是否全屏 /// private bool IsFullScreen = false; private Point OldFrmPoint; private Size OldFrmSize; private Point OldPnlPoint; private Size OldPnlSize; /// /// 全屏显示图表 /// private void ShowChartFull() { if (IsFullScreen) { IsFullScreen = false; this.ControlBox = true; this.Text = this.Tag.ToString(); pnlChart.Dock = DockStyle.None; this.Location = OldFrmPoint; this.Size = OldFrmSize; pnlChart.Location = OldPnlPoint; pnlChart.Size = OldPnlSize; pnlChart.Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Bottom; } else { IsFullScreen = true; OldFrmPoint = this.Location; OldFrmSize = this.Size; OldPnlPoint = pnlChart.Location; OldPnlSize = pnlChart.Size; this.Tag = this.Text; this.Text = ""; this.ControlBox = false; pnlChart.Dock = DockStyle.Fill; pnlChart.BringToFront(); this.Location = new Point(0, 0); //杨斌 2014-09-17 Screen scrShow = ControlOper.GetSecondScreen(); this.Size = new Size(scrShow.Bounds.Width, scrShow.Bounds.Height); } ControlOper.CenterForm(this, IsFullScreen);//杨斌 2014-09-17 } //如果全屏Esc则返回,再Esc退出,另外还要去掉Form的CancelButton属性。杨斌 2013-05-15 private void FrmAnalyzeSlideGroup_KeyDown(object sender, KeyEventArgs e) { switch (e.KeyCode) { case Keys.Escape: if (IsFullScreen) ShowChartFull(); else this.Close(); break; } } } }