using Core.Mes.Client.Comm.Control; using Core.Mes.Client.Comm.Server; using Core.Mes.Client.Comm.Tool; using Core.StlMes.Client.PlnSaleOrd.BaseMethod; using CoreFS.CA06; using Infragistics.Win.UltraWinGrid; using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace Core.StlMes.Client.PlnSaleOrd.炼钢计划 { public partial class AnalysisNkChemPopupLg : FrmBase { private int splitterDistance = 0; private string gradName; private string[] proPlanId; private string[] allCic; ArrayList list = null; private OpeBase ob; public AnalysisNkChemPopupLg(string[] _cic,string _gradeCode,OpeBase _ob,string[] _proPlanId,ArrayList _list) { InitializeComponent(); //ultraGrid1.DataSource = dt; gradName = _gradeCode; list = _list; proPlanId = _proPlanId; allCic = _cic; ob = _ob; BindData(_cic, _gradeCode, _proPlanId); } private void ultraToolbarsManager1_ToolClick(object sender, Infragistics.Win.UltraWinToolbars.ToolClickEventArgs e) { switch (e.Tool.Key) { case "Merging": // 合并交集 AddMerging(); break; case "Delete": // 删除交集 doDelete(); break; case "Close": //关闭 this.Close(); break; } } private void BindData(string[] cic, string gradeCode,string[] proPlanId) { //ultraGrid1.BeginUpdate(); string[] desginKey = null; string[] indexSeq = null; string[] desginKeyCic = null; string desginKey1 = ""; string indexSeq1 = ""; string desginKeyCic1 = ""; for (int i = 0; i < proPlanId.Length; i++) { DataTable dicdesikey = ServerHelper.GetData("com.steering.pss.plnsaleord.steelMarkingPlan.FrmCicIntersection.getQueryGraderCICDesgin", new object[] { proPlanId[i].ToString() }, ob); if (dicdesikey.Rows.Count > 0) { desginKey1 += dicdesikey.Rows[0]["DESGIN_KEY"].ToString()+","; indexSeq1 += dicdesikey.Rows[0]["INDEX_SEQ"].ToString()+","; desginKeyCic1 += dicdesikey.Rows[0]["CIC_GPDESG"].ToString() + ","; } else { MessageUtil.ShowTips("未找到轧管信息!"); return; } } desginKey = desginKey1.Substring(0,desginKey1.Length - 1).Split(','); indexSeq = indexSeq1.Substring(0,indexSeq1.Length - 1).Split(','); desginKeyCic = desginKeyCic1.Substring(0, desginKeyCic1.Length - 1).Split(','); DataTable dicSource = ServerHelper.GetData("com.steering.pss.plnsaleord.steelMarkingPlan.FrmCicIntersection.getQueryGraderCIC", new object[] { desginKeyCic, gradeCode, desginKey, indexSeq }, ob); //var pRows = cic.Length; //DataTable dt = new DataTable(); //dt.Columns.AddRange(new DataColumn[]{ new DataColumn("CIC"), new DataColumn("GRADENAME"), //new DataColumn("CHEM_NAME"), new DataColumn("STD_MIN_SIGN"), new DataColumn("STD_MAX_SIGN")}); //Dictionary> dicSource1 = new Dictionary>(); //for (int z = 0; z < cic.Length; z++) //{ // DataRow pDr = dt.NewRow(); // pDr["CIC"] = cic[z]; // pDr["GRADENAME"] = gradeCode; // List cDrs = new List(); // dicSource1.Add(pDr, cDrs); // DataRow[] drs = dicSource.Select("CIC='" + cic[z] + "'"); // for (int r = 0; r < drs.Length; r++) // { // DataRow dr = dt.NewRow(); // dr["CIC"] = cic[z]; // dr["GRADENAME"] = gradeCode; // dr["CHEM_NAME"] = drs[r]["CHEM_NAME"]; // dr["STD_MIN_SIGN"] = drs[r]["STDMIN_SIGN"]; // dr["STD_MAX_SIGN"] = drs[r]["STDMAX_SIGN"]; // cDrs.Add(dr); // } //} //Dictionary dicChems = new Dictionary(); //int pCount = 0; //foreach (var pDr in dicSource1.Keys) //{ // DataRow desDr = dataTable1.NewRow(); // desDr["Column1"] = pDr["CIC"]; // desDr["Column2"] = pDr["GRADENAME"]; // dataTable1.Rows.Add(desDr); // var cDrs = dicSource1[pDr]; // for (int i = 0; i < cDrs.Count; i++) // { // var cDr = cDrs[i]; // string chemName = cDr["CHEM_NAME"].ToString(); // string stdMinSign = cDr["STD_MIN_SIGN"].ToString(); // string stdMaxSign = cDr["STD_MAX_SIGN"].ToString(); // if (!dicChems.Keys.Contains(chemName)) // { // dicChems.Add(chemName, dicChems.Keys.Count); // } // int groupIndex = dicChems[chemName]; // ultraGrid1.DisplayLayout.Bands[0].Groups[groupIndex].Header.Caption = chemName; // ultraGrid1.DisplayLayout.Bands[0].Columns[(groupIndex + 1) * 2 ].Header.Caption = "下限"; // ultraGrid1.DisplayLayout.Bands[0].Columns[(groupIndex + 1) * 2 + 1].Header.Caption = "上限"; // //ultraGrid1.DisplayLayout.Bands[0].Columns[(groupIndex + 1) * 4 - 2 + 2].Header.Caption = "符号"; // //ultraGrid1.DisplayLayout.Bands[0].Columns[(groupIndex + 1) * 4 - 2 + 3].Header.Caption = "上限"; // ultraGrid1.Rows[pCount].Cells[(groupIndex + 1) * 2 ].Value = stdMinSign; // ultraGrid1.Rows[pCount].Cells[(groupIndex + 1) * 2 + 1].Value = stdMaxSign; // //ultraGrid1.Rows[pCount].Cells[(groupIndex + 1) * 4 - 2 + 2].Value = stdMaxSign; // //ultraGrid1.Rows[pCount].Cells[(groupIndex + 1) * 4 - 2 + 3].Value = stdMax; // } // pCount++; //} //foreach (var group in ultraGrid1.DisplayLayout.Bands[0].Groups) //{ // int result = 0; // string str = group.Header.Caption.Substring(group.Header.Caption.Length - 1); // if (int.TryParse(str, out result)) // { // group.Hidden = true; // } //} //if (ultraGrid1.Rows.Count > 0) //{ // ultraGrid1.Rows[0].Cells["Chk"].Value = true; // Compare(ultraGrid1.Rows[0]); //} if (dicSource.Rows.Count <= 0) return; DataTable dat = GetCrossTable(dicSource, gradeCode, list).AsEnumerable().OrderBy(p => int.Parse(p["生产顺序号"].ToString())).ThenBy(p => p["钢种索引码"].ToString()).CopyToDataTable(); //SteelHelper.GetNewDataTable(GetCrossTable(dicSource, gradeCode, list), "1=1", "钢种索引码 ASC"); ultraGrid1.DataSource = dat; ultraGrid1.DataBind(); GridHelper.RefreshAndAutoSize(ultraGrid1); //ultraGrid1.EndUpdate(); //ultraGrid1.UpdateData(); this.ultraGrid1.DisplayLayout.Bands[0].Columns["钢种索引码"].MergedCellStyle = MergedCellStyle.Always; this.ultraGrid1.DisplayLayout.Bands[0].Columns["钢种"].MergedCellStyle = MergedCellStyle.Always; this.ultraGrid1.DisplayLayout.Bands[0].Columns["生产顺序号"].MergedCellStyle = MergedCellStyle.Always; this.ultraGrid1.DisplayLayout.Bands[0].Columns["内控标准"].MergedCellStyle = MergedCellStyle.Always; this.ultraGrid1.DisplayLayout.Bands[0].Columns["类型"].MergedCellStyle = MergedCellStyle.Always; this.ultraGrid1.DisplayLayout.Bands[0].Columns["铸造订单号"].Hidden = true; this.ultraGrid1.DisplayLayout.Bands[0].Columns["生产顺序号"].Hidden = true; foreach (UltraGridRow row in ultraGrid1.Rows) { row.Cells["选择"].Style = Infragistics.Win.UltraWinGrid.ColumnStyle.CheckBox; if (row.Cells["类型"].Text.Equals("基础数据")) { row.Cells["上下限"].Appearance.BackColor = Color.FromArgb(255, 255, 192); } } BaseHelper.ForbidSort(ultraGrid1); } public static DataTable GetCrossTable(DataTable dt, string gradeCode, ArrayList listarr) { if (dt == null || dt.Columns.Count != 8 || dt.Rows.Count == 0) { return dt; } else { DataTable result = new DataTable(); result.Columns.Add("选择"); result.Columns.Add("类型"); result.Columns.Add("钢种"); result.Columns.Add("生产顺序号"); result.Columns.Add("铸造订单号"); result.Columns.Add("内控标准"); result.Columns.Add("钢种索引码"); result.Columns.Add("上下限"); DataTable dtColumns = dt.DefaultView.ToTable("dtColumns", true, dt.Columns[1].ColumnName); for (int i = 0; i < dtColumns.Rows.Count; i++) { string colName; if (dtColumns.Rows[1][0] is DateTime) { colName = Convert.ToDateTime(dtColumns.Rows[i][0]).ToString(); } else { colName = dtColumns.Rows[i][0].ToString(); } result.Columns.Add(colName); result.Columns[i + 1].DefaultValue = ""; } DataTable distinct_object = dt.DefaultView.ToTable(true, "CIC"); if (distinct_object.Rows.Count <= 0) { return result; } int count = 1; for (int i = 0; i < distinct_object.Rows.Count; i++) { for (int j = 0; j < listarr.Count; j++) { DataRow drNew = result.NewRow(); ArrayList list = (ArrayList)listarr[j]; string proPlanId = list[1].ToString(); string shenc = list[2].ToString(); string cic = list[0].ToString(); string stytechem = list[3].ToString(); if (!distinct_object.Rows[i]["CIC"].ToString().Equals(cic) && stytechem.Equals("工艺评审")) continue; DataRow[] drs = null; if (stytechem.Equals("工艺评审")) { drs = dt.Select("CIC='" + cic + "' AND STYTECHEM='工艺评审'"); if (drs == null || drs.Length <= 0) { MessageUtil.ShowTips("无工艺评审结果索引码CIC成分!"); continue; } } else { if (count > 1) continue; drs = dt.Select("STYTECHEM='基础数据'"); if (drs == null || drs.Length <= 0) continue; } drNew[0] = "false"; drNew[1] = drs[0][5]; drNew[2] = gradeCode; drNew[3] = shenc; drNew[4] = proPlanId; drNew[5] = drs[0][4]; drNew[6] = drs[0][0]; drNew[7] = "下限"; string rowName = drNew[6].ToString(); foreach (DataRow dr in drs) { string colName = dr[1].ToString(); string dValue1 = dr[2].ToString(); if (dr[0].ToString().Equals(rowName, StringComparison.CurrentCultureIgnoreCase)) { drNew[colName] = dValue1.ToString(); } else { result.Rows.Add(drNew); drNew = result.NewRow(); drNew[2] = dr[0]; rowName = drNew[0].ToString(); drNew[colName] = dValue1.ToString(); } } result.Rows.Add(drNew); drNew = result.NewRow(); drNew[0] = "false"; drNew[1] = drs[0][5]; drNew[2] = gradeCode; drNew[3] = shenc; drNew[4] = proPlanId; drNew[5] = drs[0][4]; drNew[6] = drs[0][0]; drNew[7] = "上限"; foreach (DataRow dr in drs) { string colName = dr[1].ToString(); string dValue2 = dr[3].ToString(); if (dr[0].ToString().Equals(rowName, StringComparison.CurrentCultureIgnoreCase)) { drNew[colName] = dValue2.ToString(); } else { result.Rows.Add(drNew); drNew = result.NewRow(); drNew[1] = dr[0]; rowName = drNew[1].ToString(); drNew[colName] = dValue2.ToString(); } } result.Rows.Add(drNew); } count++; } return result; } } private void Compare(UltraGridRow chkRow) { foreach (var row in ultraGrid1.Rows) { string max = chkRow.Cells["上下限"].Value.ToString(); if (max.Equals(row.Cells["上下限"].Value.ToString())) { for (int i = 8; i < row.Cells.Count; i++) { var cell = row.Cells[i]; //if (cell.Column.Header.Caption == "上下限") //{ if (cell.Value.ToString() != chkRow.GetValue(cell.Column.Key)) { cell.Appearance.BackColor = Color.FromArgb(255, 106, 106); } else { cell.Appearance.BackColor = row.Cells[0].Appearance.BackColor; } //} } } else { for (int i = 7; i < row.Cells.Count; i++) { var cell = row.Cells[i]; cell.Appearance.BackColor = row.Cells[0].Appearance.BackColor; } } if (row.Cells["类型"].Text.Equals("基础数据")) { row.Cells["上下限"].Appearance.BackColor = Color.FromArgb(255, 255, 192); } } } private void ultraExpandableGroupBox2_ExpandedStateChanged(object sender, EventArgs e) { if (ultraExpandableGroupBox2.Expanded == false) { this.splitContainer1.SplitterDistance = splitContainer1.Size.Height - 26; } else { this.splitContainer1.SplitterDistance = splitterDistance == 0 ? splitContainer1.Size.Height / 2 : splitterDistance; } } private void ultraExpandableGroupBox1_ExpandedStateChanged(object sender, EventArgs e) { if (ultraExpandableGroupBox1.Expanded == false) { this.splitContainer1.SplitterDistance = 26; } else { this.splitContainer1.SplitterDistance = splitterDistance == 0 ? splitContainer1.Size.Height / 2 : splitterDistance; } } private void ultraGrid1_AfterRowActivate(object sender, EventArgs e) { UltraGridRow row = ultraGrid1.ActiveRow; if (row == null) return; Compare(row); doMerging(row.Cells["钢种索引码"].Text.ToString(), row.Cells["铸造订单号"].Text.ToString()); } /// /// 查询交集 /// private void doMerging(string meCic,string proPlanId) { DataTable dicSource = ServerHelper.GetData("com.steering.pss.plnsaleord.steelMarkingPlan.FrmCicIntersection.getQueryGraderAllCIC", new object[] { meCic, proPlanId }, ob); if (dicSource.Rows.Count <= 0) { DataTable da = new DataTable(); ultraGrid2.DataSource = da; return; } DataTable dat = GetAddCrossTable(dicSource, gradName); ultraGrid2.DataSource = dat; ultraGrid2.DataBind(); GridHelper.RefreshAndAutoSize(ultraGrid2); foreach (UltraGridRow row in ultraGrid2.Rows) { row.Cells["选择"].Style = Infragistics.Win.UltraWinGrid.ColumnStyle.CheckBox; } this.ultraGrid2.DisplayLayout.Bands[0].Columns["钢种索引码"].MergedCellStyle = MergedCellStyle.Always; this.ultraGrid2.DisplayLayout.Bands[0].Columns["钢种"].MergedCellStyle = MergedCellStyle.Always; //this.ultraGrid2.DisplayLayout.Bands[0].Columns["选择"].Header.CheckBoxVisibility =HeaderCheckBoxVisibility.Always; BaseHelper.ForbidSort(ultraGrid2); } /// /// 新增索引码交集 /// private void AddMerging() { UltraGridRow row = ultraGrid1.ActiveRow; if (row == null) return; int counChk = 0; string cic = ""; int cicCount = 0; ArrayList list = new ArrayList(); foreach (UltraGridRow urg in ultraGrid1.Rows) { ArrayList list1 = new ArrayList(); if (Convert.ToBoolean(urg.Cells["选择"].Value) == true) { counChk++; if (cic.Equals("")||!cic.Equals(urg.Cells["钢种索引码"].Text.ToString())) { cicCount++; if (urg.Cells["类型"].Text.ToString().Equals("基础数据")) { MessageUtil.ShowTips("基础数据类型不能合并交集!"); return; } cic = urg.Cells["钢种索引码"].Text.ToString(); list1.Add(urg.Cells["钢种索引码"].Text.ToString()); list1.Add(urg.Cells["铸造订单号"].Text.ToString()); list.Add(list1); } } } if (counChk == 0) { MessageUtil.ShowTips("请勾选单索引码元素数据!"); return; } if (cicCount == 1) { MessageUtil.ShowTips("请勾选多个钢种索引码数据!"); return; } PlanComm.WaitFromOpen(this.Cursor); CoreClientParam ccp = new CoreClientParam(); ccp.ServerName = "com.steering.pss.plnsaleord.steelMarkingPlan.FrmCicIntersection"; ccp.MethodName = "addMerging"; ccp.ServerParams = new object[] { list }; ccp = ob.ExecuteNonQuery(ccp, CoreInvokeType.Internal); PlanComm.WaitFromColse(this.Cursor); if (ccp.ReturnCode == -1) return; MessageUtil.ShowTips(ccp.ReturnInfo); if (ccp.ReturnInfo.Equals("合并交集成功!")) { BindData(allCic, gradName, proPlanId); } } public static DataTable GetAddCrossTable(DataTable dt, string gradeCode) { if (dt == null || dt.Columns.Count !=5 || dt.Rows.Count == 0) { return dt; } else { DataTable result = new DataTable(); result.Columns.Add("选择"); result.Columns.Add("钢种"); result.Columns.Add("铸造订单号"); result.Columns.Add("钢种索引码"); result.Columns.Add("上下限"); DataTable dtColumns = dt.DefaultView.ToTable("dtColumns", true, dt.Columns[2].ColumnName); for (int i = 0; i < dtColumns.Rows.Count; i++) { string colName; if (dtColumns.Rows[1][0] is DateTime) { colName = Convert.ToDateTime(dtColumns.Rows[i][0]).ToString(); } else { colName = dtColumns.Rows[i][0].ToString(); } result.Columns.Add(colName); result.Columns[i + 1].DefaultValue = ""; } DataTable distinct_object = dt.DefaultView.ToTable(true, "CIC"); if (distinct_object.Rows.Count <= 0) { return result; } for (int i = 0; i < distinct_object.Rows.Count; i++) { string cic = distinct_object.Rows[i]["CIC"].ToString(); DataRow[] drs = dt.Select("CIC='" + cic + "'"); DataRow drNew = result.NewRow(); drNew[0] = "false"; drNew[1] = gradeCode; drNew[2] = drs[0][0]; drNew[3] = drs[0][1]; drNew[4] = "下限"; string rowName = drNew[3].ToString(); foreach (DataRow dr in drs) { string colName = dr[2].ToString(); string dValue1 = dr[3].ToString(); if (dr[1].ToString().Equals(rowName, StringComparison.CurrentCultureIgnoreCase)) { drNew[colName] = dValue1.ToString(); } else { result.Rows.Add(drNew); drNew = result.NewRow(); drNew[2] = dr[0]; rowName = drNew[0].ToString(); drNew[colName] = dValue1.ToString(); } } result.Rows.Add(drNew); drNew = result.NewRow(); drNew[0] = "false"; drNew[1] = gradeCode; drNew[2] = drs[0][0]; drNew[3] = drs[0][1]; drNew[4] = "上限"; foreach (DataRow dr in drs) { string colName = dr[2].ToString(); string dValue2 = dr[4].ToString(); if (dr[1].ToString().Equals(rowName, StringComparison.CurrentCultureIgnoreCase)) { drNew[colName] = dValue2.ToString(); } else { result.Rows.Add(drNew); drNew = result.NewRow(); drNew[1] = dr[0]; rowName = drNew[1].ToString(); drNew[colName] = dValue2.ToString(); } } result.Rows.Add(drNew); } return result; } } private void doDelete() { UltraGridRow row = ultraGrid2.ActiveRow; if (row == null) return; int counChk = 0; string cic = ""; ArrayList list = new ArrayList(); foreach (UltraGridRow urg in ultraGrid2.Rows) { ArrayList list1 = new ArrayList(); if (Convert.ToBoolean(urg.Cells["选择"].Value) == true) { counChk++; if (cic.Equals("") || !cic.Equals(urg.Cells["钢种索引码"].Text.ToString())) { cic = urg.Cells["钢种索引码"].Text.ToString(); list1.Add(urg.Cells["钢种索引码"].Text.ToString()); list1.Add(urg.Cells["铸造订单号"].Text.ToString()); list.Add(list1); } } } if (counChk == 0) { MessageUtil.ShowTips("请勾选交集索引码元素数据!"); return; } PlanComm.WaitFromOpen(this.Cursor); CoreClientParam ccp = new CoreClientParam(); ccp.ServerName = "com.steering.pss.plnsaleord.steelMarkingPlan.FrmCicIntersection"; ccp.MethodName = "doDelete"; ccp.ServerParams = new object[] { list }; ccp = ob.ExecuteNonQuery(ccp, CoreInvokeType.Internal); PlanComm.WaitFromColse(this.Cursor); if (ccp.ReturnCode == -1) return; MessageUtil.ShowTips(ccp.ReturnInfo); if (ccp.ReturnInfo.Equals("删除交集成功!")) { BindData(allCic, gradName, proPlanId); } } } }