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 ChineseStandardABCDDS : UserControl { #region 全局变量 //设置数据表 public DataTable m_dt_A = new DataTable(); public DataTable m_dt_B = new DataTable(); public DataTable m_dt_C = new DataTable(); public DataTable m_dt_D = new DataTable(); public DataTable m_dt_DS = 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; //获取从框架得到的底层计算结果,国标表B List m_list_cgriddataclr_B = null; //获取从框架得到的底层计算结果,国标表C List m_list_cgriddataclr_C = null; //获取从框架得到的底层计算结果,国标表D List m_list_cgriddataclr_D = null; //获取从框架得到的底层计算结果,国标表DS List m_list_cgriddataclr_DS = null; //定义整个一组返回List List m_list_ALL = null; //接收底层数据 public List DataAll; //一个数据源包含几个列数的记录数 private int m_oneresult_columnscount_A = 3; private int m_oneresult_columnscount_B = 3; private int m_oneresult_columnscount_C = 3; private int m_oneresult_columnscount_D = 3; private int m_oneresult_columnscount_DS = 3; #endregion #region 自定义方法 private void SetDataGridViewStyleAll() { //用户不能调整标题的高度 Gview_gzA.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing; //用户不能调整 行高 Gview_gzA.AllowUserToResizeRows = false; //点击选择整行 Gview_gzA.SelectionMode = DataGridViewSelectionMode.FullRowSelect; //居中显示 System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; Gview_gzA.DefaultCellStyle = dataGridViewCellStyle1; Gview_gzA.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; //再次重覆禁用拖动表头高度,居然有效果了 Gview_gzA.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing; //设置grid可以复制 Gview_gzA.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText; } /// /// 设置DataGridView样式,B类表 /// private void SetDataGridViewStyleB() { //用户不能调整标题的高度 Gview_gzB.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing; //用户不能调整 行高 Gview_gzB.AllowUserToResizeRows = false; //点击选择整行 Gview_gzB.SelectionMode = DataGridViewSelectionMode.FullRowSelect; //居中显示 System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; Gview_gzB.DefaultCellStyle = dataGridViewCellStyle1; Gview_gzB.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; //再次重覆禁用拖动表头高度,居然有效果了 Gview_gzB.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing; //设置grid可以复制 Gview_gzB.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText; //设置每列的宽度 Gview_gzB.Columns[0].Width = 40;//第一列序号的宽度设置一下吧,要不太丑 //设置序号列不排序 Gview_gzB.Columns[0].SortMode = DataGridViewColumnSortMode.NotSortable; //设置序号列不可以设置宽度 Gview_gzB.Columns[0].Resizable = DataGridViewTriState.False; } /// /// 设置DataGridView样式,C类表 /// private void SetDataGridViewStyleC() { //用户不能调整标题的高度 Gview_gzC.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing; //用户不能调整 行高 Gview_gzC.AllowUserToResizeRows = false; //点击选择整行 Gview_gzC.SelectionMode = DataGridViewSelectionMode.FullRowSelect; //居中显示 System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; Gview_gzC.DefaultCellStyle = dataGridViewCellStyle1; Gview_gzC.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; //再次重覆禁用拖动表头高度,居然有效果了 Gview_gzC.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing; //设置grid可以复制 Gview_gzC.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText; //设置每列的宽度 Gview_gzC.Columns[0].Width = 40;//第一列序号的宽度设置一下吧,要不太丑 //设置序号列不排序 Gview_gzC.Columns[0].SortMode = DataGridViewColumnSortMode.NotSortable; //设置序号列不可以设置宽度 Gview_gzC.Columns[0].Resizable = DataGridViewTriState.False; } /// /// 设置DataGridView样式,D类表 /// private void SetDataGridViewStyleD() { //用户不能调整标题的高度 Gview_gzD.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing; //用户不能调整 行高 Gview_gzD.AllowUserToResizeRows = false; //改变行的高度; //Gview_gz.RowTemplate.Height = 20; //点击选择整行 Gview_gzD.SelectionMode = DataGridViewSelectionMode.FullRowSelect; //居中显示 System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; Gview_gzD.DefaultCellStyle = dataGridViewCellStyle1; Gview_gzD.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; //再次重覆禁用拖动表头高度,居然有效果了 Gview_gzD.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing; //设置grid可以复制 Gview_gzD.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText; //设置每列的宽度 Gview_gzD.Columns[0].Width = 40;//第一列序号的宽度设置一下吧,要不太丑 //设置序号列不排序 Gview_gzD.Columns[0].SortMode = DataGridViewColumnSortMode.NotSortable; //设置序号列不可以设置宽度 Gview_gzD.Columns[0].Resizable = DataGridViewTriState.False; } /// /// 设置DataGridView样式,DS类表 /// private void SetDataGridViewStyleDS() { //用户不能调整标题的高度 Gview_gzDS.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing; //用户不能调整 行高 Gview_gzDS.AllowUserToResizeRows = false; //点击选择整行 Gview_gzDS.SelectionMode = DataGridViewSelectionMode.FullRowSelect; //居中显示 System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; Gview_gzDS.DefaultCellStyle = dataGridViewCellStyle1; Gview_gzDS.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; //再次重覆禁用拖动表头高度,居然有效果了 Gview_gzDS.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing; //设置grid可以复制 Gview_gzDS.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText; //设置每列的宽度 Gview_gzDS.Columns[0].Width = 40;//第一列序号的宽度设置一下吧,要不太丑 //设置序号列不排序 Gview_gzDS.Columns[0].SortMode = DataGridViewColumnSortMode.NotSortable; //设置序号列不可以设置宽度 Gview_gzDS.Columns[0].Resizable = DataGridViewTriState.False; } #endregion #region 窗体加载及初始化 public ChineseStandardABCDDS() { 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 ChineseStandardABCDDS( COTSReportProjFileMgrClr in_Cotsreportprojfilemgrclr, List in_list_CGridDataClrAll) { DataAll = in_list_CGridDataClrAll; //初始化日志文件名称 //m_LogFunExport = new NSLogFunExport.CFunExportClass(); //m_LogFunExport.InitLog(m_csFileName); //获取报告项目类对象 m_COTSReportProjFileMgrClr = in_Cotsreportprojfilemgrclr; m_list_cgriddataclr_A = in_list_CGridDataClrAll.GetRange(0, 1); m_list_cgriddataclr_B = in_list_CGridDataClrAll.GetRange(1, 1); m_list_cgriddataclr_C = in_list_CGridDataClrAll.GetRange(2, 1); m_list_cgriddataclr_D = in_list_CGridDataClrAll.GetRange(3, 1); m_list_cgriddataclr_DS = in_list_CGridDataClrAll.GetRange(4, 1); m_list_ALL = in_list_CGridDataClrAll; //初始化底层操作类 // m_OTSIncAReportGridsFun = new OTSIncAReportGridsFun(m_COTSReportProjFileMgrClr, m_list_cgriddataclr_A); InitializeComponent(); #region 国际化语言 lan = new Language(this); table = lan.GetNameTable(this.Name); #endregion } private void ChineseStandardABCDDS_Load(object sender, EventArgs e) { //从底层结果类对象中,分解出数据保存到datatable中 if (m_list_ALL.Count > 6) { int SouseData = (m_COTSReportProjFileMgrClr.GetSmplMsrResultMgrs().Count) * 5; for (int g = 0; g < m_COTSReportProjFileMgrClr.GetSmplMsrResultMgrs().Count; g++) { for (int i = 0; i < 5; i++) { DataTable dt = new DataTable(); DataColumn cc = new DataColumn(); int q = g * 6 + i; dt = ChineseStandardABCD_GetDataTable_Total(DataAll.GetRange(q, 1), out m_oneresult_columnscount_A); DataGridView aa = new DataGridView(); int start = 40; int end = 0; end = 150 * q; aa.Location = new Point(start, end); aa.Width = panel1.Width; aa.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; aa.BackgroundColor = Color.White; panel1.Controls.Add(aa); aa.DataSource = dt; aa.Name = i.ToString(); Label bb = new Label(); int startLabel = 0; int endLabel = 0; endLabel = 150 * q; bb.Location = new Point(startLabel, endLabel); bb.Width = 75; for (int t = 0; t < SouseData; t++) { if (i == t * 5) { bb.Text = table["label1"].ToString(); break; } if (i == t * 5 + 1) { bb.Text = table["label2"].ToString(); } if (i == t * 5 + 2) { bb.Text = table["label3"].ToString(); } if (i == t * 5 + 3) { bb.Text = table["label4"].ToString(); } if (i == t * 5 + 4) { bb.Text = table["label5"].ToString(); } } bb.Font = new Font(bb.Font.Name, 12, FontStyle.Bold | FontStyle.Underline); panel1.Controls.Add(bb); } } Gview_gzA.Visible = false; Gview_gzB.Visible = false; Gview_gzC.Visible = false; Gview_gzD.Visible = false; Gview_gzDS.Visible = false; label1.Visible = false; label2.Visible = false; label3.Visible = false; label4.Visible = false; label5.Visible = false; Invalidate(); } else { m_dt_A = ChineseStandardABCD_GetDataTable_Total(m_list_cgriddataclr_A, out m_oneresult_columnscount_A); m_dt_B = ChineseStandardABCD_GetDataTable_Total(m_list_cgriddataclr_B, out m_oneresult_columnscount_B); m_dt_C = ChineseStandardABCD_GetDataTable_Total(m_list_cgriddataclr_C, out m_oneresult_columnscount_C); m_dt_D = ChineseStandardABCD_GetDataTable_Total(m_list_cgriddataclr_D, out m_oneresult_columnscount_D); m_dt_DS = ChineseStandardABCD_GetDataTable_Total(m_list_cgriddataclr_DS, out m_oneresult_columnscount_DS); Gview_gzA.DataSource = m_dt_A; for (int i = 0; i < 13; i++) { Gview_gzA.Columns[i].Width = 68; } Gview_gzB.DataSource = m_dt_B; for (int i = 0; i < 13; i++) { Gview_gzB.Columns[i].Width = 68; } Gview_gzC.DataSource = m_dt_C; for (int i = 0; i < 13; i++) { Gview_gzC.Columns[i].Width = 68; } Gview_gzD.DataSource = m_dt_D; for (int i = 0; i < 13; i++) { Gview_gzD.Columns[i].Width = 68; } Gview_gzDS.DataSource = m_dt_DS; Gview_gzA.Width = panel1.Width; Gview_gzB.Width = panel1.Width; Gview_gzC.Width = panel1.Width; Gview_gzD.Width = panel1.Width; Gview_gzDS.Width = panel1.Width; } Invalidate(); } #endregion #region 相关事件 /// /// 复制选择区域,A /// public void CopySelected_A() { //复制选择区域 object oo = Gview_gzA.GetClipboardContent(); Clipboard.SetDataObject(Gview_gzA.GetClipboardContent()); } /// /// 复制选择区域,B /// public void CopySelected_B() { //复制选择区域 object oo = Gview_gzB.GetClipboardContent(); Clipboard.SetDataObject(Gview_gzA.GetClipboardContent()); } /// /// 复制选择区域,C /// public void CopySelected_C() { //复制选择区域 object oo = Gview_gzC.GetClipboardContent(); Clipboard.SetDataObject(Gview_gzA.GetClipboardContent()); } /// /// 复制选择区域,D /// public void CopySelected_D() { //复制选择区域 object oo = Gview_gzD.GetClipboardContent(); Clipboard.SetDataObject(Gview_gzA.GetClipboardContent()); } /// /// 复制选择区域,DS /// public void CopySelected_DS() { //复制选择区域 object oo = Gview_gzDS.GetClipboardContent(); Clipboard.SetDataObject(Gview_gzA.GetClipboardContent()); } /// /// 复制所有,A /// public void CopyAll_A() { Gview_gzA.SelectAll(); Clipboard.SetDataObject(Gview_gzA.GetClipboardContent()); } /// /// 复制所有,B /// public void CopyAll_B() { Gview_gzB.SelectAll(); Clipboard.SetDataObject(Gview_gzB.GetClipboardContent()); } /// /// 复制所有,C /// public void CopyAll_C() { Gview_gzC.SelectAll(); Clipboard.SetDataObject(Gview_gzC.GetClipboardContent()); } /// /// 复制所有,D /// public void CopyAll_D() { Gview_gzD.SelectAll(); Clipboard.SetDataObject(Gview_gzD.GetClipboardContent()); } /// /// 复制所有,DS /// public void CopyAll_DS() { Gview_gzDS.SelectAll(); Clipboard.SetDataObject(Gview_gzDS.GetClipboardContent()); } private void ToolStripMenuItem1_Click(object sender, EventArgs e) { //A,复制整个表 CopyAll_A(); } private void ToolStripMenuItem2_Click(object sender, EventArgs e) { //A,复制选择区域 CopySelected_A(); } private void toolStripMenuItem4_Click(object sender, EventArgs e) { //B,复制整个表 CopyAll_B(); } private void toolStripMenuItem5_Click(object sender, EventArgs e) { //B,复制选择区域 CopySelected_B(); } private void toolStripMenuItem7_Click(object sender, EventArgs e) { //C,复制整个表 CopyAll_C(); } private void toolStripMenuItem8_Click(object sender, EventArgs e) { //C,复制选择区域 CopySelected_C(); } private void toolStripMenuItem10_Click(object sender, EventArgs e) { //D,复制整个表 CopyAll_D(); } private void toolStripMenuItem11_Click(object sender, EventArgs e) { //D,复制选择区域 CopySelected_D(); } private void toolStripMenuItem13_Click(object sender, EventArgs e) { //DS,复制整个表 CopyAll_DS(); } private void toolStripMenuItem14_Click(object sender, EventArgs e) { //DS,复制选择区域 CopySelected_DS(); } #endregion #region 获取向导出模块提供的DataTable和GridView对象 /// /// 获取到该模块输出后形成的DataTable,和GridView /// /// /// public void GetDataTableAndGridView(out DataTable out_dtA, out DataTable out_dtB, out DataTable out_dtC, out DataTable out_dtD, out DataTable out_dtDS, out DataGridView out_dgA, out DataGridView out_dgB, out DataGridView out_dgC, out DataGridView out_dgD, out DataGridView out_dgDS) { //从panel中找出前5个datagridview,然后进行输出 foreach (Control ctl in this.panel1.Controls) { if (ctl.Name == "0") { this.Gview_gzA = (DataGridView)ctl; } if (ctl.Name == "1") { this.Gview_gzB = (DataGridView)ctl; } if (ctl.Name == "2") { this.Gview_gzC = (DataGridView)ctl; } if (ctl.Name == "3") { this.Gview_gzD = (DataGridView)ctl; } if (ctl.Name == "4") { this.Gview_gzDS = (DataGridView)ctl; } } out_dtA = m_dt_A; out_dgA = this.Gview_gzA; out_dtB = m_dt_B; out_dgB = this.Gview_gzB; out_dtC = m_dt_C; out_dgC = this.Gview_gzC; out_dtD = m_dt_D; out_dgD = this.Gview_gzD; out_dtDS = m_dt_DS; out_dgDS = this.Gview_gzDS; } #endregion #region clr加载数据部分 public DataTable ChineseStandardABCD_GetDataTable_Total(List in_list_cgriddataclr, out int oneresult_columncount) { oneresult_columncount = 1;//一个数据源的跨度,计算出一个数据源包含几个列 //创建一个临时表 DataTable ret_dt = new DataTable(); //判断传入的数据对象是否为空 if (in_list_cgriddataclr == null) { string str1 = "传入分解表格数据的CGridDataClr对象为空!"; str1 = table["str1"].ToString(); //log.Error("(OTSIncAReportGridsFun.ChineseStandardABCD_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 (oneresult_columncount < list_cgridcolumnclrs.Count()) oneresult_columncount = list_cgridcolumnclrs.Count(); 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 * oneresult_columncount] = 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 * oneresult_columncount] = str_value; break; case 3: //float str_value = ls_list_cgridrowclr[j].GetDoubleValue().ToString("0.00"); ret_dt.Rows[j][k + i * oneresult_columncount] = str_value; break; default: str_value = ""; ret_dt.Rows[j][k + i * oneresult_columncount] = str_value; break; } } } } #endregion return ret_dt; } #endregion } }