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.Collections.Generic; using System.Data; using System.Drawing; using System.Windows.Forms; namespace Core.StlMes.Client.Qcm { public partial class FrmStandardSpray : FrmBase { public FrmStandardSpray() { InitializeComponent(); this.IsLoadUserView = true; //平台F1功能 } /// /// 重写基类方法 /// /// /// public override void ToolBar_Click(object sender, string ToolbarKey) { switch (ToolbarKey) { case "doQuery": doQuery(); break; case "doSave": doSave(); break; case "doDelete": this.doDeleteOrResume(true); break; case "doResume": this.doDeleteOrResume(false); break; case "Close": this.Close(); break; } } private void FrmStandardSpray_Load(object sender, EventArgs e) { cmbSignSource.SelectedIndex = 0; //绑定限制规格1、2代码和描述。 BindCmbSizeCode(); //绑定接箍限制规格代码和描述 BindCmbJg(); //cmbSizeCode2.SelectedIndex = 0; } /// /// 绑定接箍限制规格代码和描述 /// private void BindCmbJg() { DataTable dt = ServerHelper.GetData("com.steering.pss.qcm.CoreStandardSpray.GetJG", null, this.ob); ComboBoxHelper.FillUlcmItemsAddEmpty(cmbJG, dt); } /// /// 绑定限制规格1,代码和描述 /// private void BindCmbSizeCode() { DataTable dt = ServerHelper.GetData("com.steering.pss.qcm.CoreStandardSpray.GetSizeCode", null, this.ob); ComboBoxHelper.FillUlcmItemsAddEmpty(cmbSizeCode2, dt); //限制规格2,绑定的是同样的数据源。 ComboBoxHelper.FillUlcmItemsAddEmpty(cmbSizeCode, dt); } /// /// 作废或恢复 /// /// true作废 false恢复 private void doDeleteOrResume(bool isDelete) { ultraGrid2.UpdateData(); //验证是否有勾选项。 int chkCount = 0; foreach (Infragistics.Win.UltraWinGrid.UltraGridRow row in ultraGrid2.Rows) { if (Convert.ToBoolean(row.Cells["CHK"].Value)) { chkCount++; } if (row.ChildBands[0].Rows.Count > 0) { foreach (Infragistics.Win.UltraWinGrid.UltraGridRow minrow in row.ChildBands[0].Rows) { if (Convert.ToBoolean(minrow.Cells["CHKC"].Value)) { chkCount++; } } } } if (chkCount <= 0) { MessageBox.Show("请先勾选!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } //if (isDelete) //{ // //无效数据不允许删除。 // //但是我选中数据中如果既有有效数据、又有无效数据呢? //} //else //{ // //有效数据不允许恢复 //} ArrayList param = new ArrayList(); ArrayList minParam = new ArrayList(); if (isDelete) { foreach (Infragistics.Win.UltraWinGrid.UltraGridRow row in ultraGrid2.Rows) { //主表勾选了,从表跟着作废。 if (Convert.ToBoolean(row.Cells["CHK"].Value)) { param.Add(row.Cells["INDEX_SEQ"].Value.ToString()); foreach (Infragistics.Win.UltraWinGrid.UltraGridRow minrow in row.ChildBands[0].Rows) { minParam.Add(minrow.Cells["INDEX_SEQ_C"].Value.ToString()); } } else { //主表未勾选,从表勾选了,照样作废。PSC,PSC_DESC foreach (Infragistics.Win.UltraWinGrid.UltraGridRow minrow in row.ChildBands[0].Rows) { if (Convert.ToBoolean(minrow.Cells["CHKC"].Value)) { minParam.Add(minrow.Cells["INDEX_SEQ_C"].Value.ToString()); } } } } } else { //恢复操作 foreach (Infragistics.Win.UltraWinGrid.UltraGridRow row in ultraGrid2.Rows) { //主表勾选了,只恢复主表,从表不需要恢复。 if (Convert.ToBoolean(row.Cells["CHK"].Value)) { param.Add(row.Cells["INDEX_SEQ"].Value.ToString()); } else { //主表未勾选,从表勾选了。主表跟着恢复。 foreach (Infragistics.Win.UltraWinGrid.UltraGridRow minrow in row.ChildBands[0].Rows) { if (Convert.ToBoolean(minrow.Cells["CHKC"].Value)) { minParam.Add(minrow.Cells["INDEX_SEQ_C"].Value.ToString()); } param.Add(row.Cells["INDEX_SEQ"].Value.ToString()); } } } } if (MessageBox.Show("是否确认" + (isDelete ? "作废" : "恢复") + "选中的数据!", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { try { int count = 0; if (param.Count > 0) { count = ServerHelper.SetData("com.steering.pss.qcm.CoreStandardSpray.deleteLineInfo", new Object[] { param, UserInfo.GetUserName(), isDelete }, this.ob); } int minCount = 0; if (minParam.Count > 0) { minCount = ServerHelper.SetData("com.steering.pss.qcm.CoreStandardSpray.deleteLineInfoC", new Object[] { minParam, UserInfo.GetUserName(), isDelete }, this.ob); } if (count > 0 || minCount > 0) { doQuery(); ExpandRow(); MSCCodes.Clear(); } } catch (Exception ex) { MessageBox.Show(ex.Message); } } } /// /// 验证主表数据。 /// private bool yz() { double max1 = 0; double min1 = 0; double max = 0; double min = 0; this.ultraGrid2.UpdateData(); foreach (Infragistics.Win.UltraWinGrid.UltraGridRow row in ultraGrid2.Rows) { if (Convert.ToBoolean(row.Cells["CHK"].Value)) { if (row.Cells["MODEL_DESC"].Value.ToString() == "") { MessageBox.Show("请选择扣型集合", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); row.Activate(); return false; } if (row.Cells["SIZE_NAME2"].Value.ToString() == "" && row.Cells["SIZE_NAME"].Value.ToString() == "" && row.Cells["SIZE_JG"].Value.ToString() == "") { MessageBox.Show("请在限制规格描述或接箍规格描述中选择一项数据!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); row.Activate(); return false; } //限制规格和接箍规格不能同时存在。 if (row.Cells["SIZE_NAME2"].Value.ToString() != "" || row.Cells["SIZE_NAME"].Value.ToString() != "") { if (row.Cells["SIZE_NAME2"].Value.ToString() == row.Cells["SIZE_NAME"].Value.ToString()) { MessageBox.Show("限制规格1描述和限制规格2描述不能一样。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); row.Cells["SIZE_NAME"].Value = ""; row.Cells["SIZE_CODE"].Value = ""; row.Activate(); return false; } if (row.Cells["SIZE_NAME2"].Value.ToString() != "") { if (row.Cells["SIZE_MIN2"].Value.ToString() != "") { if (StringUtil.IsNumber(row.Cells["SIZE_MIN2"].Value.ToString())) { if (!StringUtil.Is_Below_zero(row.Cells["SIZE_MIN2"].Value.ToString())) { MessageBox.Show("限制规格1下限必须大于0", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); row.Activate(); return false; } else { if (row.Cells["SIZE_MIN_SIGN2"].Value.ToString() != "=" || StringUtil.IsNumber(row.Cells["SIZE_MIN2"].Value.ToString())) { min1 = Convert.ToDouble(row.Cells["SIZE_MIN2"].Value.ToString()); } } } } else if (row.Cells["SIZE_MIN_SIGN2"].Value.ToString() != "=") { MessageBox.Show("限制规格1下限请输入数字", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); row.Activate(); return false; } if (row.Cells["SIZE_MAX2"].Value.ToString() != "") { if (StringUtil.IsNumber(row.Cells["SIZE_MAX2"].Value.ToString())) { if (!StringUtil.Is_Below_zero(row.Cells["SIZE_MAX2"].Value.ToString())) { MessageBox.Show("限制规格1上限必须大于0。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); row.Activate(); return false; } else { max1 = Convert.ToDouble(row.Cells["SIZE_MAX2"].Value.ToString()); } } } else { MessageBox.Show("限制规格1上限必须为数字", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); row.Activate(); return false; } } if (min1 > max1) { MessageBox.Show("限制规格1上限值必须大于下限值。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); row.Activate(); return false; } if (row.Cells["SIZE_NAME"].Value.ToString() != "") { if (row.Cells["SIZE_MIN"].Value.ToString() != "") { if (StringUtil.IsNumber(row.Cells["SIZE_MIN"].Value.ToString())) { if (!StringUtil.Is_Below_zero(row.Cells["SIZE_MIN"].Value.ToString())) { MessageBox.Show("限制规格2下限必须大于0", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); row.Activate(); return false; } else { if (row.Cells["SIZE_MIN_SIGN"].Value.ToString() != "=" || StringUtil.IsNumber(row.Cells["SIZE_MIN"].Value.ToString())) { min = Convert.ToDouble(row.Cells["SIZE_MIN"].Value.ToString()); } } } } else if (row.Cells["SIZE_MIN_SIGN"].Value.ToString() != "=") { MessageBox.Show("限制规格2下限必须为数字。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return false; } if (row.Cells["SIZE_MAX"].Value.ToString() != "") { if (StringUtil.IsNumber(row.Cells["SIZE_MAX"].Value.ToString())) { if (!StringUtil.Is_Below_zero(row.Cells["SIZE_MAX"].Value.ToString())) { MessageBox.Show("限制规格2上限值必须大于0。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); row.Activate(); return false; } else { max = Convert.ToDouble(row.Cells["SIZE_MAX"].Value.ToString()); } } } else { MessageBox.Show("限制规格2上限必须为数字", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); row.Activate(); return false; } if (max < min) { MessageBox.Show("限制规格2上限值必须大于下限值", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); row.Activate(); return false; } } if (row.Cells["SIZE_JG"].Value.ToString() != "") { MessageBox.Show("限制规格和接箍规格不能同时存在", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); row.Cells["SIZE_JG"].Value = ""; row.Activate(); return false; } } else { if ((row.Cells["SIZE_NAME2"].Value.ToString() == "" && (row.Cells["SIZE_MIN_SIGN2"].Value.ToString() != "" || row.Cells["SIZE_MAX_SIGN2"].Value.ToString() != "")) || (row.Cells["SIZE_NAME"].Value.ToString() == "" && (row.Cells["SIZE_MIN_SIGN"].Value.ToString() != "" || row.Cells["SIZE_MAX_SIGN"].Value.ToString() != ""))) { MessageBox.Show("规格描述没有选择的情况下,不允许选择符号", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); row.Activate(); return false; //不允许未选规格描述,就有符号选择。 } } //验证,当描述信息为空的情况下,符号和值都必须清空。 if ("".Equals(row.Cells["SIZE_NAME2"].Value.ToString())) { row.Cells["SIZE_MIN_SIGN2"].Value = ""; row.Cells["SIZE_MIN2"].Value = ""; row.Cells["SIZE_MAX_SIGN2"].Value = ""; row.Cells["SIZE_MAX2"].Value = ""; } else { //当描述信息不为空的情况下,符号和值,都不允许为空。 if ("".Equals(row.Cells["SIZE_MIN_SIGN2"].Value.ToString())) { MessageBox.Show("下限符号不允许为空!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); row.Activate(); return false; } if ("".Equals(row.Cells["SIZE_MIN2"].Value.ToString())) { MessageBox.Show("下限不允许为空!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); row.Activate(); return false; } if ("".Equals(row.Cells["SIZE_MAX_SIGN2"].Value.ToString())) { MessageBox.Show("上限符号不允许为空!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); row.Activate(); return false; } if ("".Equals(row.Cells["SIZE_MAX2"].Value.ToString())) { MessageBox.Show("上限不允许为空!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); row.Activate(); return false; } } //验证,当描述信息为空的情况下,符号和值都必须清空。 if ("".Equals(row.Cells["SIZE_NAME"].Value.ToString())) { row.Cells["SIZE_MIN_SIGN"].Value = ""; row.Cells["SIZE_MIN"].Value = ""; row.Cells["SIZE_MAX_SIGN"].Value = ""; row.Cells["SIZE_MAX"].Value = ""; } else { //当描述信息不为空的情况下,符号和值,都不允许为空。 if ("".Equals(row.Cells["SIZE_MIN_SIGN"].Value.ToString())) { MessageBox.Show("下限符号不允许为空!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); row.Activate(); return false; } if ("".Equals(row.Cells["SIZE_MIN"].Value.ToString())) { MessageBox.Show("下限不允许为空!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); row.Activate(); return false; } if ("".Equals(row.Cells["SIZE_MAX_SIGN"].Value.ToString())) { MessageBox.Show("上限符号不允许为空!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); row.Activate(); return false; } if ("".Equals(row.Cells["SIZE_MAX"].Value.ToString())) { MessageBox.Show("上限不允许为空!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); row.Activate(); return false; } } } } return true; } /// /// 保存,包含主表从表的新增和修改 /// private void doSave() { if (!yz()) { return; } //更新数据源。 ultraGrid2.UpdateData(); //判断是否有勾选项,没有则提示。 int chkbool = 0; for (int i = 0; i < this.SprayTable.Rows.Count; i++) { DataRow dr = SprayTable.Rows[i]; if ("".Equals(dr.ToString())) { } else if (Convert.ToBoolean(dr["CHK"])) { chkbool += 1; } } for (int i = 0; i < this.SprayCTable.Rows.Count; i++) { DataRow dr = SprayCTable.Rows[i]; if ("".Equals(dr.ToString())) { } else if (Convert.ToBoolean(dr["CHKC"])) { chkbool += 1; } } if (chkbool <= 0) { MessageBox.Show("请先勾选!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } //确定保存吗? if (MessageBox.Show("是否确认保存?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) { return; } //主表新增组ArrayList ArrayList spbAddParams = new ArrayList(); //主表修改组ArrayList ArrayList spbUpdateParams = new ArrayList(); //从表新增组ArrayList ArrayList spbSupplementAddParams = new ArrayList(); //从表修改组ArrayList ArrayList spbSupplementUpdateParams = new ArrayList(); //冶金规范码 string mscCode = ultraGrid1.ActiveRow.Cells["MSC"].Value.ToString(); //遍历主表,判定是否有勾选项。 for (int i = 0; i < this.SprayTable.Rows.Count; i++) { //Infragistics.Win.UltraWinGrid.UltraGridRow row = ultraGrid2.Rows[i]; DataRow dr = SprayTable.Rows[i]; if (Convert.ToBoolean(dr["CHK"])) { //判定勾选项是新增行,还是修改行。 if (dr.RowState == DataRowState.Added) { //新增行 //MSC,INDEX_SEQ,MODEL_CODE,MODEL_DESC,SIZE_CODE2,SIZE_NAME2, //SIZE_MIN_SIGN2 ,SIZE_MIN2,SIZE_MAX_SIGN2,SIZE_MAX2,SIZE_CODE, //IZE_NAME ,SIZE_MIN_SIGN,SIZE_MIN ,IZE_MAX_SIGN,SIZE_MAX,SIZE_JG //冶金规范码,序号,扣型代码(集合),扣型描述(集合),限制规格代码(外径、壁厚等),限制规格描述, //限制规格下限符号,限制规格下限,限制规格上限符号,限制规格上限,限制规格代码(外径、壁厚等), //限制规格描述,限制规格下限符号,限制规格下限,限制规格上限符号,限制规格上限, //接箍限制规格(接箍专用,与外径壁厚只允许存在其一) ArrayList parm = new ArrayList(); //冶金规范码 parm.Add(mscCode); //序号,由服务端,数据库序列xl.nextval,自动生成 //因为考虑到批量新增,当你加第二条的时候,数据库中并没有第二条数据信息。 parm.Add(dr["INDEX_SEQ"].ToString()); //扣型代码(集合),这个功能有点复杂,因为有多条记录选择功能需要实现。暂时空着。 parm.Add(dr["MODEL_CODE"].ToString()); //扣型描述(集合) parm.Add(dr["MODEL_DESC"].ToString()); //限制规格代码(外径、壁厚、径壁比,写死的)SIZE_CODE2 parm.Add(dr["SIZE_CODE2"].ToString()); //限制规格描述是冗余数据,因此只插入上面一个即可。 parm.Add(dr["SIZE_NAME2"].ToString()); //限制规格下限符号> >= =,写死的,直接插入数据库即可。SIZE_MIN_SIGN2 parm.Add(dr["SIZE_MIN_SIGN2"].ToString()); //限制规格下限,必须限制只允许输入数字。 parm.Add(dr["SIZE_MIN2"].ToString()); //限制规格上限符号< <= cmbSizeMaxSign2 parm.Add(dr["SIZE_MAX_SIGN2"].ToString()); //限制规格上限SIZE_MAX2 parm.Add(dr["SIZE_MAX2"].ToString()); //限制规格代码(外径、壁厚等)SIZE_CODE,如果之前选择的是外径,这里就不能再选外径了。cmbSizeCode parm.Add(dr["SIZE_CODE"].ToString()); //限制规格描述SIZE_NAME parm.Add(dr["SIZE_NAME"].ToString()); //限制规格下限符号SIZE_MIN_SIGN,cmbSizeMinSign parm.Add(dr["SIZE_MIN_SIGN"].ToString()); //限制规格下限SIZE_MIN parm.Add(dr["SIZE_MIN"].ToString()); //限制规格上限符号SIZE_MAX_SIGN parm.Add(dr["SIZE_MAX_SIGN"].ToString()); //限制规格上限SIZE_MAX parm.Add(dr["SIZE_MAX"].ToString()); //接箍限制规格(接箍专用,与外径壁厚只允许存在其一)SIZE_JG parm.Add(dr["SIZE_JG"].ToString()); parm.Add(this.UserInfo.GetUserName()); parm.Add(dr["MEMO"].ToString()); spbAddParams.Add(parm); } else if (this.SprayTable.Rows[i].RowState == DataRowState.Modified) { //主表修改 ArrayList parm = new ArrayList(); //序号,由服务端,数据库序列xl.nextval,自动生成 string xl = dr["INDEX_SEQ"].ToString(); //扣型代码(集合),这个功能有点复杂,因为有多条记录选择功能需要实现。暂时空着。 parm.Add(dr["MODEL_CODE"].ToString()); //扣型描述(集合) parm.Add(dr["MODEL_DESC"].ToString()); //限制规格代码(外径、壁厚、径壁比,写死的)SIZE_CODE2 parm.Add(dr["SIZE_CODE2"].ToString()); //限制规格描述是冗余数据,因此只插入上面一个即可。 parm.Add(dr["SIZE_NAME2"].ToString()); //限制规格下限符号> >= =,写死的,直接插入数据库即可。SIZE_MIN_SIGN2 parm.Add(dr["SIZE_MIN_SIGN2"].ToString()); //限制规格下限,必须限制只允许输入数字。 parm.Add(dr["SIZE_MIN2"].ToString()); //限制规格上限符号< <= cmbSizeMaxSign2 parm.Add(dr["SIZE_MAX_SIGN2"].ToString()); //限制规格上限SIZE_MAX2 parm.Add(dr["SIZE_MAX2"].ToString()); //限制规格代码(外径、壁厚等)SIZE_CODE,如果之前选择的是外径,这里就不能再选外径了。cmbSizeCode parm.Add(dr["SIZE_CODE"].ToString()); //限制规格描述SIZE_NAME parm.Add(dr["SIZE_NAME"].ToString()); //限制规格下限符号SIZE_MIN_SIGN,cmbSizeMinSign parm.Add(dr["SIZE_MIN_SIGN"].ToString()); //限制规格下限SIZE_MIN parm.Add(dr["SIZE_MIN"].ToString()); //限制规格上限符号SIZE_MAX_SIGN parm.Add(dr["SIZE_MAX_SIGN"].ToString()); //限制规格上限SIZE_MAX parm.Add(dr["SIZE_MAX"].ToString()); //接箍限制规格(接箍专用,与外径壁厚只允许存在其一)SIZE_JG parm.Add(dr["SIZE_JG"].ToString()); parm.Add(this.UserInfo.GetUserName()); parm.Add(dr["MEMO"].ToString()); //冶金规范码是不能修改的where msc='' and xl='' parm.Add(mscCode); parm.Add(xl); spbUpdateParams.Add(parm); } } } //ArrayList repeatList = new ArrayList(); //HashSet repeatHashSet = new HashSet(); //直接遍历从表所有行,判定是否有选中项。 for (int j = 0; j < SprayCTable.Rows.Count; j++) { DataRow minrow = SprayCTable.Rows[j]; if (Convert.ToBoolean(minrow["CHKC"])) { if (minrow.RowState == DataRowState.Added) { ArrayList minParm = new ArrayList(); //冶金规范码MSC,可以公用出来。 minParm.Add(mscCode); //序号INDEX_SEQ,父类序列,如果成功建立关联关系,可以直接获取主表主键。 string indexSeq = minrow["INDEX_SEQ"].ToString(); minParm.Add(indexSeq); //喷标项目序号INDEX_SEQ_C,自身序号由数据库中序列生成。 minParm.Add(minrow["INDEX_SEQ_C"].ToString()); //喷标项目描述SIGN_ITEM,不允许为空。 string signItem = minrow["SIGN_ITEM"].ToString(); if ("".Equals(signItem)) { MessageBox.Show("喷标项目描述不允许为空!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } //还要判断项目描述是否重复。。。。。。。。。。。 //Object[] obj = new Object[] { signItem, indexSeq }; //repeatList.Add(obj); //repeatHashSet.Add(obj); minParm.Add(signItem); //喷标项目内容来源(A:手工录入,B:动态配置)SIGN_SOURCE,cmbSignSource string signSource = minrow["SIGN_SOURCE"].ToString(); if ("".Equals(signSource)) { return; } minParm.Add(signSource); //手工录入内容(SIGN_SOURCE等于A)SIGN_NOTE minParm.Add(minrow["SIGN_NOTE"].ToString()); //数据表名.字段名(SIGN_SOURCE等于B)SIGN_FIELD minParm.Add(minrow["SIGN_FIELD"].ToString()); minParm.Add(this.UserInfo.GetUserName()); minParm.Add(minrow["MEMO"].ToString()); spbSupplementAddParams.Add(minParm); } else if (minrow.RowState == DataRowState.Modified) { ArrayList minParm = new ArrayList(); //喷标项目序号INDEX_SEQ_C,自身序号由数据库中序列生成。 //喷标项目描述SIGN_ITEM,不允许为空。 string signItem = minrow["SIGN_ITEM"].ToString(); if ("".Equals(signItem)) { MessageBox.Show("喷标项目描述不允许为空!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } minParm.Add(signItem); //喷标项目内容来源(A:手工录入,B:动态配置)SIGN_SOURCE,cmbSignSource string signSource = minrow["SIGN_SOURCE"].ToString(); if ("".Equals(signSource)) { return; } minParm.Add(signSource); //手工录入内容(SIGN_SOURCE等于A)SIGN_NOTE minParm.Add(minrow["SIGN_NOTE"].ToString()); //数据表名.字段名(SIGN_SOURCE等于B)SIGN_FIELD minParm.Add(minrow["SIGN_FIELD"].ToString()); minParm.Add(this.UserInfo.GetUserName()); minParm.Add(minrow["MEMO"].ToString()); //冶金规范码MSC,可以公用出来。 minParm.Add(mscCode); //序号INDEX_SEQ,父类序列,如果成功建立关联关系,可以直接获取主表主键。 minParm.Add(minrow["INDEX_SEQ"].ToString()); minParm.Add(minrow["INDEX_SEQ_C"].ToString()); spbSupplementUpdateParams.Add(minParm); } } } //if (isRepeat(repeatHashSet,repeatList)) //{ // MessageBox.Show("喷标项目描述信息重复!", "提示"); // return; //} //执行数据库相关操作 CoreClientParam ccp = new CoreClientParam(); //服务端的包名+类名 ccp.ServerName = "com.steering.pss.qcm.CoreStandardSpray"; //类里的方法名 ccp.MethodName = "doSave"; ccp.ServerParams = new object[] { spbAddParams, spbUpdateParams, spbSupplementAddParams, spbSupplementUpdateParams }; ccp = this.ExecuteNonQuery(ccp, CoreInvokeType.Internal); if (ccp.ReturnCode == -1) { return; } else { MessageBox.Show("保存成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); bindSpray(); ExpandRow(); MSCCodes.Clear(); } } /// /// 验证描述信息是否重复。 /// /// /// /// //private bool isRepeat(HashSet repeatHashSet, ArrayList repeatList) //{ // repeatHashSet.Contains(); // if (repeatHashSet.Count == repeatList.Count) // { // return true; // } // else // { // return false; // } //} /// /// 绑定冶金规范码 /// private void InitMSC() { DataTable dt = ServerHelper.GetData("com.steering.pss.qcm.CoreStandardSpray.GetMSC", null, this.ob); GridHelper.CopyDataToDatatable(ref dt, ref this.MSCTable, true); //内容自适应 GridHelper.RefreshAndAutoSizeExceptRows(ultraGrid1, new UltraGridColumn[] { //ultraGrid1.DisplayLayout.Bands[0].Columns["MEMO"] }); } /// /// 将冶金规范码的记录查询出来 /// private void doQuery() { InitMSC(); } /// /// 根据冶金规范码将喷标数据显示出来 /// /// /// private void ultraGrid1_AfterRowActivate(object sender, EventArgs e) { bindSpray(); maxIndexSeq = 0; maxIndexSeqC = 0; } /// /// 绑定主表从表数据。 /// private void bindSpray() { SprayCTable.Clear(); SprayTable.Clear(); string pscCode = ultraGrid1.ActiveRow.Cells["MSC"].Value.ToString(); //根据冶金规范码查询出喷标要求主表数据 DataTable dt = ServerHelper.GetData("com.steering.pss.qcm.CoreStandardSpray.getLineList", new Object[] { pscCode }, this.ob); GridHelper.CopyDataToDatatable(ref dt, ref this.SprayTable, true); SprayTable.AcceptChanges(); //根据冶金规范码查询出喷标要求从表数据 DataTable dtC = ServerHelper.GetData("com.steering.pss.qcm.CoreStandardSpray.GetSprayC", new Object[] { pscCode }, this.ob); GridHelper.CopyDataToDatatable(ref dtC, ref this.SprayCTable, true); SprayCTable.AcceptChanges(); //聚焦第一行 //不同颜色区分是否有效数据 Infragistics.Win.UltraWinGrid.UltraGridRow row = null; Infragistics.Win.UltraWinGrid.UltraGridRow minrow = null; for (int i = 0; i < ultraGrid2.Rows.Count; i++) { row = ultraGrid2.Rows[i]; if (row.ChildBands[0].Rows.Count > 0) { for (int j = 0; j < row.ChildBands[0].Rows.Count; j++) { minrow = row.ChildBands[0].Rows[j]; if (!minrow.Cells["VALIDFLAG"].Value.ToString().Equals("1")) { minrow.Appearance.ForeColor = Color.Red; } else { minrow.Appearance.ForeColor = Color.Black; } } } 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["CHK"], ultraGrid2.DisplayLayout.Bands[0].Columns["MEMO"] }); //主表、从表没有勾选不允许编辑 for (int i = 0; i < ultraGrid2.Rows.Count; i++) { for (int j = 1; j < ultraGrid2.Rows[i].Cells.Count; j++) { ultraGrid2.Rows[i].Cells[j].Activation = Infragistics.Win.UltraWinGrid.Activation.ActivateOnly; } if (ultraGrid2.Rows[i].ChildBands[0].Rows.Count > 0) { for (int k = 0; k < ultraGrid2.Rows[i].ChildBands[0].Rows.Count; k++) { for (int f = 1; f < ultraGrid2.Rows[i].ChildBands[0].Rows[k].Cells.Count; f++) { ultraGrid2.Rows[i].ChildBands[0].Rows[k].Cells[f].Activation = Infragistics.Win.UltraWinGrid.Activation.ActivateOnly; } } } } } private void ultraGrid2_AfterRowInsert(object sender, RowEventArgs e) { //给新增行chk赋值false。假设不这样做,他将为"",而空,在转换为Boolean时会报错。 //获取该行记录,如果有父级则是从表。 //不选中,就不让他编辑好吗? for (int j = 1; j < e.Row.Cells.Count; j++) { e.Row.Cells[j].Activation = Infragistics.Win.UltraWinGrid.Activation.ActivateOnly; } if (e.Row.HasParent()) { ultraGrid2.ActiveRow.Cells["CHKC"].Value = false; //应该从数据库中获取最大序号,从1开始累加,不要用序列。 int maxIndexSeqC = GetMaxIndexSeqC(); ultraGrid2.ActiveRow.Cells["INDEX_SEQ_C"].Value = maxIndexSeqC; } else { ultraGrid2.ActiveRow.Cells["CHK"].Value = false; int maxIndexSeq = GetMaxIndexSeq(); ultraGrid2.ActiveRow.Cells["INDEX_SEQ"].Value = maxIndexSeq; } } private static int maxIndexSeq = 0; /// /// 从数据库中获取主表最大序号值+1返回。 /// /// private int GetMaxIndexSeq() { DataTable dt = ServerHelper.GetData("com.steering.pss.qcm.CoreStandardSpray.GetMaxIndexSeq", null, this.ob); int maxCode = 1; if (dt.Rows.Count > 0) { if (!"".Equals(dt.Rows[0][0].ToString())) { maxCode = Convert.ToInt32(dt.Rows[0][0]) + 1; } } if (maxIndexSeq == 0) { maxIndexSeq = maxCode; } else { maxIndexSeq++; } return maxIndexSeq; //另外切换数据源的时候让maxIndexSeq等于0 } private static int maxIndexSeqC = 0; /// /// 从数据库中获取从表最大序号值+1返回。 /// /// private int GetMaxIndexSeqC() { DataTable dt = ServerHelper.GetData("com.steering.pss.qcm.CoreStandardSpray.GetMaxIndexSeqC", null, this.ob); int maxCode = 1; if (dt.Rows.Count > 0) { if (!"".Equals(dt.Rows[0][0].ToString())) { maxCode = Convert.ToInt32(dt.Rows[0][0]) + 1; } } if (maxIndexSeqC == 0) { maxIndexSeqC = maxCode; } else { maxIndexSeqC++; } return maxIndexSeqC; //另外切换数据源的时候让maxIndexSeqC等于0 } /// /// 用于扣型选择弹出对话框。 /// public UltraGridRow rowparm; /// /// 触发扣型事件。 /// /// /// private void ultraGrid2_ClickCellButton(object sender, CellEventArgs e) { //单击表格按钮时间(有一列格子设为按钮) UltraGridRow ugr = this.ultraGrid2.ActiveRow; if (e.Cell.Column.Key.Equals("MODEL_DESC") && ugr.Cells["CHK"].Value.ToString() == "True") {//这一按钮列被点击,同时被点击的这一行被勾选了。 this.rowparm = this.ultraGrid2.ActiveRow; FrmModel fms = new FrmModel(); fms.FrmOb = this.ob; //ob对象传到扣型选择界面 fms.Desc = rowparm.Cells["MODEL_DESC"].Value.ToString(); //激活行的扣型描述 fms.ShowDialog(); rowparm.Cells["MODEL_CODE"].Value = fms.Code; //选择的扣型集合代码 rowparm.Cells["MODEL_DESC"].Value = fms.Desc; //选择的扣型集合描述 //返回到点击界面。 } } private void ultraGrid2_CellChange(object sender, CellEventArgs e) { ultraGrid2.UpdateData(); //从表 if (e.Cell.Column.Key.Equals("CHKC")) { if (e.Cell.Value != null && !string.IsNullOrEmpty(e.Cell.Value.ToString()) && Convert.ToBoolean(e.Cell.Value)) { for (int i = 1; i < e.Cell.Row.Cells.Count; i++) { //16 17 18 19 20 21 24 if (i != 8 && i != 9 && i != 10 && i != 11 && i != 12 && i != 13 && i != 16) { e.Cell.Row.Cells[i].Activation = Infragistics.Win.UltraWinGrid.Activation.AllowEdit; } } } else { for (int i = 1; i < e.Cell.Row.Cells.Count; i++) { e.Cell.Row.Cells[i].Activation = Infragistics.Win.UltraWinGrid.Activation.ActivateOnly; } } } //主表 if (e.Cell.Column.Key.Equals("CHK")) { //选中状态 if (e.Cell.Value != null && !string.IsNullOrEmpty(e.Cell.Value.ToString()) && Convert.ToBoolean(e.Cell.Value)) { for (int i = 1; i < e.Cell.Row.Cells.Count; i++) { if (i != 16 && i != 17 && i != 18 && i != 19 && i != 20 && i != 21 && i != 24) { e.Cell.Row.Cells[i].Activation = Infragistics.Win.UltraWinGrid.Activation.AllowEdit; } } } else { for (int i = 1; i < e.Cell.Row.Cells.Count; i++) { e.Cell.Row.Cells[i].Activation = Infragistics.Win.UltraWinGrid.Activation.ActivateOnly; } } } //当限制规格描述为空的时候,清空他后面的4列。25、26 if (e.Cell.Column.Key.Equals("SIZE_NAME2")) { if ("".Equals(ultraGrid2.ActiveRow.Cells["SIZE_NAME2"].Value.ToString())) { ultraGrid2.ActiveRow.Cells["SIZE_MIN_SIGN2"].Value = ""; ultraGrid2.ActiveRow.Cells["SIZE_MIN2"].Value = ""; ultraGrid2.ActiveRow.Cells["SIZE_MAX_SIGN2"].Value = ""; ultraGrid2.ActiveRow.Cells["SIZE_MAX2"].Value = ""; } } if (e.Cell.Column.Key.Equals("SIZE_NAME")) { if ("".Equals(ultraGrid2.ActiveRow.Cells["SIZE_NAME"].Value.ToString())) { ultraGrid2.ActiveRow.Cells["SIZE_MIN_SIGN"].Value = ""; ultraGrid2.ActiveRow.Cells["SIZE_MIN"].Value = ""; ultraGrid2.ActiveRow.Cells["SIZE_MAX_SIGN"].Value = ""; ultraGrid2.ActiveRow.Cells["SIZE_MAX"].Value = ""; } } //复选框相关选中事件 //勾选主表(或者取消勾选) //if (e.Cell.Column.Key.Equals("CHK") && !e.Cell.Row.HasParent()) //{ // foreach (UltraGridRow row in e.Cell.Row.ChildBands[0].Rows) // { // row.Cells["CHKC"].Value = e.Cell.Value; //从表值勾选为主表勾选值 // } //} //else //{ // //勾选从表(或者取消勾选),按理说点击其他位置,也会触发该段代码。 // int flag = 0; // foreach (UltraGridRow row in e.Cell.Row.ParentRow.ChildBands[0].Rows) // { // if (Convert.ToBoolean(row.Cells["CHKC"].Value)) // { // //从表勾选了 状态参数+1 // flag += 1; // } // } // //状态参数小于从表的行数,说明未全勾选,主表未半选状态 // if (flag < e.Cell.Row.ParentRow.ChildBands[0].Rows.Count && flag != 0) // { // e.Cell.Row.ParentRow.Cells["CHK"].Value = null; // } // else if (flag == 0) // { // //从表取消全部勾选,主表不勾选 // e.Cell.Row.ParentRow.Cells["CHK"].Value = false; // } // else // { // //否则主表为全选状态 // e.Cell.Row.ParentRow.Cells["CHK"].Value = true; // } //} SaveMSCCode(e); } private List MSCCodes = new List(); //做过操作的冶金规范码和序号 /// /// 保存操作的冶金规范码+序号 /// /// private void SaveMSCCode(CellEventArgs e) { if (e.Cell.Row.HasParent()) { if (Convert.ToBoolean(e.Cell.Row.Cells["CHKC"].Value) && !MSCCodes.Contains(e.Cell.Row.Cells["MSC"].Value.ToString() + "," + e.Cell.Row.Cells["INDEX_SEQ"].Value.ToString())) { MSCCodes.Add(e.Cell.Row.Cells["MSC"].Value.ToString() + "," + e.Cell.Row.Cells["INDEX_SEQ"].Value.ToString()); } } else if (e.Cell.Row.ChildBands[0].Rows.Count > 0) { if (Convert.ToBoolean(e.Cell.Row.Cells["CHK"].Value) && !MSCCodes.Contains(e.Cell.Row.Cells["MSC"].Value.ToString() + "," + e.Cell.Row.Cells["INDEX_SEQ"].Value.ToString())) { MSCCodes.Add(e.Cell.Row.Cells["MSC"].Value.ToString() + "," + e.Cell.Row.Cells["INDEX_SEQ"].Value.ToString()); } } } /// /// 展开某一行 /// private void ExpandRow() { foreach (UltraGridRow row in ultraGrid2.Rows) { if (MSCCodes.Contains(row.Cells["MSC"].Value.ToString() + "," + row.Cells["INDEX_SEQ"].Value.ToString())) { row.ExpandAll(); row.Activate(); } } } } }