/*-------------------------------------------------------------------------------------------
* 选项分组对比
* 创建:杨斌 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;
}
}
}
}