using System; using System.Collections.Generic; using System.Drawing; using System.Data; using System.Linq; using System.Windows.Forms; using OTSCLRINTERFACE; using System.Collections; using OTSCommon; namespace OTSIncAReportGB { public partial class DINStandardABCDDS : UserControl { #region 全局变量 //设置数据表 public DataTable m_dt = new DataTable(); //底层相关,项目操作管理类 CReportMgrClr m_ReportMgrClr = null; //获取从框架得到的底层计算结果,国标表A List in_list_cgriddataclr = null; //接收底层数据 public List DataAll; Language lan; Hashtable table; DataTable dt_yb6156 = new DataTable(); Dictionary Level_Coefficient = new Dictionary(); Dictionary SamplesInclusionGradeInfo; public struct InclusionGradeInfo { public int[] GradeACount; public int[] GradeBCount; public int[] GradeCCount; public int[] GradeDCount; public double S; public double O; public double Area; } public Dictionary> InclusionGradeInfos = new Dictionary>(); #endregion #region 窗体加载及初始化 public DINStandardABCDDS() { InitializeComponent(); } /// /// 国标报表,构造函数,接收A,B,C,D,DS五种结果,并进行显示 /// /// /// /// //all 代表A、B、C、D、DS按顺序得表 public string ColumnName; public string RowName; public DINStandardABCDDS(CReportMgrClr in_Cotsreportprojfilemgrclr, List in_list_CGridDataClrAll) { DataAll = in_list_CGridDataClrAll; m_ReportMgrClr = in_Cotsreportprojfilemgrclr; in_list_cgriddataclr = in_list_CGridDataClrAll.GetRange(0, in_list_CGridDataClrAll.Count); InitializeComponent(); #region 国际化语言 lan = new Language(this); table = lan.GetNameTable(this.Name); #endregion } private void DINStandardABCDDS_Load(object sender, EventArgs e) { Level_Coefficient.Clear(); Level_Coefficient.Add(0, 0.05); Level_Coefficient.Add(1, 0.1); Level_Coefficient.Add(2, 0.2); Level_Coefficient.Add(3, 0.5); Level_Coefficient.Add(4, 1); Level_Coefficient.Add(5, 2); Level_Coefficient.Add(6, 5); Level_Coefficient.Add(7, 10); Level_Coefficient.Add(8, 20); Level_Coefficient.Add(9, 50); comboBox_InitialRatingLevel.Items.Clear(); comboBox_InitialRatingLevel.Items.Add("0"); comboBox_InitialRatingLevel.Items.Add("1"); comboBox_InitialRatingLevel.Items.Add("2"); comboBox_InitialRatingLevel.Items.Add("3"); comboBox_InitialRatingLevel.Items.Add("4"); comboBox_InitialRatingLevel.Items.Add("5"); comboBox_InitialRatingLevel.Items.Add("6"); comboBox_InitialRatingLevel.Items.Add("7"); comboBox_InitialRatingLevel.Items.Add("8"); comboBox_InitialRatingLevel.Items.Add("9"); comboBox_InitialRatingLevel.SelectedIndex = 0; this.comboBox_InitialRatingLevel.SelectedIndexChanged += new System.EventHandler(this.comboBox_InitialRatingLevel_SelectedIndexChanged); List dts = GetDataTable(in_list_cgriddataclr); SamplesInclusionGradeInfo = new Dictionary(); int t = 1; foreach (DataTable dt in dts) { InclusionGradeInfo inclusionGradeInfo = CalInclusionGradeInfo(dt); SamplesInclusionGradeInfo.Add(t.ToString(), inclusionGradeInfo); t++; } BindDataGridView(SamplesInclusionGradeInfo[1.ToString()]); SetDataGridViewStyle(); } /// /// 根据传入的数字返回对应的颜色,范围1-17种颜色,挑出来比较谈的颜色为对比效果好看而挑选 /// /// /// public Color GetColorByNumber(int number) { Color ret_color = new Color(); switch (number) { case 1: ret_color = Color.Azure; break; case 2: ret_color = Color.Beige; break; case 3: ret_color = Color.PaleGreen; break; case 13: ret_color = Color.Cornsilk; break; case 4: ret_color = Color.FloralWhite; break; case 5: ret_color = Color.Gainsboro; break; case 6: ret_color = Color.GhostWhite; break; case 7: ret_color = Color.Honeydew; break; case 8: ret_color = Color.Ivory; break; case 9: ret_color = Color.Lavender; break; case 10: ret_color = Color.LavenderBlush; break; case 11: ret_color = Color.LightCyan; break; case 12: ret_color = Color.MintCream; break; case 14: ret_color = Color.PaleTurquoise; break; case 15: ret_color = Color.SeaShell; break; case 16: ret_color = Color.Snow; break; case 17: ret_color = Color.WhiteSmoke; break; default: ret_color = Color.White; break; } return ret_color; } /// /// 绑定datagridview数据 /// public void BindDataGridView(InclusionGradeInfo inclusionGradeInfo) { Gview_gz.Columns.Clear(); Gview_gz.Columns.Add("Class", "Class"); for (int i = 0; i <10; i++) { Gview_gz.Columns.Add("Grade"+ i.ToString(), i.ToString()); } Gview_gz.Columns.Add("S", "S"); Gview_gz.Columns.Add("O", "O"); //设置数据 for (int i = 0; i < 4; i++) { Gview_gz.Rows.Add(); switch (i) { case 0: Gview_gz.Rows[i].Cells[0].Value="SS"; double toS = 0; for (int k = 1; k < Gview_gz.Columns.Count - 2; k++) { if (k <= Convert.ToInt32(comboBox_InitialRatingLevel.SelectedItem)) { Gview_gz.Rows[i].Cells[k].Value = "-"; } else { Gview_gz.Rows[i].Cells[k].Value = inclusionGradeInfo.GradeACount[k-1]; toS += Convert.ToDouble(inclusionGradeInfo.GradeACount[k - 1]) * Level_Coefficient[k - 1]; } Gview_gz.Rows[0].Cells[11].Value = toS; Gview_gz.Rows[0].Cells[12].Value = "-"; } break; case 1: Gview_gz.Rows[i].Cells[0].Value = "OA"; double toOA = 0; for (int k = 1; k < Gview_gz.Columns.Count - 2; k++) { if (k <= Convert.ToInt32(comboBox_InitialRatingLevel.SelectedItem)) { Gview_gz.Rows[i].Cells[k].Value = "-"; } else { Gview_gz.Rows[i].Cells[k].Value = inclusionGradeInfo.GradeBCount[k - 1]; toOA += Convert.ToDouble(inclusionGradeInfo.GradeBCount[k - 1]) * Level_Coefficient[k - 1]; } } Gview_gz.Rows[i].Cells[11].Value = "-"; Gview_gz.Rows[i].Cells[12].Value = toOA; break; case 2: Gview_gz.Rows[i].Cells[0].Value = "OS"; double toOS = 0; for (int k = 1; k < Gview_gz.Columns.Count - 2; k++) { if (k <= Convert.ToInt32(comboBox_InitialRatingLevel.SelectedItem)) { Gview_gz.Rows[i].Cells[k].Value = "-"; } else { Gview_gz.Rows[i].Cells[k].Value = inclusionGradeInfo.GradeCCount[k - 1]; toOS += Convert.ToDouble(inclusionGradeInfo.GradeCCount[k - 1]) * Level_Coefficient[k - 1]; } } Gview_gz.Rows[i].Cells[11].Value = "-"; Gview_gz.Rows[i].Cells[12].Value = toOS; break; case 3: Gview_gz.Rows[i].Cells[0].Value = "OG"; double toOG = 0; for (int k = 1; k < Gview_gz.Columns.Count - 2; k++) { if (k <= Convert.ToInt32(comboBox_InitialRatingLevel.SelectedItem)) { Gview_gz.Rows[i].Cells[k].Value = "-"; } else { Gview_gz.Rows[i].Cells[k].Value = inclusionGradeInfo.GradeDCount[k - 1]; toOG += Convert.ToDouble(inclusionGradeInfo.GradeDCount[k - 1]) * Level_Coefficient[k - 1]; } } Gview_gz.Rows[i].Cells[11].Value = "-"; Gview_gz.Rows[i].Cells[12].Value = toOG; break; default: break; } } int totle = Gview_gz.Rows.Add(); Gview_gz.Rows[totle].Cells[0].Value = table["str2"].ToString(); Gview_gz.Rows[totle].Cells[11].Value = "S=" + Gview_gz.Rows[0].Cells[11].Value; double to = Convert.ToDouble(Gview_gz.Rows[1].Cells[12].Value) + Convert.ToDouble(Gview_gz.Rows[2].Cells[12].Value) + Convert.ToDouble(Gview_gz.Rows[3].Cells[12].Value); Gview_gz.Rows[totle].Cells[12].Value = "O=" + to.ToString(); int totle1 = Gview_gz.Rows.Add(); Gview_gz.Rows[totle1].Cells[11].Value = table["str3"].ToString(); double ts = Convert.ToDouble(Gview_gz.Rows[0].Cells[11].Value); double gg = ((ts + to) * 1000) / inclusionGradeInfo.Area; Gview_gz.Rows[totle1].Cells[12].Value = gg.ToString("F2"); //设置颜色 int color_count = 1; for (int i = 0; i < m_dt.Columns.Count; i++) { for (int k = 0; k < m_dt.Rows.Count; k++) { Gview_gz.Rows[k].Cells[i].Style.BackColor = GetColorByNumber(color_count); } } } /// /// 设置DataGridView样式 /// private void SetDataGridViewStyle() { //用户不能调整标题的高度 Gview_gz.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing; //用户不能调整 行高 Gview_gz.AllowUserToResizeRows = false; //点击选择整行 Gview_gz.SelectionMode = DataGridViewSelectionMode.FullRowSelect; //居中显示 System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; Gview_gz.DefaultCellStyle = dataGridViewCellStyle1; Gview_gz.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; //再次重覆禁用拖动表头高度,居然有效果了 Gview_gz.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing; //设置grid可以复制 Gview_gz.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText; //设置每列的宽度 Gview_gz.Columns[0].Width = 60;//第一列序号的宽度设置一下吧,要不太丑 //设置序号列不排序 Gview_gz.Columns[0].SortMode = DataGridViewColumnSortMode.NotSortable; //设置序号列不可以设置宽度 Gview_gz.Columns[0].Resizable = DataGridViewTriState.False; //先设置一下头的高度,否则会太矮不好看 Gview_gz.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing; Gview_gz.ColumnHeadersHeight = 40; ////创建Grid的列 //this.Gview_gz.MergeColumnNames.Add("夹杂物级别"); //this.Gview_gz.AddSpanHeader(1, 9, table["str1"].ToString()); //Gview_gz.MergeColumnHeaderBackColor = Color.White; //设置grid默认值的样式,防止图像为空时有红x for (int i = 0; i < Gview_gz.Columns.Count; i++) { Gview_gz.Columns[i].DefaultCellStyle.NullValue = null; Gview_gz.Columns[i].Width = 60; Gview_gz.Columns[i].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; } } #endregion #region clr部份 List GetDataTable(List in_list_cgriddataclr) { List dataTables = new List(); //判断传入的数据对象是否为空 if (in_list_cgriddataclr == null) { string str1 = "传入分解表格数据的CGridDataClr对象为空!"; str1 = table["str1"].ToString(); //log.Error("(OTSIncAReportGridsFun.ChineseStandardABCD_GetDataTable_Total)" + str1); } #region 根据返回的结构创建DataTable的结构--------------------------------------------- for (int i = 0; i < in_list_cgriddataclr.Count(); i++) { DataTable ret_dt = new DataTable(in_list_cgriddataclr[i].GetDataSourceList()[Convert.ToInt32(in_list_cgriddataclr[i].GetDataSourceId())].ToString()); List list_cgridcolumnclrs = new List(); list_cgridcolumnclrs = in_list_cgriddataclr[i].GetGridColumnList(); //获取各列 foreach (CGridColumnClr ls_cgridcolumnclr in list_cgridcolumnclrs) { string ls_fl_strName = ls_cgridcolumnclr.GetName(); ret_dt.Columns.Add(ls_fl_strName); } //取最大的rowlistcount,要不然,不知道这底层返回的数据居然还有2,2,3这样的行数据 int maxrownumber = 0; //创建DT的行 if (list_cgridcolumnclrs != null) { foreach (CGridColumnClr ls_cgridcolumnclr in list_cgridcolumnclrs) { if (maxrownumber < ls_cgridcolumnclr.GetRowList().Count()) { maxrownumber = ls_cgridcolumnclr.GetRowList().Count(); } } } for (int k = 0; k < maxrownumber; k++) { DataRow dr = ret_dt.NewRow(); ret_dt.Rows.Add(dr); } for (int k = 0; k < list_cgridcolumnclrs.Count(); k++) { string ls_fl_strName = list_cgridcolumnclrs[k].GetName(); List ls_list_cgridrowclr = new List(); ls_list_cgridrowclr = list_cgridcolumnclrs[k].GetRowList(); for (int j = 0; j < ls_list_cgridrowclr.Count(); j++) { //先判断该行该单元格的数据类型 string str_value = "";//因为显示只需要对字符串进行操作就可以了,所以将底层获取到的数据,除了颗粒类型外的都转成string switch (ls_list_cgridrowclr[j].GetDataType()) { case 0: //string str_value = ls_list_cgridrowclr[j].GetStringValue(); ret_dt.Rows[j][k] = str_value; break; case 1: //该元素含量表没有需要显示的颗粒图像 //ret_dt.Rows[j][k+i*oneresult_columncount] = GetBitmapByParticleList(ls_list_cgridrowclr[k].GetParticle()); break; case 2: //int str_value = ls_list_cgridrowclr[j].GetIntValue().ToString(); ret_dt.Rows[j][k] = str_value; break; case 3: //float str_value = ls_list_cgridrowclr[j].GetDoubleValue().ToString("0.00"); ret_dt.Rows[j][k] = str_value; break; default: str_value = ""; ret_dt.Rows[j][k] = str_value; break; } } } dataTables.Add(ret_dt); } #endregion return dataTables; } #endregion InclusionGradeInfo CalInclusionGradeInfo(DataTable dt) { InclusionGradeInfo inclusionGradeInfo = new InclusionGradeInfo(); inclusionGradeInfo.GradeACount = new int[10] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; inclusionGradeInfo.GradeBCount = new int[10] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; inclusionGradeInfo.GradeCCount = new int[10] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; inclusionGradeInfo.GradeDCount = new int[10] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; foreach (DataRow dr in dt.Rows) { int ret = CalInclusionGradeByArea(Convert.ToDouble(dr[0])); if (ret != -1) { inclusionGradeInfo.GradeACount[ret] += 1; } ret = CalInclusionGradeByArea(Convert.ToDouble(dr[1])); if (ret != -1) { inclusionGradeInfo.GradeBCount[ret] += 1; } ret = CalInclusionGradeByArea(Convert.ToDouble(dr[2])); if (ret != -1) { inclusionGradeInfo.GradeCCount[ret] += 1; } ret = CalInclusionGradeByArea(Convert.ToDouble(dr[3])); if (ret != -1) { inclusionGradeInfo.GradeDCount[ret] += 1; } } inclusionGradeInfo.Area = dt.Rows.Count * 0.5; return inclusionGradeInfo; } int CalInclusionGradeByArea(double Area) { if (Area < 71) { return -1; } else if (Area < 141) { return 0; } else if (Area < 283) { return 1; } else if (Area < 566) { return 2; } else if (Area < 1131) { return 3; } else if (Area < 2263) { return 4; } else if (Area < 4525) { return 5; } else if (Area < 9051) { return 6; } else if (Area < 18102) { return 7; } else if (Area < 36204) { return 8; } else { return 9; } } private void comboBox_InitialRatingLevel_SelectedIndexChanged(object sender, EventArgs e) { BindDataGridView(SamplesInclusionGradeInfo[1.ToString()]); SetDataGridViewStyle(); this.Refresh(); } } }