using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Windows.Forms; using CoreFS.CA06; using Core.Mes.Client.Comm.Tool; using System.Reflection; using Infragistics.Win.UltraWinGrid; using Core.Mes.Client.Comm.Control; namespace Core.StlMes.Client.YdmStuffManage { public partial class QcmJhyElementsCtrl : UserControl { private JudgeType _judgeType; private Dal _d; /// /// /// /// /// /// 判定类型:0-炼钢 1-铸造 2-轧管 8-综合 public QcmJhyElementsCtrl(Control container, OpeBase ob, JudgeType judgeType) { InitializeComponent(); _judgeType = judgeType; _d = new Dal(ob); container.Controls.Add(this); this.Dock = DockStyle.Fill; this.BringToFront(); EntityHelper.ShowGridCaption(ultraGrid1.DisplayLayout.Bands[0]); } private List _craftDesignStdCicList = new List(); private List _jhyElementsList = new List(); public void QueryCraftResultByStoveNo(string stoveNo, string judgeStoveNo, DataTable dtCraftCic, string processCode,string cic) { _jhyElementsList = _d.GetEntitysByXmlId("QcmJhyElementsDAL.queryByStoveNo", processCode, stoveNo); _craftDesignStdCicList.Clear(); if (dtCraftCic.Rows.Count == 0) { _craftDesignStdCicList = _d.GetEntitysByXmlId("QcmGpJugdeApplyDAL.queryApplyChemByJudgeStoveNo", judgeStoveNo); } else { foreach (DataRow drCraftCic in dtCraftCic.Rows) { var tmpCraftDesignStdCicList = _d.GetEntitysByXmlId("QcmJhyElementsDAL.queryCraftResultCic", drCraftCic["desginKey"].ToString(), drCraftCic["mscPline"].ToString(), processCode, cic, new string[] { "0", "1", "2" }); foreach (CraftOrdDesignStdCicEntity craftCic in tmpCraftDesignStdCicList) { _craftDesignStdCicList.Add(craftCic); } } } _craftDesignStdCicList.Sort(new ChemSeqCompare()); InitGrid(); } public void SteelMakingColligateQuery(string judgeStoveNo, DataTable dtCraftCic, string processCode) { _jhyElementsList = _d.GetEntitysByXmlId("QcmJhyElementsDAL.steelMakingColligateQuery", judgeStoveNo); _craftDesignStdCicList.Clear(); if (dtCraftCic.Rows.Count == 0) { _craftDesignStdCicList = _d.GetEntitysByXmlId("QcmGpJugdeApplyDAL.queryApplyChemByJudgeStoveNo", judgeStoveNo); } else { foreach (DataRow drCraftCic in dtCraftCic.Rows) { var tmpCraftDesignStdCicList = _d.GetEntitysByXmlId("QcmJhyElementsDAL.queryCraftResultCic", drCraftCic["desginKey"].ToString(), drCraftCic["mscPline"].ToString(), processCode, drCraftCic["cic"].ToString(), new string[] { "0", "1", "2" }); foreach (CraftOrdDesignStdCicEntity craftCic in tmpCraftDesignStdCicList) { _craftDesignStdCicList.Add(craftCic); } } } _craftDesignStdCicList.Sort(new ChemSeqCompare()); InitGrid(); } public void QueryCraftResultByJudgeStoveNo(string judgeStoveNo, string designKey, string mscPline, string processCode, string cic) { _jhyElementsList = _d.GetEntitysByXmlId("QcmJhyElementsDAL.queryByJudgeStoveNo", processCode, judgeStoveNo); _craftDesignStdCicList = _d.GetEntitysByXmlId("QcmJhyElementsDAL.queryCraftResultCic", designKey, mscPline, processCode, cic, new string[] { "0", "1", "2" }); InitGrid(); } private DataTable _dtBaseChem = null; private Dictionary rounds = new Dictionary(); private void InitGrid() { try { ultraGrid1.DisplayLayout.Rows.FixedRows.Clear(); ultraGrid1.DataSource = null; //查询圆整位数 _dtBaseChem = _d.GetTableByXmlId("JdgComBaseChem.queryRound"); rounds.Clear(); foreach (DataRow drBaseChem in _dtBaseChem.Rows) { rounds.Add(drBaseChem["chemName"].ToString(), drBaseChem["roundingDigits"].ToString()); } // //先赋值 // foreach (var craftCic in _craftDesignStdCicList) // { // //替代元素 //string express = ""; //string round = "2"; //foreach(DataRow drBaseChem in _dtBaseChem.Rows){ // if(drBaseChem["chemName"].ToString() == craftCic.ChemName){ // round = drBaseChem["roundingDigits"].ToString(); // break; // } //} //if(craftCic.RepName != "" && craftCic.RepVal != "" && !craftCic.RepVal.TryParseDecimal()){ // express = FillJhyElemetValue(craftCic.RepVal, _jhyElementsEntity, craftDesingStdCicN, false); // craftDesingStdCicN.setRepVal(chemCaculat(express, round)); //} //if (craftDesingStdCicN.getComplexType().equals("1")) { // //标准元素 // if(!craftDesingStdCicN.getStdmin().equals("")){ // express = FillJhyElemetValue(craftDesingStdCicN.getStdmin(), jhyElementsEntity, craftDesingStdCicN, false); // craftDesingStdCicN.setStdmin(chemCaculat(express, round)); // } // if(!craftDesingStdCicN.getStdmax().equals("")){ // express = FillJhyElemetValue(craftDesingStdCicN.getStdmax(), jhyElementsEntity, craftDesingStdCicN, false); // craftDesingStdCicN.setStdmax(chemCaculat(express, round)); // } //} //if (craftDesingStdCicN.getChemType().equals("A")) { // String fieldName = craftDesingStdCicN.getChemName(); // if(fieldName.equals("As")){ // fieldName = "Asn"; // } // String value = EntityTool.getValue(jhyElementsEntity, fieldName); // jhyResults.put(craftDesingStdCicN.getChemName(), value); //} else { // round = "2"; // for(ComBaseChemEntity baseChem : baseChems){ // if(baseChem.getChemName().equals(craftDesingStdCicN.getChemName())){ // round = baseChem.getRoundingDigits(); // break; // } // } // express = craftDesingStdCicN.getChemFormula(); // express = FillJhyElemetValue(express, jhyElementsEntity, craftDesingStdCicN, true); // String value = chemCaculat(express, round); // jhyResults.put(craftDesingStdCicN.getChemName(), value); //} // } DataTable dt = CreateDataTable(_craftDesignStdCicList); //添加检化验数据 foreach (QcmJhyElementsEntity jhyElement in _jhyElementsList) { //var row = ultraGrid1.DisplayLayout.Bands[0].AddNew(); //foreach(var cell in row.Cells) //{ // string key = cell.Column.Key; // string round = "2"; // foreach (DataRow drBaseChem in _dtBaseChem.Rows) // { // if (drBaseChem["chemName"].ToString() == key) // { // round = drBaseChem["roundingDigits"].ToString(); // break; // } // } // if(cell.Column.Key != cell.Column.Header.Caption) // { // cell.Value = EntityHelper.GetEntityPropertyValue(jhyElement, key); // } // else // { // var craftDesignStdCic = _craftDesignStdCicList.Where( // a => a.SpeclFl == "2" && a.ChemName == key).FirstOrDefault(); // if (craftDesignStdCic == null) continue; // if (craftDesignStdCic.ChemType == "B") // { // cell.Value = FillJhyElemetValue(craftDesignStdCic.ChemFormula, jhyElement, craftDesignStdCic, true); // cell.Value = ChemCaculat(cell.Value.ToString(), round); // } // else // { // string columnName = key; // if (columnName == "As") // { // columnName = "Asn"; // } // cell.Value = EntityHelper.GetEntityPropertyValue(jhyElement, columnName); // } // } //} DataRow dr = dt.NewRow(); foreach (DataColumn column in dt.Columns) { if (column.ColumnName != column.Caption) { dr[column.ColumnName] = EntityHelper.GetEntityPropertyValue(jhyElement, column.ColumnName); } else { var craftDesignStdCic = _craftDesignStdCicList.Where(a => a.SpeclFl == "2" && a.ChemName == column.ColumnName).FirstOrDefault(); if (craftDesignStdCic == null) //优先使用内控,没有则用MSC0->MSCn { craftDesignStdCic = _craftDesignStdCicList.Where(a => a.SpeclFl == "0" && a.ChemName == column.ColumnName).FirstOrDefault(); if (craftDesignStdCic == null) { craftDesignStdCic = _craftDesignStdCicList.Where(a => a.SpeclFl == "1" && a.ChemName == column.ColumnName).FirstOrDefault(); if (craftDesignStdCic == null) { continue; } } } ////处理替代元素 //if (craftDesignStdCic.RepName != "" && craftDesignStdCic.RepVal != "" && !craftDesignStdCic.RepVal.TryParseDecimal()) //{ // string express = FillJhyElemetValue(craftDesignStdCic.RepVal, jhyElement, craftDesignStdCic, false); // craftDesingStdCicN.setRepVal(chemCaculat(express, round)); //} if (craftDesignStdCic.ChemType == "B") { string express = FillJhyElemetValue(craftDesignStdCic.ChemFormula, jhyElement, craftDesignStdCic, true); dr[column.ColumnName] = ChemCaculat(express, rounds[column.ColumnName]); } else { string columnName = column.ColumnName; if (columnName == "As") { columnName = "Asn"; } dr[column.ColumnName] = EntityHelper.GetEntityPropertyValue(jhyElement, columnName); } } } dt.Rows.Add(dr); } ultraGrid1.BeginUpdate(); ultraGrid1.DataSource = dt; ultraGrid1.DataBind(); ultraGrid1.DisplayLayout.Override.FixedRowSortOrder = FixedRowSortOrder.FixOrder; ultraGrid1.DisplayLayout.Override.FixedRowAppearance.BackColor = Color.FromArgb(255, 250, 240); ultraGrid1.DisplayLayout.Rows.FixedRows.Add(ultraGrid1.DisplayLayout.Rows[0]); ultraGrid1.DisplayLayout.Rows.FixedRows.Add(ultraGrid1.DisplayLayout.Rows[1]); ultraGrid1.DisplayLayout.Rows.FixedRows.Add(ultraGrid1.DisplayLayout.Rows[2]); ultraGrid1.DisplayLayout.Rows.FixedRows.Add(ultraGrid1.DisplayLayout.Rows[3]); ultraGrid1.DisplayLayout.Rows.FixedRows.Add(ultraGrid1.DisplayLayout.Rows[4]); ultraGrid1.DisplayLayout.Rows.FixedRows.Add(ultraGrid1.DisplayLayout.Rows[5]); //显示复合元素字段 foreach (var column in ultraGrid1.DisplayLayout.Bands[0].Columns) { var craftDesignStdCic = _craftDesignStdCicList.Where( a => a.ChemName == column.Key).FirstOrDefault(); if (craftDesignStdCic != null && craftDesignStdCic.ChemType == "B") { column.Header.Appearance.BackColor = Color.FromArgb(189, 183, 107); column.Header.ToolTipText = craftDesignStdCic.ChemFormula; } } //绑定工艺评审记录到标准中 foreach (var row in ultraGrid1.Rows) { if (row.Fixed) { string speclFl = ""; if (row.Index == 0 || row.Index == 1) { speclFl = "0"; } else if (row.Index == 2 || row.Index == 3) { speclFl = "1"; } else { speclFl = "2"; } foreach (var cell in row.Cells) { var craftDesignStdCics = _craftDesignStdCicList.Where( a => a.SpeclFl == speclFl && a.ChemName == cell.Column.Key).ToArray(); cell.Tag = craftDesignStdCics; } } else { int cnt601F = _jhyElementsList.Where(a => a.SampleNo.StartsWith("601F")).Count(); int cnt602F = _jhyElementsList.Where(a => a.SampleNo.StartsWith("602F")).Count(); int cnt603F = _jhyElementsList.Where(a => a.SampleNo.StartsWith("603F")).Count(); if (row.GetValue("assayNo").Split('_')[1] == "601" && cnt601F > 0) { row.Appearance.BackColor = Color.Gray; } if (row.GetValue("assayNo").Split('_')[1] == "602" && cnt602F > 0) { row.Appearance.BackColor = Color.Gray; } if (row.GetValue("assayNo").Split('_')[1] == "603" && cnt603F > 0) { row.Appearance.BackColor = Color.Gray; } } } if (ultraGrid1.Rows.Count >= 7) { ultraGrid1.Rows[6].Activate(); } GridHelper.RefreshAndAutoSize(ultraGrid1); } finally { ultraGrid1.EndUpdate(); } } private DataTable CreateDataTable(List craftDesignStdCicList) { DataTable dt = new DataTable(); //new DataColumn[] {new DataColumn("Chk"){Caption = "选择", DataType = typeof(bool)}, dt.Columns.AddRange(new DataColumn[] { new DataColumn("Assayno"){Caption = "成分化验号"}, new DataColumn("StoveNo"){Caption = "熔炼炉号"}}); foreach (CraftOrdDesignStdCicEntity stdCicEntity in craftDesignStdCicList) { if (dt.Columns.Contains(stdCicEntity.ChemName)) continue; dt.Columns.Add(new DataColumn(stdCicEntity.ChemName)); } //添加国家标准 var craftDesingStdCicG = craftDesignStdCicList.Where(a => a.SpeclFl == "0"); DataRow dr = GetJhyElementsByCraft(craftDesingStdCicG.ToList(), dt, "1"); dr["Assayno"] = "MSC0上限"; if (craftDesingStdCicG.Count() > 0) { foreach (var groupRow in craftDesingStdCicG.GroupBy(a => a.Cic)) { if (dr["StoveNo"].ToString() == "") { dr["StoveNo"] = groupRow.Key; } else { dr["StoveNo"] += "," + groupRow.Key; } } } var craftDesingStdCicG2 = craftDesignStdCicList.Where(a => a.SpeclFl == "0"); dr = GetJhyElementsByCraft(craftDesingStdCicG2.ToList(), dt, "2"); dr["Assayno"] = "MSC0下限"; if (craftDesingStdCicG2.Count() > 0) { foreach (var groupRow in craftDesingStdCicG2.GroupBy(a => a.Cic)) { if (dr["StoveNo"].ToString() == "") { dr["StoveNo"] = groupRow.Key; } else { dr["StoveNo"] += "," + groupRow.Key; } } } //添加客户标准 var craftDesingStdCicA = craftDesignStdCicList.Where(a => a.SpeclFl == "1"); dr = GetJhyElementsByCraft(craftDesingStdCicA.ToList(), dt, "1"); dr["Assayno"] = "MSC(n)上限"; if (craftDesingStdCicA.Count() > 0) { foreach (var groupRow in craftDesingStdCicA.GroupBy(a => a.Cic)) { if (dr["StoveNo"].ToString() == "") { dr["StoveNo"] = groupRow.Key; } else { dr["StoveNo"] += "," + groupRow.Key; } } } var craftDesingStdCicA2 = craftDesignStdCicList.Where(a => a.SpeclFl == "1"); dr = GetJhyElementsByCraft(craftDesingStdCicA2.ToList(), dt, "2"); dr["Assayno"] = "MSC(n)下限"; if (craftDesingStdCicA2.Count() > 0) { foreach (var groupRow in craftDesingStdCicA2.GroupBy(a => a.Cic)) { if (dr["StoveNo"].ToString() == "") { dr["StoveNo"] = groupRow.Key; } else { dr["StoveNo"] += "," + groupRow.Key; } } } //添加内控标准 var craftDesingStdCicN = craftDesignStdCicList.Where(a => a.SpeclFl == "2"); dr = GetJhyElementsByCraft(craftDesingStdCicN.ToList(), dt, "1"); dr["Assayno"] = "内控标准上限"; if (craftDesingStdCicN.Count() > 0) { foreach (var groupRow in craftDesingStdCicN.GroupBy(a => a.Cic)) { if (dr["StoveNo"].ToString() == "") { dr["StoveNo"] = groupRow.Key; } else { dr["StoveNo"] += "," + groupRow.Key; } } } var craftDesingStdCicN2 = craftDesignStdCicList.Where(a => a.SpeclFl == "2"); dr = GetJhyElementsByCraft(craftDesingStdCicN2.ToList(), dt, "2"); dr["Assayno"] = "内控标准下限"; if (craftDesingStdCicN2.Count() > 0) { foreach (var groupRow in craftDesingStdCicN2.GroupBy(a => a.Cic)) { if (dr["StoveNo"].ToString() == "") { dr["StoveNo"] = groupRow.Key; } else { dr["StoveNo"] += "," + groupRow.Key; } } } return dt; } private DataRow GetJhyElementsByCraft(List craftDesingStdCics, DataTable dt, string flag) { try { DataRow dr = dt.NewRow(); if (craftDesingStdCics.Count() == 0) { foreach (CraftOrdDesignStdCicEntity stdCicEntity in craftDesingStdCics) { foreach (DataColumn column in dt.Columns) { if (column.ColumnName == stdCicEntity.ChemName) { dr[column.ColumnName] = ""; } } } } else { foreach (DataColumn column in dt.Columns) { var chems = craftDesingStdCics.Where(a => a.ChemName == column.ColumnName); if (chems.Count() == 0) continue; if (flag == "1") { //多个索引码 上限值取最小 if (chems.Where(a => a.Stdmax != "").Count() == 0) continue; if (chems.Where(a => a.Stdmax != "" && a.Stdmax.TryParseDecimal()).Count() > 0) { string minStdMax = ""; string stdMaxSign = ""; foreach (var chem in chems.Where(a => a.Stdmax != "" && a.Stdmax.TryParseDecimal())) { if (minStdMax == "" || decimal.Parse(chem.Stdmax) < decimal.Parse(minStdMax)) { minStdMax = chem.Stdmax; stdMaxSign = chem.StdmaxSign; } } dr[column.ColumnName] = JudgeHelper.GetExpress("", "", stdMaxSign, minStdMax); } else { dr[column.ColumnName] = chems.FirstOrDefault().Stdmax; } } else { //多个索引码下限值取最大 if (chems.Where(a => a.Stdmin != "").Count() == 0) continue; if (chems.Where(a => a.Stdmin != "" && a.Stdmin.TryParseDecimal()).Count() > 0) { string maxStdmin = ""; string stdminSign = ""; foreach (var chem in chems.Where(a => a.Stdmin != "" && a.Stdmin.TryParseDecimal())) { if (maxStdmin == "" || decimal.Parse(chem.Stdmin) > decimal.Parse(maxStdmin)) { maxStdmin = chem.Stdmin; stdminSign = chem.StdminSign; } } dr[column.ColumnName] = JudgeHelper.GetExpress(stdminSign, maxStdmin, "", ""); } else { dr[column.ColumnName] = chems.FirstOrDefault().Stdmin; } } } } dt.Rows.Add(dr); return dr; } catch (Exception ex) { return null; } } private string _tipMsg = ""; public string TipMsg { get { return _tipMsg; } set { _tipMsg = value; } } private void ultraGrid1_AfterRowActivate(object sender, EventArgs e) { try { this.Cursor = Cursors.WaitCursor; ultraGrid1.BeginUpdate(); DataRowView dataRow = (DataRowView)ultraGrid1.ActiveRow.ListObject; if (dataRow["ASSAYNO"].ToString().Contains("限")) { return; } _tipMsg = ""; GridActiveDele(); } finally { ultraGrid1.EndUpdate(); this.Cursor = Cursors.Default; } } private void GridActiveDele() { Color yellow = Color.FromArgb(238, 238, 0); Color red = Color.FromArgb(255, 106, 106); Color green = Color.FromArgb(60, 179, 113); Color gray = Color.FromArgb(205, 201, 201); foreach (UltraGridRow row in ultraGrid1.DisplayLayout.Rows.FixedRows) { //if (!row.GetValue("ASSAYNO").Contains("内控")) continue; foreach (UltraGridCell cell in row.Cells) { if (cell.Column.Key != cell.Column.Header.Caption) continue; CraftOrdDesignStdCicEntity[] stdCics = (CraftOrdDesignStdCicEntity[])cell.Tag; if (stdCics.Length == 0) continue; var actRow = ultraGrid1.ActiveRow; CraftOrdDesignStdCicEntity[] calStdCics = GetCalStdCics(stdCics, ultraGrid1.ActiveRow); //合并后的加严标准 CraftOrdDesignStdCicEntity stdCic = EntityHelper.CopyEntity(calStdCics[0]); foreach (CraftOrdDesignStdCicEntity calStdCic in calStdCics) { //取检、判、报 if (calStdCic.Ischeck != "") { stdCic.Ischeck = calStdCic.Ischeck; } if (calStdCic.Isjudge != "") { stdCic.Isjudge = calStdCic.Isjudge; } if (calStdCic.Isquote != "") { stdCic.Isquote = calStdCic.Isquote; } //取最严的标准上下限 decimal min = stdCic.Stdmin == "" ? 0M : decimal.Parse(stdCic.Stdmin); decimal calMin = calStdCic.Stdmin == "" ? 0M : decimal.Parse(calStdCic.Stdmin); if (calMin > min) { stdCic.Stdmin = calStdCic.Stdmin; } decimal max = stdCic.Stdmax == "" ? 999999M : decimal.Parse(stdCic.Stdmax); decimal calMax = calStdCic.Stdmax == "" ? 999999M : decimal.Parse(calStdCic.Stdmax); if (calMax < max) { stdCic.Stdmax = calStdCic.Stdmax; } //取限制元素 if (calStdCic.EleName != "") { stdCic.EleName = calStdCic.EleName; } } //foreach (var stdCic in stdCics) //{ // if (row.Index % 2 == 0) // { // expresss = FillJhyElemetValue(stdCic.Stdmax, jhyElement, stdCic, false); // expresss = stdCic.StdmaxSign + ChemCaculat(expresss, round); // } // else // { // expresss = FillJhyElemetValue(stdCic.Stdmin, jhyElement, stdCic, false); // expresss = stdCic.StdminSign + ChemCaculat(expresss, round); // } //} string activeValue = ultraGrid1.GetActiveRowValue(cell.Column.Key); //activeValue = activeValue.TrimStart('-'); //负号表示小于某个值。 if (stdCic.Isjudge == "0") { if (stdCic.Isquote == "0") { continue; } else { if (activeValue == "") { cell.Appearance.BackColor = yellow; } else { cell.Appearance.BackColor = gray; } continue; } } if (cell.Value.ToString() == "") continue; //限制元素处理(如果不符合限制元素则不判定) string expresss = ""; string strEval = ""; bool checkResult = false; if (row.Index == 4 || row.Index == 5) { if (stdCic.EleMinSign != "") { expresss = stdCic.EleMinSign + stdCic.EleMin; strEval = (ultraGrid1.GetActiveRowValue(stdCic.EleName) + expresss).Eval(); if (bool.TryParse(strEval, out checkResult) && !checkResult) { cell.Column.Hidden = true; continue; } else { cell.Column.Hidden = false; } } if (stdCic.EleMaxSign != "") { expresss = stdCic.EleMaxSign + stdCic.EleMax; strEval = (ultraGrid1.GetActiveRowValue(stdCic.EleName) + expresss).Eval(); if (bool.TryParse(strEval, out checkResult) && !checkResult) { cell.Column.Hidden = true; continue; } else { cell.Column.Hidden = false; } } } //if (stdCic.ComplexType == "0") //{ // expresss = cell.Value.ToString(); //} //else //{ // var jhyElement = _jhyElementsList.Where(a => a.Assayno == ultraGrid1.GetActiveRowValue("Assayno")).FirstOrDefault(); // string round = "2"; // if (rounds.ContainsKey(cell.Column.Key)) // { // round = rounds[cell.Column.Key]; // } // if(row.Index % 2 == 0) // { // expresss = FillJhyElemetValue(stdCic.Stdmax, jhyElement, stdCic, false); // expresss = stdCic.StdmaxSign + ChemCaculat(expresss, round); // } // else // { // expresss = FillJhyElemetValue(stdCic.Stdmin, jhyElement, stdCic, false); // expresss = stdCic.StdminSign + ChemCaculat(expresss, round); // } // cell.Value = expresss; //} if (stdCic.ComplexType == "0") { expresss = cell.Value.ToString(); } else { var jhyElement = _jhyElementsList.Where(a => a.Assayno == ultraGrid1.GetActiveRowValue("Assayno")).FirstOrDefault(); if (row.Index % 2 == 0) { expresss = FillJhyElemetValue(stdCic.Stdmax, jhyElement, stdCic, false); expresss = stdCic.StdmaxSign + ChemCaculat(expresss, rounds[cell.Column.Key]); } else { expresss = FillJhyElemetValue(stdCic.Stdmin, jhyElement, stdCic, false); expresss = stdCic.StdminSign + ChemCaculat(expresss, rounds[cell.Column.Key]); } cell.Value = expresss; } strEval = (activeValue + expresss).Eval(); if (activeValue == "" || !bool.TryParse(strEval, out checkResult) || !checkResult) { string tipMsg = string.Format("成分化验号:{0}中的{1}不符合内控标准!", ultraGrid1.GetActiveRowValue("ASSAYNO"), cell.Column.Key); if (_tipMsg == "") { _tipMsg = tipMsg; } cell.Appearance.BackColor = red; } else { cell.Appearance.BackColor = green; } } } if (_tipMsg == "") { _tipMsg = "无"; } ultraGrid1.UpdateData(); } /// /// 获取计算好的标准上下限 /// /// /// /// /// private CraftOrdDesignStdCicEntity[] GetCalStdCics(CraftOrdDesignStdCicEntity[] stdCics, UltraGridRow row) { CraftOrdDesignStdCicEntity[] calStdCics = new CraftOrdDesignStdCicEntity[stdCics.Length]; String express = ""; var jhyElement = _jhyElementsList.Where(a => a.Assayno == row.GetValue("Assayno")).FirstOrDefault(); for (int i = 0; i < stdCics.Length; i++) { calStdCics[i] = EntityHelper.CopyEntity(stdCics[i]); if (stdCics[i].RepName != "" && stdCics[i].RepVal != "" && stdCics[i].RepVal.TryParseDecimal()) { express = FillJhyElemetValue(stdCics[i].RepVal, jhyElement, stdCics[i], false); calStdCics[i].RepVal = ChemCaculat(express, rounds[stdCics[i].RepName]); } if (stdCics[i].ComplexType == "1") { //标准元素 if (stdCics[i].Stdmin != "") { express = FillJhyElemetValue(stdCics[i].Stdmin, jhyElement, stdCics[i], false); calStdCics[i].Stdmin = ChemCaculat(express, rounds[stdCics[i].ChemName]); } if (stdCics[i].Stdmax != "") { express = FillJhyElemetValue(stdCics[i].Stdmax, jhyElement, stdCics[i], false); calStdCics[i].Stdmax = ChemCaculat(express, rounds[stdCics[i].ChemName]); } } //暂时随便取一个复合元素值(不同CIC对应的替代元素可能不一样) if (stdCics[i].ChemType == "B") { express = stdCics[i].ChemFormula; express = FillJhyElemetValue(express, jhyElement, stdCics[i], true); string value = ChemCaculat(express, rounds[stdCics[i].ChemName]); row.Cells[stdCics[i].ChemName].Value = value; } } return calStdCics; } //private CraftOrdDesignStdCicEntity getMergeStdCic(CraftOrdDesignStdCicEntity[] stdCics, int rowIndex, string assayNo) //{ // if (stdCics.Length == 0) return null; // CraftOrdDesignStdCicEntity mergeStdCic = new CraftOrdDesignStdCicEntity(); // if (stdCics[0].ComplexType == "0") // { // foreach (var stdCic in stdCics) // { // mergeStdCic // } // } // _jhyElementsList.Where(a => a.Assayno == ultraGrid1.GetActiveRowValue("Assayno")).FirstOrDefault(); // CraftOrdDesignStdCicEntity mergeStdCic = new CraftOrdDesignStdCicEntity(); // foreach (var stdCic in stdCics) // { // string value = ""; // string stdSign = ""; // if (rowIndex % 2 == 0) // { // value = FillJhyElemetValue(stdCic.Stdmax, jhyElement, stdCic, false); // expresss = stdCic.StdmaxSign + ChemCaculat(expresss, round); // } // else // { // expresss = FillJhyElemetValue(stdCic.Stdmin, jhyElement, stdCic, false); // expresss = stdCic.StdminSign + ChemCaculat(expresss, round); // } // } //} //private List GetExpressValue(CraftOrdDesignStdCicEntity stdCic, QcmJhyElementsEntity jhyElement) //{ // List expresss = new List(); // if (stdCic.Stdmin != "") // { // string express = ""; // express = stdCic.Stdmin; // express = FillJhyElemetValue(express, jhyElement, stdCic.ChemName); // express = stdCic.StdminSign + express; // expresss.Add(express); // } // if(stdCic.Stdmax != "") // { // string express = ""; // express = stdCic.Stdmax; // express = FillJhyElemetValue(express, jhyElement, stdCic.ChemName); // express = stdCic.StdmaxSign + express; // expresss.Add(express); // } // return expresss; //} //private string GetChemFormulaValue(CraftOrdDesignStdCicEntity stdCic, // List craftDesignStdCicList, UltraGrid jhyElementGrid) //{ // string chemFormula = stdCic.ChemFormula; // chemFormula = FillJhyElemetValue(chemFormula, craftDesignStdCicList, jhyElementGrid); // return chemFormula.CompileFormula().ToString2(); //} private static string ChemCaculat(string express, string round) { string strValue = JudgeHelper.Eval(express); if (!strValue.TryParseDecimal()) { return strValue; } double value = Math.Abs(double.Parse(strValue)); return Math.Round(value, int.Parse(round)).ToString("F" + round); } private string FillJhyElemetValue(string express, QcmJhyElementsEntity jhyElement, CraftOrdDesignStdCicEntity stdCic, bool isMultiChem) { var properties = jhyElement.GetType().GetProperties(); Array.Sort(properties, new MyCompare()); //复合元素处理 foreach (var property in properties) { string replaceName = property.Name; if (property.Name == "Asn") { replaceName = "As"; } if (express.Contains(replaceName)) { string value = property.GetValue(jhyElement, null).ToString2(); value = value.TrimStart('-'); if (isMultiChem) { if (stdCic.RepName == replaceName && stdCic.RepVal != "") { String repExpress = ""; bool repResult = true; bool evalResult = false; if (stdCic.RepMinSign != "") { repExpress = stdCic.RepMinSign + stdCic.RepMin; if (bool.TryParse(JudgeHelper.Eval(value + repExpress), out evalResult) && !evalResult) { repResult = false; } } if (stdCic.RepMaxSign != "") { repExpress = stdCic.RepMaxSign + stdCic.RepMax; if (bool.TryParse(JudgeHelper.Eval(value + repExpress), out evalResult) && !evalResult) { repResult = false; } } if (repResult) { string repVal = FillJhyElemetValue(stdCic.RepVal, jhyElement, stdCic, false).Eval(); value = repVal; } } } if (value != "") { express = express.Replace(replaceName, value); } } } return express; } /// /// 从长到短排序, 这样就不会替换元素错误, 比如 S和Sn。 /// private class MyCompare : IComparer { public int Compare(PropertyInfo x, PropertyInfo y) { if (x.Name.Length < y.Name.Length) { return 1; } else if (x.Name.Length > y.Name.Length) { return -1; } else { return 0; } } } private class ChemSeqCompare : IComparer { public int Compare(CraftOrdDesignStdCicEntity x, CraftOrdDesignStdCicEntity y) { if (decimal.Parse(x.ChemSeq) < decimal.Parse(y.ChemSeq)) { return -1; } else if (decimal.Parse(x.ChemSeq) > decimal.Parse(y.ChemSeq)) { return 1; } else { return 0; } } } private void ultraGrid1_CellChange(object sender, CellEventArgs e) { ultraGrid1.UpdateData(); } public void ClearData() { ultraGrid1.DataSource = null; } private void ultraGrid1_AfterSortChange(object sender, BandEventArgs e) { GridHelper.RefreshAndAutoSize(ultraGrid1); } private void ultraGrid1_BeforeRowDeactivate(object sender, CancelEventArgs e) { var a = Cursor.Position; var b = Control.MousePosition; var element = ultraGrid1.DisplayLayout.UIElement.ElementFromPoint(ultraGrid1.PointToClient(a)); if (element == null) return; var row = (UltraGridRow)element.GetContext(typeof(UltraGridRow)); if (row != null && row.Fixed) { e.Cancel = true; } } } }