using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using OTSIncAReportMailInterface; using OTSINTERFACE; using OTSIncAReportGrids.OTSIncAReportGridsFuncation; using System.Collections; using OTSIncAReportApp.SysMgrTools; namespace OTSIncAReportGrids { public partial class DINStandardABCDDS : UserControl { #region 全局变量 //设置数据表 public DataTable m_dt = new DataTable(); //底层相关,项目操作管理类 COTSReportProjFileMgrClr m_COTSReportProjFileMgrClr = null; //日志类 //public NSLogFunExport.CFunExportClass m_LogFunExport = null; //日志文件名 const String m_csFileName = "OTSReportAppLog"; //底层操作类 OTSIncAReportGridsFun m_OTSIncAReportGridsFun = null; //获取从框架得到的底层计算结果,国标表A List m_list_cgriddataclr_A = null; //定义整个一组返回List List m_list_ALL = null; //接收底层数据 public List DataAll; #endregion #region 窗体加载及初始化 public DINStandardABCDDS() { InitializeComponent(); } /// /// 国标报表,构造函数,接收A,B,C,D,DS五种结果,并进行显示 /// /// /// /// //all 代表A、B、C、D、DS按顺序得表 public string ColumnName; public string RowName; #region 国际化语言 Language lan; Hashtable table; #endregion public DINStandardABCDDS(COTSReportProjFileMgrClr in_Cotsreportprojfilemgrclr, List in_list_CGridDataClrAll) { DataAll = in_list_CGridDataClrAll; //获取报告项目类对象 m_COTSReportProjFileMgrClr = in_Cotsreportprojfilemgrclr; m_list_cgriddataclr_A = in_list_CGridDataClrAll.GetRange(0, 1); m_list_ALL = in_list_CGridDataClrAll; InitializeComponent(); #region 国际化语言 lan = new Language(this); table = lan.GetNameTable(this.Name); #endregion } private void DINStandardABCDDS_Load(object sender, EventArgs e) { //从底层结果类对象中,分解出数据保存到datatable中 m_dt = DINStandardABCD_GetDataTable_Total(m_list_cgriddataclr_A); //创建datatable的列数据,及分栏,及相关行数据 BindDataGridView(); //设置grid风格 SetDataGridViewStyle(); Invalidate(); } /// /// 根据传入的数字返回对应的颜色,范围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() { for (int i = 0; i < m_dt.Columns.Count; i++) { Gview_gz.Columns.Add(m_dt.Columns[i].ToString(), m_dt.Columns[i].ToString()); } //先设置一下头的高度,否则会太矮不好看 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; } //设置数据 for (int i = 0; i < m_dt.Rows.Count; i++) { int add_rowindex = Gview_gz.Rows.Add(); for (int k = 0; k < m_dt.Columns.Count; k++) { Gview_gz.Rows[i].Cells[k].Value = m_dt.Rows[i][k].ToString(); } } int totle = Gview_gz.Rows.Add(); Gview_gz.Rows[totle].Cells[0].Value = table["str2"].ToString(); Gview_gz.Rows[totle].Cells[10].Value = "S=" + Gview_gz.Rows[0].Cells[10].Value; double to = Convert.ToDouble(Gview_gz.Rows[1].Cells[11].Value) + Convert.ToDouble(Gview_gz.Rows[2].Cells[11].Value) + Convert.ToDouble(Gview_gz.Rows[3].Cells[11].Value); Gview_gz.Rows[totle].Cells[11].Value = "O=" + to.ToString(); int totle1 = Gview_gz.Rows.Add(); Gview_gz.Rows[totle1].Cells[10].Value = table["str3"].ToString(); uint area = m_COTSReportProjFileMgrClr.GetSmplMsrResultMgrs()[0].GetSmplMsrResultFile().GetSample().GetMsrResults().GetMeasuredArea(); double ts = Convert.ToDouble(Gview_gz.Rows[0].Cells[10].Value); double gg = ((ts + to) * 1000 * 1000 * 1000) / area; Gview_gz.Rows[totle1].Cells[11].Value = gg; //设置颜色 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.RowTemplate.Height = 20; //点击选择整行 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; } #endregion #region 获取向导出模块提供的DataTable和GridView对象 /// /// 获取到该模块输出后形成的DataTable,和GridView /// /// /// public void GetDataTableAndGridView(out DataTable out_dtA, out DataGridView out_dgA) { //从panel中找出前5个datagridview,然后进行输出 out_dtA = m_dt; out_dgA = null; } #endregion #region clr部份 public DataTable DINStandardABCD_GetDataTable_Total(List in_list_cgriddataclr) { //创建一个临时表 DataTable ret_dt = new DataTable(); //判断传入的数据对象是否为空 if (in_list_cgriddataclr == null) { string str1 = "传入分解表格数据的CGridDataClr对象为空!"; str1 = table["str1"].ToString(); //log.Error("(OTSIncAReportGridsFun.DINStandardABCD_GetDataTable_Total)" + str1); return ret_dt; } #region 根据返回的结构创建DataTable的结构--------------------------------------------- for (int i = 0; i < in_list_cgriddataclr.Count(); i++) { //分解结果内容 List list_cgridcolumnclrs = new List(); list_cgridcolumnclrs = in_list_cgriddataclr[i].GetGridColumnList(); //获取各列 if (in_list_cgriddataclr.Count > 1) { //创建DT的列,多个数据源,为每个字段带上索引号 foreach (CGridColumnClr ls_cgridcolumnclr in list_cgridcolumnclrs) { string ls_fl_strName = ls_cgridcolumnclr.GetName(); //通过获取到的列,创建表的列 ret_dt.Columns.Add(ls_fl_strName + "(" + (i + 1).ToString() + ")"); } } else { //创建DT的列,单个数据源,不带索引号 foreach (CGridColumnClr ls_cgridcolumnclr in list_cgridcolumnclrs) { string ls_fl_strName = ls_cgridcolumnclr.GetName(); //通过获取到的列,创建表的列 ret_dt.Columns.Add(ls_fl_strName); } } } #endregion #region 再创建表的行------------------------------------------------------------------ //取最大的rowlistcount,要不然,不知道这底层返回的数据居然还有2,2,3这样的行数据 int maxrownumber = 0; for (int i = 0; i < in_list_cgriddataclr.Count(); i++) { //分解结果内容 List list_cgridcolumnclrs = new List(); list_cgridcolumnclrs = in_list_cgriddataclr[i].GetGridColumnList(); //获取各列 //创建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); } #endregion #region //再次重新分解,先分解列,然后将获取到的各行各列的数据,填充到相应的位置上--- for (int i = 0; i < in_list_cgriddataclr.Count(); i++) { //分解结果内容 List list_cgridcolumnclrs = new List(); list_cgridcolumnclrs = in_list_cgriddataclr[i].GetGridColumnList(); //获取各列 //再次重新分解,先分解列,然后将获取到的 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 + i] = 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 + i] = str_value; break; case 3: //float str_value = ls_list_cgridrowclr[j].GetDoubleValue().ToString("0.00"); ret_dt.Rows[j][k + i] = str_value; break; default: str_value = ""; ret_dt.Rows[j][k + i] = str_value; break; } } } } #endregion return ret_dt; } #endregion } }