using OTSIncAReportApp.OTSSampleReportInfo; using OTSIncAReportApp.SysMgrTools; using OTSIncAReportGraph.Class; using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Drawing; using System.Linq; using System.Windows.Forms; namespace OTSIncAReportGrids { /// /// 颗粒尺寸分布表 颗粒尺寸表 /// public partial class ParticlesSizeGrid : UserControl { #region 设置变量 //设置模拟数据表 public DataTable m_dt = new DataTable(); //国际化 Language lan; Hashtable table; //测量结果 OTSIncAReportApp.DataOperation.Model.ResultFile result = null; OTSIncAReportApp.OTSSampleReportInfo.ReportCondition source; OTSIncAReportApp.frmReportApp m_ReportApp; int gridheight = 0; public string condition = ""; #endregion #region 自定义方法 private string getWhere(string max, string min, string col, string partic) { return col + ">=" + min + " and " + col + "<" + max + " and TypeId=" + partic; } /// /// 绑定datagridview数据 /// public void BindDataGridView(string path, int num, string filename) { List colid = new List() { "rowid", "pname", "color", "TypeId", "Largest", "Total" }; List colname = new List() { table["str1"].ToString(), table["str8"].ToString(), table["str9"].ToString(), "TypeId", table["str10"].ToString(), table["str11"].ToString() }; OTSGridView gridView = new OTSGridView(); OTSIncAReportApp.DataOperation.DataAccess.ParticleData particledata = new OTSIncAReportApp.DataOperation.DataAccess.ParticleData(path); //获取粒级表 string path1 = m_ReportApp.m_rstDataMgr.m_RptConfigFile.PartSizeFileFolder + m_ReportApp.m_rstDataMgr.m_RptConfigFile.PartSizeFile; DataSet ds = OTSIncAReportApp.DataOperation.DataAccess.XMLoperate.GetXml(path1); string sizestr = ds.Tables[0].Rows[0]["Sizes"].ToString(); for (int i = 0; i < sizestr.Split(',').Length - 1; i++) { if (sizestr.Split(',')[i].Length > 0) { double d1 = Convert.ToDouble(sizestr.Split(',')[i]); double d2 = Convert.ToDouble(sizestr.Split(',')[i + 1]); colid.Add(d1.ToString() + "~" + d2.ToString()); colname.Add(d1.ToString() + "~" + d2.ToString()); } } double d = Convert.ToDouble(sizestr.Split(',')[sizestr.Split(',').Length - 1]); colid.Add(d.ToString() + "~MAX"); colname.Add(d.ToString() + "~MAX"); //创建Grid的列 创建Datatable的列 for (int i = 0; i < colid.Count; i++) { gridView.Columns.Add(colid[i], colname[i]); m_dt.Columns.Add(colid[i]); } m_dt.Columns.Add("Class"); //设置grid默认值的样式,防止图像为空时有红x for (int i = 0; i < gridView.Columns.Count; i++) { gridView.Columns[i].DefaultCellStyle.NullValue = null; } List FLID = new List() { 0, 1, 2, 4, 6, 7, 8, 9 }; List NameList = new List() { table["partcletype0"].ToString(), table["partcletype1"].ToString(), table["partcletype2"].ToString(), table["partcletype4"].ToString(), table["partcletype6"].ToString(), table["partcletype7"].ToString(), table["partcletype8"].ToString(), table["partcletype9"].ToString() }; //int idx = m_ReportApp.m_DataMgrFun.GetPropIndexByPropItemName(m_ReportApp.SourceGridData.ConditionItemList, OTSIncAReportApp.OTSSampleReportInfo.OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE); //int sel = m_ReportApp.SourceGridData.ConditionItemList[idx].comboDownList.IndexOf(m_ReportApp.SourceGridData.ConditionItemList[idx].itemVal.ToString()); int sel = m_ReportApp.m_conditionChoose.m_SourceGridData.GetComboDownListIndexByItemName(OTSIncAReportApp.OTSSampleReportInfo.OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE_TYPE); string filedAndParticl = ""; DataTable dt; if (sel == 1) { List selectParticles = m_ReportApp.GetSelectedParticles(); foreach (var item in selectParticles) { filedAndParticl = filedAndParticl + "," + (item.FieldId.ToString() + "-" + item.ParticleId.ToString()); } if (filedAndParticl != "") { filedAndParticl = filedAndParticl + ","; } if(selectParticles.Count == 0) { dt = new DataTable(); } else { dt = particledata.GetParticleListForParticlSize("area", filedAndParticl); } } else { dt = particledata.GetParticleListForParticlSize("area", filedAndParticl); } gridView.MergeColumnNames.Add(filename); gridView.AddSpanHeader(1, gridView.Columns.Count - 1, filename); for (int i = 0; i < dt.Rows.Count; i++) { if (Convert.ToInt32(dt.Rows[i]["TypeId"]) < 100) { continue; } int add_rowindex = gridView.Rows.Add(); gridView.Rows[add_rowindex].Cells[0].Value = add_rowindex + 1; gridView.Rows[add_rowindex].Cells[1].Value = dt.Rows[i]["TypeName"]; gridView.Rows[add_rowindex].Cells[1].Style.BackColor = Color.Azure; string color = dt.Rows[i]["TypeColor"].ToString(); if (!color.Contains("#")) { color = "#" + dt.Rows[i]["TypeColor"].ToString(); } gridView.Rows[add_rowindex].Cells[2].Style.BackColor = DrawFunction.colorHx16toRGB(color); gridView.Rows[add_rowindex].Cells[3].Value = dt.Rows[i]["TypeId"]; gridView.Rows[add_rowindex].Cells[4].Value = Math.Round(Convert.ToDouble(dt.Rows[i]["max"]), 2); gridView.Rows[add_rowindex].Cells[4].Style.BackColor = Color.Azure; gridView.Rows[add_rowindex].Cells[5].Value = dt.Rows[i]["con"]; gridView.Rows[add_rowindex].Cells[5].Style.BackColor = Color.Azure; m_dt.Rows.Add(); m_dt.Rows[add_rowindex]["pname"]= dt.Rows[i]["TypeName"]; m_dt.Rows[add_rowindex]["TypeId"]=dt.Rows[i]["TypeId"]; m_dt.Rows[add_rowindex]["Largest"] = Math.Round(Convert.ToDouble(dt.Rows[i]["max"]), 2); m_dt.Rows[add_rowindex]["Total"]= dt.Rows[i]["con"]; m_dt.Rows[add_rowindex]["Class"] = dt.Rows[i]["GroupName"]; } for (int i = 0; i < dt.Rows.Count; i++) { if (Convert.ToInt32(dt.Rows[i]["TypeId"]) > 100) { continue; } int add_rowindex = gridView.Rows.Add(); gridView.Rows[add_rowindex].Cells[0].Value = add_rowindex + 1; int index = FLID.IndexOf(Convert.ToInt32(dt.Rows[i]["TypeId"])); if (index == -1) { index = 7; } string name = NameList[index]; //gridView.Rows[add_rowindex].Cells[1].Value = name; gridView.Rows[add_rowindex].Cells[1].Value = dt.Rows[i]["TypeName"]; gridView.Rows[add_rowindex].Cells[1].Style.BackColor = Color.Azure; string color = "#000000"; gridView.Rows[add_rowindex].Cells[2].Style.BackColor = DrawFunction.colorHx16toRGB(color); gridView.Rows[add_rowindex].Cells[3].Value = dt.Rows[i]["TypeId"]; gridView.Rows[add_rowindex].Cells[4].Value = Math.Round(Convert.ToDouble(dt.Rows[i]["max"]), 2); gridView.Rows[add_rowindex].Cells[4].Style.BackColor = Color.Azure; gridView.Rows[add_rowindex].Cells[5].Value = dt.Rows[i]["con"]; gridView.Rows[add_rowindex].Cells[5].Style.BackColor = Color.Azure; m_dt.Rows.Add(); m_dt.Rows[add_rowindex]["pname"] = dt.Rows[i]["TypeName"]; m_dt.Rows[add_rowindex]["TypeId"] = dt.Rows[i]["TypeId"]; m_dt.Rows[add_rowindex]["Largest"] = Math.Round(Convert.ToDouble(dt.Rows[i]["max"]), 2); m_dt.Rows[add_rowindex]["Total"] = dt.Rows[i]["con"]; m_dt.Rows[add_rowindex]["Class"] = dt.Rows[i]["GroupName"]; } DataTable dtp = particledata.GetParticleAll(filedAndParticl); string con = ""; if (condition != "") { con = condition; } else { //idx = m_ReportApp.m_DataMgrFun.GetPropIndexByPropItemName(m_ReportApp.SourceGridData.ConditionItemList, OTSIncAReportApp.OTSSampleReportInfo.OTS_REPORT_PROP_GRID_ITEMS.SIZE_CAL_METHOD_TYPE); con = source.GetPropItemDisplayValueByPropItemName(OTS_REPORT_PROP_GRID_ITEMS.SIZE_CAL_METHOD_TYPE).ToString(); } string po = ""; switch (con) { case "DMAX": po = "DMAX"; break; case "DMIN": po = "DMIN"; break; case "CIRCLE": po = "Area"; break; case "FERET": po = "DFERET"; break; } for (int i = 0; i < gridView.Rows.Count - 1; i++) { for (int j = 6; j < colid.Count; j++) { string d1 = colid[j].Split('~')[0]; string d2 = colid[j].Split('~')[1]; if (d2 == "MAX") { d2 = "999"; } DataRow[] datas = dtp.Select(getWhere(d2, d1, po, gridView.Rows[i].Cells[3].Value.ToString())); gridView.Rows[i].Cells[j].Value = datas.Count(); gridView.Rows[i].Cells[j].Style.BackColor = Color.Azure; m_dt.Rows[i][colid[j]]= datas.Count(); } } gridView.Columns[3].Visible = false; //设置grid默认值的样式,防止图像为空时有红x for (int i = 0; i < gridView.Columns.Count; i++) { gridView.Columns[i].DefaultCellStyle.NullValue = null; } gridView.Name = "gridView" + num.ToString(); SetDataGridViewStyle(gridView); panel1.Controls.Add(gridView); } /// /// 设置DataGridView样式 /// private void SetDataGridViewStyle(OTSGridView gridView) { //用户不能调整标题的高度 gridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing; //用户不能调整 行高 gridView.AllowUserToResizeRows = false; //改变行的高度; //gridView.RowTemplate.Height = 20; //点击选择整行 gridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; //居中显示 System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; gridView.DefaultCellStyle = dataGridViewCellStyle1; gridView.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; //再次重覆禁用拖动表头高度,居然有效果了 gridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing; //设置grid可以复制 gridView.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText; //设置每列的宽度 gridView.Columns[0].Width = 40;//第一列序号的宽度设置一下吧,要不太丑 gridView.Columns[1].Width = 200; //设置序号列不排序 gridView.Columns[0].SortMode = DataGridViewColumnSortMode.NotSortable; //设置序号列不可以设置宽度 gridView.Columns[0].Resizable = DataGridViewTriState.False; gridView.AllowUserToAddRows = false; gridView.AllowUserToDeleteRows = false; gridView.AllowUserToResizeRows = false; gridView.BackgroundColor = System.Drawing.SystemColors.ButtonHighlight; gridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; gridView.ContextMenuStrip = this.contextMenuStrip1; gridView.BorderStyle = 0; // gridView.Dock = System.Windows.Forms.DockStyle.Fill; gridView.Location = new System.Drawing.Point(0, gridheight); gridView.Margin = new System.Windows.Forms.Padding(2); gridView.MergeColumnHeaderBackColor = System.Drawing.SystemColors.ButtonHighlight; gridView.ReadOnly = true; gridView.RowHeadersVisible = false; gridView.RowHeadersWidth = 40; gridView.RowTemplate.Height = 30; gridView.Size = new System.Drawing.Size(gridView.ColumnCount * 100 + 60, gridView.RowCount * 30 + 30); gridheight = gridheight + gridView.RowCount * 30 + 80; gridView.TabIndex = 0; gridView.SortCompare += Gview_gz_SortCompare; gridView.Sorted += Gview_gz_Sorted; //先设置一下头的高度,否则会太矮不好看 gridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing; gridView.ColumnHeadersHeight = 40; } #endregion #region 窗体加载及初始化 public ParticlesSizeGrid() { InitializeComponent(); } /// /// 成份分布表,构造函数 /// /// 传入,委托类对象 /// 传入,项目管理类对象 public ParticlesSizeGrid(OTSIncAReportApp.frmReportApp ReportApp) { m_ReportApp = ReportApp; result = m_ReportApp.m_rstDataMgr.ResultFilesList[m_ReportApp.m_rstDataMgr.GetWorkingResult()]; source = m_ReportApp.m_conditionChoose.m_SourceGridData; InitializeComponent(); //国际化 lan = new Language(this); table = lan.GetNameTable(this.Name); } private void ParticlesSizeGrid_Load(object sender, EventArgs e) { //int idx = m_ReportApp.m_DataMgrFun.GetPropIndexByPropItemName(m_ReportApp.SourceGridData.ConditionItemList, OTSIncAReportApp.OTSSampleReportInfo.OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE); //string sou = m_ReportApp.SourceGridData.ConditionItemList[idx].itemVal.ToString(); string sou = source.GetPropItemDisplayValueByPropItemName(OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE).ToString(); if (sou.Contains("+")) { for (int i = 0; i < sou.Split('+').Length; i++) { OTSIncAReportApp.DataOperation.Model.ResultFile resultFile = m_ReportApp.m_rstDataMgr.ResultFilesList.Find(s => s.FileName == sou.Split('+')[i]); if (resultFile != null) { BindDataGridView(resultFile.FilePath, i, resultFile.FileName); } } } else { BindDataGridView(m_ReportApp.m_rstDataMgr.ResultFilesList[m_ReportApp.m_rstDataMgr.GetWorkingResult()].FilePath, 0, m_ReportApp.m_rstDataMgr.ResultFilesList[m_ReportApp.m_rstDataMgr.GetWorkingResult()].FileName); } } #endregion #region 相关事件 private void ToolStripMenuItem1_Click(object sender, EventArgs e) { //复制整个表 CopyAll(); } private void ToolStripMenuItem2_Click(object sender, EventArgs e) { CopySelected(); } /// /// 复制选择区域 /// public void CopySelected() { foreach (var item in panel1.Controls) { if (item.GetType().ToString() == "OTSGridView") { //复制选择区域 object oo = ((OTSGridView)item).GetClipboardContent(); Clipboard.SetDataObject(((OTSGridView)item).GetClipboardContent()); } } } /// /// 复制所有 /// public void CopyAll() { foreach (var item in panel1.Controls) { if (item.GetType().ToString() == "OTSGridView") { ((OTSGridView)item).SelectAll(); Clipboard.SetDataObject(((OTSGridView)item).GetClipboardContent()); } } } private void ToolStripMenuItem3_Click(object sender, EventArgs e) { foreach (var item in panel1.Controls) { if (item.GetType().ToString() == "OTSGridView") { panel1.Controls.Remove((OTSGridView)item); } } gridheight = 0; //int idx = m_ReportApp.m_DataMgrFun.GetPropIndexByPropItemName(m_ReportApp.SourceGridData.ConditionItemList, OTSIncAReportApp.OTSSampleReportInfo.OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE); //string sou = m_ReportApp.SourceGridData.ConditionItemList[idx].itemVal.ToString(); string sou = source.GetPropItemDisplayValueByPropItemName(OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE).ToString(); if (sou.Contains("+")) { for (int i = 0; i < sou.Split('+').Length; i++) { OTSIncAReportApp.DataOperation.Model.ResultFile resultFile = m_ReportApp.m_rstDataMgr.ResultFilesList.Find(s => s.FileName == sou.Split('+')[i]); if (resultFile != null) { BindDataGridView(resultFile.FilePath, i, resultFile.FileName); } } } else { BindDataGridView(m_ReportApp.m_rstDataMgr.ResultFilesList[m_ReportApp.m_rstDataMgr.GetWorkingResult()].FilePath, 0, m_ReportApp.m_rstDataMgr.ResultFilesList[m_ReportApp.m_rstDataMgr.GetWorkingResult()].FileName); } } private void Gview_gz_SortCompare(object sender, DataGridViewSortCompareEventArgs e) { //排序中 if (((OTSGridView)sender).Rows[e.RowIndex1].Tag != null && ((OTSGridView)sender).Rows[e.RowIndex1].Tag.ToString() == "统计行") { //ROW1>ROW2 e.SortResult = 1; if (((OTSGridView)sender).SortOrder == SortOrder.Descending) e.SortResult = -1; e.Handled = true; return; } if (((OTSGridView)sender).Rows[e.RowIndex2].Tag != null && ((OTSGridView)sender).Rows[e.RowIndex2].Tag.ToString() == "统计行") { //ROW1 /// 获取到该模块输出后形成的DataTable,和GridView /// /// /// public void GetDataTableAndGridView(out DataTable out_dt, out DataGridView out_dg) { out_dt = m_dt; out_dg = null; foreach (var item in panel1.Controls) { if (item.GetType().ToString() == "OTSGridView") { out_dg = ((OTSGridView)item); } } } #endregion } }