using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Data; using ICSharpCode.Core; using Mesnac.Controls.Base; using Mesnac.Action.Base; using Mesnac.Codd.Session; using Mesnac.Action.ChemicalWeighing.Entity; using Mesnac.Action.ChemicalWeighing.Technical; namespace Mesnac.Action.ChemicalWeighing.Technical.PmtRecipe { public class RefreshAction : ChemicalWeighingAction,IAction { #region 事件定义 /// /// 刷新计划事件 /// public static event EventHandler OnRefreshRecipe; #endregion #region 字段定义 private static bool IsFirstRun = true; //是否首次执行 private RuntimeParameter _runtime; private DbMCControl _clientGridControl = null; //配方树控件 private DbMCControl _materialControl = null; //配方关联物料信息控件 private DbMCControl _recipeGridControl = null; // 配方信息控件 #endregion #region IAction接口实现 public void Run(RuntimeParameter runtime) { base.RunIni(runtime); //必须要调用的 this._runtime = runtime; ICSharpCode.Core.LoggingService.Debug("配方管理—刷新配方业务..."); #region 事件订阅 if (true) { //通用调用刷新计划事件订阅 Mesnac.Basic.InvokeHelper.OnRefreshRecipe -= Process_Event; Mesnac.Basic.InvokeHelper.OnRefreshRecipe += Process_Event; //添加计划后,要刷新计划 InsertAction.OnInsertRecipe -= Process_Event; InsertAction.OnInsertRecipe += Process_Event; //删除计划后,要刷新本地计划 DeleteAction.OnDeleteRecipe -= Process_Event; DeleteAction.OnDeleteRecipe += Process_Event; //修改次数数后,要刷新本地计划 ModifyRecipeAction.OnModifyRecipe -= Process_Event; ModifyRecipeAction.OnModifyRecipe += Process_Event; SetCratParam.OnSetCratParam -= SetCartPrarm_Event; SetCratParam.OnSetCratParam += SetCartPrarm_Event; IsFirstRun = false; } #endregion List recipeControlList = this.GetDbMCControlByKey(Mesnac.Basic.DataSourceFactory.MCDbType.Local, "Base_RecipeInfo"); DbMCControl clientGridControl = recipeControlList.Where(x => x.BaseControl is TreeView).FirstOrDefault(); if (clientGridControl == null || !(clientGridControl.BaseControl is TreeView)) { ICSharpCode.Core.LoggingService.Error("{配方管理—刷新配方}缺少配方树网格控件..."); return; } DbMCControl recipeGridControl = recipeControlList.Where(x => x.BaseControl is DataGridView).FirstOrDefault(); if (recipeGridControl == null || !(recipeGridControl.BaseControl is DataGridView)) { ICSharpCode.Core.LoggingService.Error("{配方管理—刷新配方}缺少配方信息网格控件..."); return; } DbMCControl materialGridControl = this.GetDbMCControlByKey(Mesnac.Basic.DataSourceFactory.MCDbType.Local, "Base_RecipeMaterial").FirstOrDefault(); //获取配方管理控件 if (materialGridControl == null || !(materialGridControl.BaseControl is DataGridView)) { ICSharpCode.Core.LoggingService.Error("{配方管理—刷新配方}缺少物料信息网格控件..."); return; } this._clientGridControl = clientGridControl; this._materialControl = materialGridControl; this._recipeGridControl = recipeGridControl; this.DoWork(); } #endregion #region 方法定义 /// /// 刷新计划 /// protected void DoWork() { #region 业务实现 string equipCode = base.CurrEquipCode; //当前机台 //配方树初始化 DataTable dataTable = RecipeHelper.GetBaseRecipeInfo(""); TreeNode tn = new TreeNode(); tn.Name = "全部"; tn.Text = "全部"; //将数据集加载到树形控件当中 foreach (DataRow row in dataTable.Rows) { string strValue = row["recipe_Type"].ToString(); if (tn.Nodes.Count > 0) { if (!tn.Nodes.ContainsKey(strValue)) { BindTreeData(tn, dataTable, strValue); } } else { BindTreeData(tn, dataTable, strValue); } } TreeView treeView = (this._clientGridControl.BaseControl as TreeView); treeView.Nodes.Clear(); treeView.Nodes.Add(tn); treeView.ExpandAll(); //配方信息初始化 lock (String.Empty) { if (this._recipeGridControl != null && this._recipeGridControl.BaseControl != null) { this._recipeGridControl.BaseControl.BindDataSource = null; this._recipeGridControl.BaseControl.BindDataSource = dataTable; } else { ICSharpCode.Core.LoggingService.Warn("刷新配方信息失败:配方信息控件为Null..."); } } //配方关联物料信息初始化 DataTable materialDataTable = RecipeHelper.GetRecipeMaterialInfo(""); lock (String.Empty) { if (this._materialControl != null && this._materialControl.BaseControl != null) { this._materialControl.BaseControl.BindDataSource = null; this._materialControl.BaseControl.BindDataSource = materialDataTable; } else { ICSharpCode.Core.LoggingService.Warn("刷新配方信息失败:物料信息控件为Null..."); } } #endregion #region 触发事件, 刷新客户端计划 if (OnRefreshRecipe != null) { OnRefreshRecipe(this._runtime.BaseControl.MCRoot, System.EventArgs.Empty); } #endregion } private void BindTreeData(TreeNode tn, DataTable dtData, string strValue) { TreeNode tn1 = new TreeNode(); tn1.Name = strValue; tn1.Text = strValue; tn.Nodes.Add(tn1); DataRow[] rows = dtData.Select(string.Format("recipe_Type='{0}'", strValue)); if (rows.Length > 0) { foreach (DataRow dr in rows) { TreeNode tn2 = new TreeNode(); tn2.Name = dr["recipe_Id"].ToString(); tn2.Text = dr["recipe_Name"].ToString(); tn1.Nodes.Add(tn2); } } } #endregion #region 事件处理方法 private void Process_Event(object sender, EventArgs e) { if (sender is RuntimeParameter) { this.Run(sender as RuntimeParameter); } else { this.refresh(this._runtime); } } #endregion private void SetCartPrarm_Event(object sender, EventArgs e) { this.refresh(this._runtime); ICSharpCode.Core.LoggingService.Debug("配方管理—刷新配方业务..."); //获取所有控件 List recipeControlList = this.GetDbMCControlByKey(Mesnac.Basic.DataSourceFactory.MCDbType.Local, "Base_RecipeInfo"); DbMCControl clientGridControl = recipeControlList.Where(x => x.BaseControl is TreeView).FirstOrDefault(); if (clientGridControl == null || !(clientGridControl.BaseControl is TreeView)) { ICSharpCode.Core.LoggingService.Error("{配方管理—刷新配方}缺少配方树网格控件..."); return; } DbMCControl recipeGridControl = recipeControlList.Where(x => x.BaseControl is DataGridView).FirstOrDefault(); if (recipeGridControl == null || !(recipeGridControl.BaseControl is DataGridView)) { ICSharpCode.Core.LoggingService.Error("{配方管理—刷新配方}缺少配方信息网格控件..."); return; } DbMCControl materialGridControl = this.GetDbMCControlByKey(Mesnac.Basic.DataSourceFactory.MCDbType.Local, "Base_RecipeMaterial").FirstOrDefault(); //获取配方管理控件 if (materialGridControl == null || !(materialGridControl.BaseControl is DataGridView)) { ICSharpCode.Core.LoggingService.Error("{配方管理—刷新配方}缺少物料信息网格控件..."); return; } DbMCControl cartParamGridControl = this.GetDbMCControlByKey(Mesnac.Basic.DataSourceFactory.MCDbType.Local, "Base_CratParam").FirstOrDefault(); //获取配方管理控件 if (cartParamGridControl == null || !(cartParamGridControl.BaseControl is DataGridView)) { ICSharpCode.Core.LoggingService.Error("{配方管理—刷新配方}缺少物料参数信息网格控件..."); return; } //根据选中的配方编号刷新物料信息、工艺参数 TreeView clientGridView = clientGridControl.BaseControl as TreeView; DataGridView dataGridView = cartParamGridControl.BaseControl as DataGridView; string recipeCode = clientGridView.SelectedNode.Name as string; string materialCode = dataGridView.SelectedRows[0].Cells["material_Id"].Value as string; DataTable info = RecipeHelper.GetCratParamByRecipeAndMaterial(recipeCode, materialCode); lock (String.Empty) { if (cartParamGridControl != null && cartParamGridControl.BaseControl != null) { cartParamGridControl.BaseControl.BindDataSource = null; cartParamGridControl.BaseControl.BindDataSource = info; } else { ICSharpCode.Core.LoggingService.Warn("刷新配方信息失败:物料信息控件为Null..."); } } } private void refresh(RuntimeParameter runtime) { ICSharpCode.Core.LoggingService.Debug("配方管理—刷新配方业务..."); //获取所有控件 List recipeControlList = this.GetDbMCControlByKey(Mesnac.Basic.DataSourceFactory.MCDbType.Local, "Base_RecipeInfo"); DbMCControl clientGridControl = recipeControlList.Where(x => x.BaseControl is TreeView).FirstOrDefault(); if (clientGridControl == null || !(clientGridControl.BaseControl is TreeView)) { ICSharpCode.Core.LoggingService.Error("{配方管理—刷新配方}缺少配方树网格控件..."); return; } DbMCControl recipeGridControl = recipeControlList.Where(x => x.BaseControl is DataGridView).FirstOrDefault(); if (recipeGridControl == null || !(recipeGridControl.BaseControl is DataGridView)) { ICSharpCode.Core.LoggingService.Error("{配方管理—刷新配方}缺少配方信息网格控件..."); return; } DbMCControl materialGridControl = this.GetDbMCControlByKey(Mesnac.Basic.DataSourceFactory.MCDbType.Local, "Base_RecipeMaterial").FirstOrDefault(); //获取配方管理控件 if (materialGridControl == null || !(materialGridControl.BaseControl is DataGridView)) { ICSharpCode.Core.LoggingService.Error("{配方管理—刷新配方}缺少物料信息网格控件..."); return; } //根据选中的配方编号刷新物料信息、工艺参数 TreeView clientGridView = clientGridControl.BaseControl as TreeView; string selectRecipeName = clientGridView.SelectedNode.Name as string; DataTable info = RecipeHelper.GetRecipeMaterialInfo(selectRecipeName); lock (String.Empty) { if (this._materialControl != null && this._materialControl.BaseControl != null) { this._materialControl.BaseControl.BindDataSource = null; this._materialControl.BaseControl.BindDataSource = info; } else { ICSharpCode.Core.LoggingService.Warn("刷新配方信息失败:物料信息控件为Null..."); } } } } }