using Core.Mes.Client.Comm.Control; using Core.Mes.Client.Comm.Server; using Core.Mes.Client.Comm.Tool; using CoreFS.CA06; using Infragistics.Win.UltraWinGrid; using System; using System.Collections; using System.Data; using System.Drawing; using System.Windows.Forms; namespace Core.StlMes.Client.Qcm { public partial class FrmChemistryElements : FrmBase { public FrmChemistryElements() { InitializeComponent(); ExceptionHelper.RegistException(); } private void FrmChemistryElements_Load(object sender, EventArgs e) { //bindcmbStyle(); //this.ultraComboEditor1.SelectedIndex = 0; this.cmbStyle.SelectedIndex = 0; } /// /// 重写基类方法 /// /// /// public override void ToolBar_Click(object sender, string ToolbarKey) { switch (ToolbarKey) { case "doQuery": doQuery(); break; case "doAdd": doAdd(); break; case "doModify": doModify(); break; case "doDelete": this.doDeleteOrResume(true); break; case "doResume": this.doDeleteOrResume(false); break; case "Close": this.Close(); break; } } /// /// 验证非空字段 /// /// private bool ValidInput() { if (string.IsNullOrEmpty(txtName.Text.Trim())) { MessageBox.Show("请输入化学元素描述!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return false; } if (txtRoundCount.Value.ToString() == "") { MessageUtil.ShowWarning("请输入修约位数!"); txtRoundCount.Focus(); return false; } if (complexIsValid() == false) { MessageUtil.ShowWarning("复合化学元素公式错误!"); txtElementsGs.Focus(); return false; } return true; } private bool complexIsValid() { //为化学公式去除+-*/ string[] s = txtElementsGs.Text.Trim().Replace(" ", "").Split('*', '/', '+', '-', ')', '('); string elements = "''"; int count = 0; for (int i = 0; i < s.Length; i++) { if (s[i].Trim() == "") continue; //判断是否为数字,如果不是纯数字,则表示是化学元素,添加到ArrayList中,传递到后台。 if (!StringUtil.IsNumber(s[i]) && s[i] != "tanh") { if (s[i].ToUpper() == "AS") s[i] = "ASN"; if (!elements.Contains("'" + s[i].ToUpper() + "'")) { elements += ", '" + s[i].ToUpper() + "'"; count++; } } } DataTable dt = ServerHelper.GetData("com.steering.pss.qcm.CoreChemistryElements.complexIsValid", new object[] { elements }, ob); if (dt.Rows[0][0].ToString() == count.ToString()) { return true; } return false; } /// /// 获取Table中最大编号,自增1返回。 /// /// /// private static string AutoCode(DataTable dt) { int maxCode = 0; //substring去除S001中的S,得到001。 string maxCodeString = dt.Rows[0][0].ToString().Substring(1); //是否为数字 if (StringUtil.IsNumber(maxCodeString)) { maxCode = Convert.ToInt32(maxCodeString); } else { MessageBox.Show("传入编号格式有误,请查看代码!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); } //比较得出最大id。 for (int i = 1; i < dt.Rows.Count; i++) { string maxCodeString_Two = dt.Rows[i][0].ToString().Substring(1); int maxCode_Two = 0; if (StringUtil.IsNumber(maxCodeString_Two)) { maxCode_Two = Convert.ToInt32(maxCodeString_Two); if (maxCode_Two > maxCode) { maxCode = maxCode_Two; } } } //新增行 maxCode += 1; string codeTop = ""; if (maxCode < 10) { codeTop = "00"; } else if (maxCode < 100) { codeTop = "0"; } //获取头文字D。 string d = dt.Rows[0][0].ToString().Substring(0, 1); //头文字+0+最大数字 string newCode = d + codeTop + maxCode; return newCode; } /// /// 获取化学元素代码最大值 /// /// private string GetMaxCode() { DataTable dt = ServerHelper.GetData("com.steering.pss.qcm.CoreChemistryElements.GetMaxCode", null, this.ob); string maxCode = ""; if (dt.Rows.Count > 0) { if (!"".Equals(dt.Rows[0][0].ToString())) { maxCode = dt.Rows[0][0].ToString(); } else { maxCode = "C000"; } } return maxCode; } /// /// 新增 /// private void doAdd() { if (ValidInput()) { //验证描述不允许重复。 string name = txtName.Text.Trim(); if (isRepeatName(name)) { MessageBox.Show("化学元素描述\"" + name + "\"已存在,请重新输入!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } if ("B".Equals(cmbStyle.Value.ToString())) { if ("".Equals(txtElementsGs.Text.Trim())) { MessageBox.Show("化学元素类型为复合元素,复合元素计算公式不允许为空!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } } if (MessageUtil.ShowYesNoAndQuestion("是否确认新增?") == DialogResult.No) return; ArrayList parm = new ArrayList(); //string chenCode = AutoCode(this.dataTable1); //自动生成编号 string chenCode = StringUtil.SequenceIncrease(GetMaxCode()); parm.Add(chenCode); parm.Add(name); parm.Add(cmbStyle.Value.ToString()); parm.Add(txtElementsGs.Text); parm.Add(this.UserInfo.GetUserName()); parm.Add(txtMemo.Text); parm.Add(txtRoundCount.Value.ToString2()); parm.Add(ultraNumericEditor1.Value.ToString2()); CoreClientParam ccp = new CoreClientParam(); ccp.ServerName = "com.steering.pss.qcm.CoreChemistryElements"; ccp.MethodName = "doAdd"; ccp.ServerParams = new object[] { parm }; ccp = this.ExecuteNonQuery(ccp, CoreInvokeType.Internal); if (ccp.ReturnCode == -1) { return; } MessageUtil.ShowTips("新增成功!"); doQuery(); //高亮显示新增的数据 Infragistics.Win.UltraWinGrid.UltraGridRow row = null; for (int i = 0; i < ultraGrid2.Rows.Count; i++) { row = ultraGrid2.Rows[i]; if (row.Cells["CHEM_CODE"].Value.ToString().Equals(chenCode)) { row.Activate(); break; } } } } /// /// 验证描述是否重复。 /// /// /// private bool isRepeatName(string name) { DataTable dt = new DataTable(); dt = ServerHelper.GetData("com.steering.pss.qcm.CoreChemistryElements.GetName", new Object[] { name }, this.ob); if (dt.Rows.Count > 0) { return true; } else { return false; } } /// /// 用于验证修改时,描述是否已存在 /// private static string VName = ""; /// /// 修改 /// private void doModify() { if (ultraGrid2.ActiveRow == null) { MessageBox.Show("请选择需要修改的数据!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } string validflagStr = ultraGrid2.ActiveRow.Cells["VALIDFLAG"].Value.ToString(); //无效数据不允许修改 if ("0".Equals(validflagStr)) { MessageBox.Show("无效数据不支持修改操作。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } if (ValidInput()) { //验证描述不允许重复。 string name = txtName.Text.Trim(); if (!VName.Equals(name)) { if (isRepeatName(name)) { MessageBox.Show("化学元素描述\"" + name + "\"已存在,请重新输入!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } } if ("B".Equals(cmbStyle.Value.ToString())) { if ("".Equals(txtElementsGs.Text.Trim())) { MessageBox.Show("化学元素类型为复合元素,复合元素计算公式不允许为空!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } } //确认修改吗? if (MessageBox.Show("是否确认修改选中的数据!", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) { return; } ArrayList parm = new ArrayList(); string chenCode = ultraGrid2.ActiveRow.Cells["CHEM_CODE"].Value.ToString(); parm.Add(name); parm.Add(cmbStyle.Value); parm.Add(txtElementsGs.Text); parm.Add(this.UserInfo.GetUserName()); parm.Add(DateTime.Now.ToString()); parm.Add(txtMemo.Text); parm.Add(txtRoundCount.Value.ToString2()); parm.Add(ultraNumericEditor1.Value.ToString2()); parm.Add(chenCode); CoreClientParam ccp = new CoreClientParam(); ccp.ServerName = "com.steering.pss.qcm.CoreChemistryElements"; ccp.MethodName = "doModify"; ccp.ServerParams = new object[] { parm }; ccp = this.ExecuteNonQuery(ccp, CoreInvokeType.Internal); if (ccp.ReturnCode == -1) return; MessageUtil.ShowTips("修改成功!"); doQuery(); //高亮显示新增的数据 Infragistics.Win.UltraWinGrid.UltraGridRow row = null; for (int i = 0; i < ultraGrid2.Rows.Count; i++) { row = ultraGrid2.Rows[i]; if (row.Cells["CHEM_CODE"].Value.ToString().Equals(chenCode)) { row.Activate(); break; } } } } /// /// 查询 /// private void doQuery() { //txtElementsGs if ("B".Equals(cmbStyle.Value.ToString().Trim())) { txtElementsGs.Enabled = true; } else { txtElementsGs.Enabled = false; } bool validFlag = chkValid.Checked; string titleName = txtTitleName.Text.Trim(); DataTable dt = ServerHelper.GetData("com.steering.pss.qcm.CoreChemistryElements.getLineList", new Object[] { validFlag, titleName }, this.ob); GridHelper.CopyDataToDatatable(ref dt, ref this.dataTable1, true); //不同颜色区分是否有效数据 Infragistics.Win.UltraWinGrid.UltraGridRow row = null; for (int i = 0; i < ultraGrid2.Rows.Count; i++) { row = ultraGrid2.Rows[i]; if (!row.Cells["VALIDFLAG"].Value.ToString().Equals("1")) { row.Appearance.ForeColor = Color.Red; } else { row.Appearance.ForeColor = Color.Black; } } //列自适应 GridHelper.RefreshAndAutoSizeExceptRows(ultraGrid2, new UltraGridColumn[] { ultraGrid2.DisplayLayout.Bands[0].Columns["MEMO"] }); } /// /// GRID ROW激活时信息带至编辑区 /// /// /// private void ultraGrid2_AfterRowActivate(object sender, EventArgs e) { Infragistics.Win.UltraWinGrid.UltraGridRow row = ultraGrid2.ActiveRow; if (row != null) { txtName.Text = row.Cells["CHEM_NAME"].Value.ToString(); VName = txtName.Text.Trim(); cmbStyle.Value = row.Cells["CHEM_TYPE"].Value.ToString(); txtElementsGs.Text = row.Cells["CHEM_FORMULA"].Value.ToString(); txtMemo.Text = row.Cells["MEMO"].Value.ToString(); txtRoundCount.Value = row.Cells["ROUNDING_DIGITS"].Value; ultraNumericEditor1.Value = row.Cells["CHEM_SEQ"].Value; } } /// /// 作废或恢复 /// /// true作废 false恢复 private void doDeleteOrResume(bool isDelete) { if (ultraGrid2.ActiveRow == null) { MessageBox.Show("请选择需要" + (isDelete ? "作废" : "恢复") + "的数据!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } string validflagStr = ultraGrid2.ActiveRow.Cells["VALIDFLAG"].Value.ToString(); //无效数据不允许作废 if ("0".Equals(validflagStr)) { if (isDelete) { MessageBox.Show("无效数据不支持作废操作。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } } else { //有效数据不允许恢复 if (!isDelete) { MessageBox.Show("有效数据不支持恢复操作。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } } ArrayList param = new ArrayList(); string chemCode = ultraGrid2.ActiveRow.Cells["CHEM_CODE"].Value.ToString(); param.Add(chemCode); if (param.Count > 0 && MessageBox.Show("是否确认" + (isDelete ? "作废" : "恢复") + "选中的数据!", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { int count = ServerHelper.SetData("com.steering.pss.qcm.CoreChemistryElements.deleteLineInfo", new Object[] { param, UserInfo.GetUserName(), isDelete }, this.ob); if (count > 0) { MessageUtil.ShowTips((isDelete ? "作废" : "恢复") + "成功!"); doQuery(); Infragistics.Win.UltraWinGrid.UltraGridRow rowD = null; for (int i = 0; i < ultraGrid2.Rows.Count; i++) { rowD = ultraGrid2.Rows[i]; if (rowD.Cells["CHEM_CODE"].Value.ToString().Equals(chemCode)) { rowD.Activate(); break; } } } } } private void bindcmbStyle() { DataTable dt = new DataTable(); dt.Columns.Add("id"); dt.Columns.Add("name"); DataRow dr = dt.NewRow(); dr["id"] = "A"; dr["name"] = "单一元素"; DataRow drB = dt.NewRow(); drB["id"] = "B"; drB["name"] = "复合元素"; dt.Rows.Add(dr); dt.Rows.Add(drB); dt.Columns["id"].Caption = "编号"; dt.Columns["name"].Caption = "名称"; cmbStyle.DataSource = dt; cmbStyle.DisplayMember = "name"; cmbStyle.ValueMember = "id"; } private void cmbStyle_ValueChanged(object sender, EventArgs e) { if (cmbStyle.Value.Equals("A")) { txtElementsGs.Text = ""; txtElementsGs.Enabled = false; } else { txtElementsGs.Enabled = true; } } } }