/******************************************************************************* * Copyright(c) 2014 dongke All rights reserved. / Confidential * 类的信息: * 1.程序名称:F_MST_0302.cs * 2.功能描述:窑车管理 * 编辑履历: * 作者 日期 版本 修改内容 * 任海 2014/09/01 1.00 新建 *******************************************************************************/ using System; using System.Data; using System.Text; using System.Windows.Forms; using System.Collections; using Dongke.IBOSS.PRD.Basics.BaseResources; using Dongke.IBOSS.PRD.Client.CommonModule; using Dongke.IBOSS.PRD.Basics.BaseControls; using Dongke.IBOSS.PRD.WCF.Proxys; using Dongke.IBOSS.PRD.Basics.Library; using Dongke.IBOSS.PRD.Client.DataModels; namespace Dongke.IBOSS.PRD.Client.SystemModule { /// /// 窑车管理 /// public partial class F_MST_0302 : FormBase { #region 成员变量 // 窗体的单例模式 private static F_MST_0302 _instance; // 窑炉Treeview改变前的状态 private Hashtable _nodesStatus = new Hashtable(); // 窑炉TreeView选中节点的路径 private string _selectNodeFullPath; // 窑炉TreeView选中节点的名称 private string _selectNode; // 窑炉数据源 private DataTable _dtSourse; #endregion #region 属性 /// /// 窑炉TreeView改变前的状态 /// public Hashtable NodesStatus { get { return _nodesStatus; } set { _nodesStatus = value; } } /// /// 窑炉TreeView选中节点的路径 /// public string SelectNodeFullPath { get { return _selectNodeFullPath; } set { _selectNodeFullPath = value; } } #endregion #region 构造函数 /// /// 窗体的构造函数 /// public F_MST_0302() { InitializeComponent(); // 窗体标题文字 this.Text = FormTitles.F_MST_0302; // 按钮 this.btnSave.Text = ButtonText.BTN_SAVE; this.btnCancel.Text = ButtonText.BTN_CLOSE; } #endregion #region 单例模式 /// /// 单例模式,防止重复创建窗体 /// public static F_MST_0302 Instance { get { if (_instance == null) { _instance = new F_MST_0302(); } return _instance; } } #endregion #region 事件 /// /// 窗体加载时发生 /// /// /// private void F_MST_0302_Load(object sender, EventArgs e) { try { FormPermissionManager.FormPermissionControl(this.Name, this, LogInUserInfo.CurrentUser.CurrentUserEntity.UserRightData, LogInUserInfo.CurrentUser.CurrentUserEntity.FunctionData); // 设置保存按钮初始是不可点击 this.btnSave.Enabled = false; // 生成窑车树形结构 this.CreateKilnTree(); this.GetAllKilnCar(); this.RefreshDataGridViewData(); this.dgvKilnCar.IsSetInputColumnsColor = true; this.dgvKilnCar.SelectionMode = DataGridViewSelectionMode.RowHeaderSelect; } catch (Exception ex) { // 对异常进行共通处理 ExceptionManager.HandleEventException(this.ToString(), System.Reflection.MethodBase.GetCurrentMethod().Name, this.Text, ex); } } /// /// 节点收缩之后,显示关闭图标 /// /// /// private void tvwKiln_AfterCollapse(object sender, TreeViewEventArgs e) { e.Node.SelectedImageIndex = Constant.INT_IS_ZERO; e.Node.ImageIndex = Constant.INT_IS_ZERO; } /// /// 节点展开之后,显示打开图标 /// /// /// private void tvwKiln_AfterExpand(object sender, TreeViewEventArgs e) { e.Node.SelectedImageIndex = Constant.INT_IS_TWO; e.Node.ImageIndex = Constant.INT_IS_TWO; } /// /// 选中新行时,设置默认值 /// /// /// private void dgvKiln_DefaultValuesNeeded(object sender, DataGridViewRowEventArgs e) { // 设置有效列为选中状态 e.Row.Cells["ValueFlag"].Value = Constant.INT_IS_ONE; // 增加一行时,给窑炉赋值 e.Row.Cells["KilnID"].Value = tvwkiln.SelectedNode.Tag.ToString(); } /// /// 选择窑炉TreeView中的节点前判断,如果数据有改变提示保存 /// /// /// private void tvwKiln_BeforeSelect(object sender, TreeViewCancelEventArgs e) { try { // 判断数据是否被修改过,修改过需要提示保存消息 if (DataJudge.IsChange((DataTable)this.dgvKilnCar.DataSource)) { DialogResult dialogResult = MessageBox.Show(Messages.MSG_CMN_Q001, this.Text, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question); if (dialogResult == DialogResult.Yes) { int rowCount = (int)DoAsync(new BaseAsyncMethod(SaveKilnCarData)); // 保存数据后提示 if (rowCount > Constant.INT_IS_ZERO) { // 保存数据成功 this.btnSave.Enabled = false; //this._dtSourse.AcceptChanges(); MessageBox.Show(string.Format(Messages.MSG_CMN_I001, "窑车", "保存"), this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); // 生成窑车树形结构 TreeNode selectedNode = this.tvwkiln.SelectedNode; this.tvwkiln.SelectedNode = selectedNode; // 还原保存前窑炉TreeView的状态 SetTreeNodesStatus(this.tvwkiln.Nodes); } else { // 保存数据失败 MessageBox.Show(string.Format(Messages.MSG_CMN_W001, "窑车", "保存"), this.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning); } } else if (dialogResult == DialogResult.Cancel) { e.Cancel = true; } } } catch (Exception ex) { // 对异常进行共通处理 ExceptionManager.HandleEventException(this.ToString(), System.Reflection.MethodBase.GetCurrentMethod().Name, this.Text, ex); } } /// /// 选择窑炉TreeView中的节点,DataGridView中显示相应的数据 /// /// /// private void tvwkiln_AfterSelect(object sender, TreeViewEventArgs e) { try { // 刷新DataGridView中的数据 //this._dtSourse.AcceptChanges(); this.GetAllKilnCar(); this.RefreshDataGridViewData(); this.dgvKilnCar.IsSetInputColumnsColor = true; } catch (Exception ex) { // 对异常进行共通处理 ExceptionManager.HandleEventException(this.ToString(), System.Reflection.MethodBase.GetCurrentMethod().Name, this.Text, ex); } } /// /// 单元格输入是否重复的校验 /// /// /// private void dgvKilnCar_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) { try { if (this.ActiveControl != null && "btnClose".Equals(this.ActiveControl.Name)) { return; } //判断是否存在相同的编码 if (!this.dgvKilnCar.CurrentRow.IsNewRow) { DataGridViewRow rowItem = this.dgvKilnCar.Rows[e.RowIndex]; DataGridViewColumn columnItem = this.dgvKilnCar.Columns[e.ColumnIndex]; object value = rowItem.Cells[columnItem.Name].EditedFormattedValue; // 窑车编码 if ("KilnCarCode".Equals(columnItem.Name)) { if (value != null || !string.IsNullOrEmpty(value.ToString().Trim())) { if (!this.IsUnique(value.ToString(), this.dgvKilnCar.CurrentRow.Index)) { // 增加单元格的错误消息 this.dgvKilnCar.CurrentRow.ErrorText = string.Format(Messages.MSG_CMN_W006, "窑车编码"); e.Cancel = true; return; } } } // 清除单元格的错误消息 this.dgvKilnCar.CurrentRow.ErrorText = string.Empty; } this.dgvKilnCar.IsSetInputColumnsColor = true; } catch (Exception ex) { // 对异常进行共通处理 ExceptionManager.HandleEventException(this.ToString(), System.Reflection.MethodBase.GetCurrentMethod().Name, this.Text, ex); } } /// /// 行离开时校验不能为空的项目 /// /// /// private void dgvKilnCar_RowValidating(object sender, DataGridViewCellCancelEventArgs e) { try { // 按Esc键时不校验 if (!this.dgvKilnCar.IsCurrentRowDirty) { this.dgvKilnCar.IsSetInputColumnsColor = true; return; } DataGridViewRow row = this.dgvKilnCar.CurrentRow; if (!row.IsNewRow) { // 窑车名称不能为空 if (row.Cells["KilnCarName"].Value == null || string.IsNullOrEmpty(row.Cells["KilnCarName"].Value.ToString().Trim())) { // 增加单元格的错误消息 this.dgvKilnCar.CurrentRow.ErrorText = string.Format(Messages.MSG_CMN_W005, "窑车名称"); e.Cancel = true; return; } // 过滤多余空格 row.Cells["KilnCarName"].Value = row.Cells["KilnCarName"].Value.ToString().Trim(); row.Cells["Remarks"].Value = row.Cells["Remarks"].Value.ToString().Trim(); // 清除单元格的错误消息 this.dgvKilnCar.CurrentRow.ErrorText = string.Empty; } } catch (Exception ex) { // 对异常进行共通处理 ExceptionManager.HandleEventException(this.ToString(), System.Reflection.MethodBase.GetCurrentMethod().Name, this.Text, ex); } } /// /// 设置保存按钮的可用状态 /// /// /// private void dgvKilnCar_CellValidated(object sender, DataGridViewCellEventArgs e) { try { this.RefreshSaveBtnStatus(); } catch (Exception ex) { // 对异常进行共通处理 ExceptionManager.HandleEventException(this.ToString(), System.Reflection.MethodBase.GetCurrentMethod().Name, this.Text, ex); } } /// /// 设置保存按钮的可用状态 /// /// /// private void dgvKilnCar_RowValidated(object sender, DataGridViewCellEventArgs e) { try { this.RefreshSaveBtnStatus(); } catch (Exception ex) { // 对异常进行共通处理 ExceptionManager.HandleEventException(this.ToString(), System.Reflection.MethodBase.GetCurrentMethod().Name, this.Text, ex); } } /// /// 显示停用记录事件 /// /// /// private void chkDisplayDisabledData_CheckedChanged(object sender, EventArgs e) { try { this.RefreshDataGridViewData(); this.RefreshSaveBtnStatus(); this.dgvKilnCar.IsSetInputColumnsColor = true; } catch (Exception ex) { // 对异常进行共通处理 ExceptionManager.HandleEventException(this.ToString(), System.Reflection.MethodBase.GetCurrentMethod().Name, this.Text, ex); } } /// /// 单元格输入时,给自动生成的行设置颜色 /// /// /// private void dgvKilnCar_UserAddedRow(object sender, DataGridViewRowEventArgs e) { this.dgvKilnCar.IsSetInputColumnsColor = true; } /// /// 自动生成窑车种类编码 /// /// /// private void Table_SelectNewRow(object sender, DataTableNewRowEventArgs e) { try { DataTable itemTable = sender as DataTable; if (itemTable != null && itemTable.Rows.Count > Constant.INT_IS_ZERO) { e.Row["KilnID"] = this.tvwkiln.SelectedNode.Name; } } catch (Exception ex) { // 对异常进行共通处理 ExceptionManager.HandleEventException(this.ToString(), System.Reflection.MethodBase.GetCurrentMethod().Name, this.Text, ex); } } /// /// 保存窑车种类数据 /// /// /// private void btnSave_Click(object sender, EventArgs e) { try { //判断保存时单元格必输项不能为空 int results = Conservation(); if (results == Constant.INT_IS_ONE) { MessageBox.Show(string.Format(Messages.MSG_CMN_W005, "窑车编码"), this.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning); this.btnSave.Enabled = false; return; } if (results == Constant.INT_IS_TWO) { MessageBox.Show(string.Format(Messages.MSG_CMN_W005, "窑车名称"), this.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning); this.btnSave.Enabled = false; return; } // 异步处理 this.btnSave.Enabled = false; this.btnCancel.Enabled = false; int result = (int)DoAsync(new BaseAsyncMethod(SaveKilnCarData)); this.btnSave.Enabled = true; this.btnCancel.Enabled = true; // 窑车数据保存成功 if (result == Constant.INT_IS_TWO) { MessageBox.Show(string.Format(Messages.MSG_CMN_I001, "窑车", "保存"), this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); // 加载窑车管理数据 this._dtSourse.AcceptChanges(); this.btnSave.Enabled = false; } //存在相同窑车编码 else if (result == Constant.INT_IS_ONE) { MessageBox.Show(string.Format(Messages.MSG_CMN_W006, "窑车编码"), this.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } // 保存失败 else { MessageBox.Show(string.Format(Messages.MSG_CMN_W001, "窑车", "保存"), this.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning); } // 重新加载窗体数据 //this.RefreshData(); this.GetAllKilnCar(); this.RefreshDataGridViewData(); this.dgvKilnCar.IsSetInputColumnsColor = true; } catch (Exception ex) { this.btnSave.Enabled = true; this.btnCancel.Enabled = true; // 对异常进行共通处理 ExceptionManager.HandleEventException(this.ToString(), System.Reflection.MethodBase.GetCurrentMethod().Name, this.Text, ex); } } /// /// 关闭窗体 /// /// /// private void btnCancel_Click(object sender, EventArgs e) { this.Close(); } /// /// 关闭窗体,如果有数据变化提示保存 /// /// /// private void FrmGoodsKind_FormClosing(object sender, FormClosingEventArgs e) { try { // 判断数据是否被修改过,如果修改过则提示保存 if (DataJudge.IsChange((DataTable)this.dgvKilnCar.DataSource)) { DialogResult dialogResult = MessageBox.Show(Messages.MSG_CMN_Q001, this.Text, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question); // 保存改变的数据 if (dialogResult == DialogResult.Yes) { DataGridViewRow row = dgvKilnCar.CurrentRow; if (!row.IsNewRow) { // 判断窑车编码不能为空 if (row.Cells["KilnCarCode"].Value == null || string.IsNullOrEmpty(row.Cells["KilnCarCode"].Value + string.Empty)) { // 错误消息 MessageBox.Show(string.Format(Messages.MSG_CMN_W005, "窑车编码"), this.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning); e.Cancel = true; this.btnSave.Enabled = false; return; } // 判断窑车名称不能为空 if (row.Cells["KilnCarName"].Value == null || string.IsNullOrEmpty(row.Cells["KilnCarName"].Value + string.Empty)) { // 单元格的错误消息 MessageBox.Show(string.Format(Messages.MSG_CMN_W005, "窑车名称"), this.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning); e.Cancel = true; this.btnSave.Enabled = false; return; } } int resultCount = (int)DoAsync(new BaseAsyncMethod(SaveKilnCarData)); //存在相同窑车编码 if (resultCount.Equals(Constant.INT_IS_ONE)) { MessageBox.Show(string.Format(Messages.MSG_CMN_W006, "窑车编码"), this.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning); e.Cancel = true; this.btnSave.Enabled = false; return; } // 保存后提示 if (resultCount > Constant.INT_IS_ZERO) { MessageBox.Show(string.Format(Messages.MSG_CMN_I001, "窑车", "保存"), this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); } //存在相同窑车编码 else if (Convert.ToInt16(dialogResult) == Constant.RETURN_IS_EXIST) { e.Cancel = true; btnSave.Enabled = false; MessageBox.Show(string.Format(Messages.MSG_CMN_W006, "窑车编码"), this.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning); } else { // 保存失败 e.Cancel = true; MessageBox.Show(string.Format(Messages.MSG_CMN_W001, "窑车", "保存"), this.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning); } } else if (dialogResult == DialogResult.Cancel) { e.Cancel = true; } } } catch (Exception ex) { // 对异常进行共通处理 ExceptionManager.HandleEventException(this.ToString(), System.Reflection.MethodBase.GetCurrentMethod().Name, this.Text, ex); } } /// /// 窗体关闭后,释放单例资源 /// /// /// private void FrmGoodsKind_FormClosed(object sender, FormClosedEventArgs e) { _instance = null; } /// /// 设置排序时列表的颜色 /// private void dgvKilnCar_Sorted(object sender, EventArgs e) { this.dgvKilnCar.IsSetInputColumnsColor = true; } #endregion #region 私有方法 /// /// 取得窑炉数据 /// /// private DataSet GetKilnData() { try { return SystemModuleProxy.Service.GetKilnData(0); } catch (Exception ex) { throw ex; } } /// /// 按条件取得窑车数据 /// /// private DataSet GetKilnCarByKilnID() { try { byte valueFlag = Convert.ToByte(this.chkDisplayDisabledData.Checked); return SystemModuleProxy.Service.GetKilnCarData(valueFlag, this._selectNode); } catch (Exception ex) { throw ex; } } /// /// 获取窑车管理的全部数据 /// /// 用户信息 /// /// /// 2014.10.31 任海 新建 /// private void GetAllKilnCar() { try { DataSet dsResultAccount = (DataSet)DoAsync(new BaseAsyncMethod(() => { return SystemModuleProxy.Service.GetAllKilnCarInfo(); })); this._dtSourse = dsResultAccount.Tables[0]; } catch (Exception ex) { throw ex; } } /// /// 得到窑车信息 /// /// private void RefreshDataGridViewData() { try { StringBuilder sbstr = new StringBuilder(); sbstr.Append(" 1=1"); //未选中停用标识,显示正常数据 if (this.chkDisplayDisabledData.Checked == false) { sbstr.Append(" and ValueFlag=1"); } //选中树的节点把窑车Id加到查询条件中 if (this.tvwkiln.SelectedNode != null) { sbstr.Append(" and KilnId=" + this.tvwkiln.SelectedNode.Name); } this._dtSourse.DefaultView.RowFilter = sbstr.ToString(); this.dgvKilnCar.DataSource = this._dtSourse; this.btnSave.Enabled = false; } catch (Exception ex) { throw ex; } } /// /// 保存窑车数据 /// /// 影响行数 private object SaveKilnCarData() { try { // 获取当前datatKilnData数据源 DataTable datatKilnCarData = (DataTable)this.dgvKilnCar.DataSource; int result = SystemModuleProxy.Service.SaveKilnCarData(datatKilnCarData); return result; } catch (Exception ex) { throw ex; } } /// /// 根据取得的窑炉数据,生成树形结构 /// private void CreateKilnTree() { try { this.tvwkiln.BeforeSelect -= tvwKiln_BeforeSelect; this.tvwkiln.AfterSelect -= tvwkiln_AfterSelect; // 取得窑炉数据 DataSet kilnData = (DataSet)DoAsync(new BaseAsyncMethod(GetKilnData)); // 没有窑炉数据时,直接返回 if (kilnData == null || kilnData.Tables[0].Rows.Count < Constant.INT_IS_ONE) { return; } if (this.tvwkiln.Nodes.Count > Constant.INT_IS_ZERO) { // 添加节点前,保存状态 this.SaveTreeNodesStatus(this.tvwkiln.Nodes); } // 将所有节点清除 this.tvwkiln.Nodes.Clear(); TreeNode kilnNode = null; DataRow[] kilnRows = kilnData.Tables[0].Select(); // 显示子节点 InitTreeView(kilnData.Tables[0], kilnRows, kilnNode); this.dgvKilnCar.IsSetInputColumnsColor = true; this.tvwkiln.BeforeSelect += tvwKiln_BeforeSelect; this.tvwkiln.AfterSelect += tvwkiln_AfterSelect; } catch (Exception ex) { this.tvwkiln.BeforeSelect += tvwKiln_BeforeSelect; this.tvwkiln.AfterSelect += tvwkiln_AfterSelect; throw ex; } } /// /// 递归显示窑炉树形目录 /// /// 窑炉类数据源 /// /// private void InitTreeView(DataTable kilnData, DataRow[] rows, TreeNode node) { try { foreach (DataRow row in rows) { TreeNode sNode = null; if (node == null) { // 新建树节点并添加 sNode = new TreeNode(); sNode.Text = row["KilnName"].ToString(); sNode.Name = row["KilnID"].ToString(); sNode.Tag = row["KilnID"].ToString(); this.tvwkiln.Nodes.Add(sNode); } else { // 在原有树中加入节点 sNode = node.Nodes.Add(row["KilnName"].ToString()); sNode.Name = row["KilnID"].ToString(); sNode.Tag = row["KilnID"].ToString(); } } } catch (Exception ex) { throw ex; } } /// /// 保存窑炉TreeView的状态 /// /// private void SaveTreeNodesStatus(TreeNodeCollection nodes) { try { foreach (TreeNode node in nodes) { // 保存所有节点折叠,展开状态 if (node.IsExpanded) { this.NodesStatus[node.FullPath] = true; } else { this.NodesStatus.Remove(node.FullPath); } // 当节点处于选中状态时获取根树节点到当前树节点的路径 if (node.IsSelected) { SelectNodeFullPath = node.FullPath; } SaveTreeNodesStatus(node.Nodes); } } catch (Exception ex) { throw ex; } } /// /// 还原保存前窑炉TreeView的状态 /// /// 节点 private void SetTreeNodesStatus(TreeNodeCollection nodes) { try { foreach (TreeNode node in nodes) { if (this.NodesStatus[node.FullPath] != null) { // 展开树节点 node.Expand(); } // 节点路径和前选中的路径相同 设置节点为选中状态 if (node.FullPath == SelectNodeFullPath) { this.tvwkiln.SelectedNode = node; } SetTreeNodesStatus(node.Nodes); } } catch (Exception ex) { throw ex; } } /// /// 刷新DataGridView中的数据 /// private void RefreshData() { try { // 获取相应节点数据 if (this.tvwkiln.SelectedNode != null && !string.IsNullOrEmpty(this.tvwkiln.SelectedNode.Name.Trim())) { this._selectNode = this.tvwkiln.SelectedNode.Name.Trim(); base.DataSource = (DataSet)DoAsync(new BaseAsyncMethod(GetKilnCarByKilnID)); this.dgvKilnCar.AllowUserToAddRows = true; if (this.DataSource != null && this.DataSource.Tables.Count > Constant.INT_IS_ZERO) { // 选中新行时,自动计算窑车种类编码 base.DataSource.Tables[0].TableNewRow += new DataTableNewRowEventHandler(Table_SelectNewRow); this.dgvKilnCar.DataSource = this.DataSource.Tables[0]; this.dgvKilnCar.IsSetInputColumnsColor = true; } } } catch (Exception ex) { throw ex; } } /// /// 校验值是否重复 /// /// /// /// private bool IsUnique(string curCellValue, int curRow) { //待修改 foreach (DataGridViewRow rowItem in this.dgvKilnCar.Rows) { if (rowItem.Index == curRow) { continue; } // 窑车编码 if (rowItem.Cells["KilnCarCode"].Value != null) { if (rowItem.Cells["KilnCarCode"].Value.ToString().TrimEnd(). Equals(curCellValue.TrimEnd())) { return false; } } } return true; } /// /// 设置保存按钮的可用状态 /// private void RefreshSaveBtnStatus() { // 数据有改变时,保存按钮可用,否则不可用 if (DataJudge.IsChange((DataTable)this.dgvKilnCar.DataSource)) { this.btnSave.Enabled = true; } else { this.btnSave.Enabled = false; } } /// /// 保存时单元格必输项不能为空 /// private int Conservation() { int isConservation = Constant.INT_IS_ZERO; //判断窑车编码,名称不能为空 DataTable datatJobsData = (DataTable)this.dgvKilnCar.DataSource; foreach (DataRow drproductionData in datatJobsData.Rows) { if (drproductionData["KilnCarCode"].ToString() == string.Empty) { isConservation = Constant.INT_IS_ONE; break; } if (drproductionData["KilnCarName"].ToString() == string.Empty) { isConservation = Constant.INT_IS_TWO; break; } } return isConservation; } #endregion private void dgvKilnCar_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { TextBox tb = (e.Control as TextBox); if (tb != null) { if ("KilnCarCode" == this.dgvKilnCar.Columns[this.dgvKilnCar.CurrentCell.ColumnIndex].Name) { tb.CharacterCasing = CharacterCasing.Upper; } else { tb.CharacterCasing = CharacterCasing.Normal; } } } } }