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 Core.Mes.Client.Comm.Control; using Core.Mes.Client.Comm.Server; using CoreFS.CA06; using Infragistics.Win; using Infragistics.Win.UltraWinGrid; namespace Core.StlMes.Client.LgCommon.公共自定义控件.化学成分 { public partial class ucNewChemelEment : UserControl { public ucNewChemelEment() { InitializeComponent(); //ClsControlPack.SetUltraGridAppearance(this); } public void SetData(string StoveNo, string Pline, LG_PROCESS Process, string CraftNo, OpeBase ob) { RefreshData(StoveNo, Pline, Process, CraftNo, ob); ClsControlPack.RefreshAndAutoSize(ulgridElement); ClsControlPack.SetReadOnly(ulgridElement); ulgridElement.DisplayLayout.Bands[0].Columns[0].CellAppearance.FontData.Bold = DefaultableBoolean.True; } public void RefreshData(string StoveNo, string Pline, LG_PROCESS Process, string CraftNo, OpeBase ob) { DataTable dt = ServerHelper.GetData("Core.LgMes.Server.LgDeviceManager.StlChemical.GetStlChemicalStd", new object[] {CraftNo}, ob); dtChem.Rows.Clear(); foreach (var colums in ulgridElement.DisplayLayout.Bands[0].Columns) { colums.Hidden = true; } ulgridElement.DisplayLayout.Bands[0].Columns["SAMPLE_NO"].Hidden = false; if (dt != null) { foreach (DataRow dataRow in dt.Rows) { string chemsKey = dataRow["CHEM_NAME"].ToString().Replace(" ", "").Replace("/", ""); if (!dtChem.Columns.Contains(chemsKey.ToUpper()) && !string.IsNullOrEmpty(chemsKey)) { DataColumn newDc = new DataColumn { ColumnName = chemsKey.ToUpper(), Caption = chemsKey }; dtChem.Columns.Add(newDc); } ulgridElement.DisplayLayout.Bands[0].Columns[chemsKey.ToUpper()].Hidden = false; } } DataRow drMax = dtChem.NewRow(); DataRow drMin = dtChem.NewRow(); drMax["SAMPLE_NO"] = "上限"; drMin["SAMPLE_NO"] = "下限"; if (dt != null) { foreach (DataRow dataRow in dt.Rows) { string columnsName = dataRow["CHEM_NAME"].ToString().ToUpper().Replace(" ", "").Replace("/", ""); drMax[columnsName] = dataRow["STDMAX_SIGN"] + dataRow["STDMAX"].ToString(); drMin[columnsName] = dataRow["STDMIN_SIGN"] + dataRow["STDMIN"].ToString(); ulgridElement.DisplayLayout.Bands[0].Columns[columnsName].Tag = dataRow["CHEM_FORMULA"]; } } dtChem.Rows.Add(drMax); dtChem.Rows.Add(drMin); DataTable dtData = ServerHelper.GetData("Core.LgMes.Server.LgDeviceManager.StlChemical.GetStlChemicalData", new object[] {StoveNo, Pline, Process}, ob); if (dtData != null) { foreach (DataRow dataRow in dtData.Rows) { foreach (DataColumn dc in dtData.Columns) { string columnsName = dc.ColumnName; if (columnsName.Equals("SAMPLE_NO")) continue; if (!dtChem.Columns.Contains(columnsName.ToUpper().Replace("ASN", "AS")) && dataRow[columnsName] != null && string.IsNullOrEmpty((dataRow[columnsName].ToString()))) { DataColumn newDc = new DataColumn(); newDc.ColumnName = columnsName.ToUpper(); newDc.Caption = columnsName; dtChem.Columns.Add(newDc); } } DataRow tempRow = dtChem.NewRow(); tempRow["SAMPLE_NO"] = dataRow["SAMPLE_NO"]; foreach (DataColumn DataColumn in dtData.Columns) { if (dtChem.Columns.Contains(DataColumn.ColumnName.Replace("ASN", "AS"))) { tempRow[DataColumn.ColumnName.Replace("ASN", "AS")] = dataRow[DataColumn.ColumnName]; if (dataRow[DataColumn.ColumnName] != null && !string.IsNullOrEmpty(dataRow[DataColumn.ColumnName].ToString())) ulgridElement.DisplayLayout.Bands[0].Columns[DataColumn.ColumnName.Replace("ASN", "AS")] .Hidden = false; } } foreach (UltraGridColumn column in ulgridElement.DisplayLayout.Bands[0].Columns) { if (column.Hidden || column.Tag == null || string.IsNullOrEmpty(column.Tag.ToString())) continue; string ChemFormula = column.Tag.ToString().ToUpper(); foreach (DataColumn DataColumn in dtData.Columns) { if (dataRow[DataColumn.ColumnName] == null) continue; ChemFormula = ChemFormula.Replace(DataColumn.ColumnName.Replace("ASN", "AS"), dataRow[DataColumn.ColumnName].ToString()); } try { tempRow[column.Key] = Math.Round(double.Parse(new DataTable().Compute(ChemFormula, null).ToString()),4); } catch (Exception) { tempRow[column.Key] = null; } } dtChem.Rows.Add(tempRow); } } ClsControlPack.SaftRefreshUI(ulgridElement, () => { // ulgridElement.DataSource = dsChem; ulgridElement.Refresh(); ClsControlPack.RefreshAndAutoSize(ulgridElement); }); } public void ResetData() { // if(targerTable!=null) targerTable.Rows.Clear(); } private void ulgridElement_InitializeRow(object sender, InitializeRowEventArgs e) { if(e.Row.Index<2) return; foreach (var Cell in e.Row.Cells) { string ColumnsName = Cell.Column.Key; if (ColumnsName.Equals("SAMPLE_NO")) continue; int Result = CompareChem(Cell.Value, ulgridElement.Rows[0].Cells[ColumnsName].Value, ulgridElement.Rows[1].Cells[ColumnsName].Value); if (Result == 2) Cell.Appearance.ResetBackColor(); else if (Result > 0) Cell.Appearance.BackColor = Color.Red; else if (Result < 0) Cell.Appearance.BackColor = Color.Yellow; else Cell.Appearance.BackColor = Color.LightGreen; } } private int CompareChem(object CurrentVaule, object Max, object Min) { if (CurrentVaule == null) return -1; double vaule; if (!double.TryParse(CurrentVaule.ToString(), out vaule)) return -1; if ((Max == null || Max.ToString() == "") && (Min == null || Min.ToString() == "")) return 2; if (Max != null && !CompareVaule(vaule, Max.ToString(), true)) { return 1; } if (Min != null && !CompareVaule(vaule, Min.ToString(), false)) { return -1; } return 0; } private bool CompareVaule(double value, string format,bool Max) { if (string.IsNullOrEmpty(format)) return true; double dFormat; if (format.StartsWith("<=")) { if (!double.TryParse(format.Replace("<=", ""), out dFormat)) return false; return value <= dFormat; } if (format.StartsWith("<")) { if (!double.TryParse(format.Replace("<", ""), out dFormat)) return false; return value < dFormat; } if (format.StartsWith(">=")) { if (!double.TryParse(format.Replace(">=", ""), out dFormat)) return false; return value >= dFormat; } if (format.StartsWith(">")) { if (!double.TryParse(format.Replace(">", ""), out dFormat)) return false; return value > dFormat; } if (!double.TryParse(format, out dFormat)) return false; if (Max) return value < dFormat; return value > dFormat; } } }