/****************************** * 说明:PubSpec分类模块 * 创建人:龚宇超 * 创建日期:2018-01-02 * 修改人: * 修改日期: * 修改备注: * 版本:1.0.0.0 ******************************/ using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Lskj.Control; using Lskj.Model; using Lskj.Control.Model; using Lskj.Util; using Lskj.Data; using Lskj.Business.Impl; using Lskj.Business; using DevExpress.XtraGrid.Views.Grid; using Lskj.Core; using DevExpress.XtraGrid.Columns; namespace Lskj.PubSpec { public partial class FrmMain : BaseForm { private readonly AltButtonShortcutManager mAltButtonShortcuts = new AltButtonShortcutManager(); private bool _existsPid = false; /// /// 主键 /// private string _parmaryKey; /// /// 左侧树 /// private DataRow _leftTreeRow; /// /// 表格列 /// private DataTable _gridColumns; /// /// 当前是否为显示所有分类 /// private bool _isShowAllNode = true; /// /// 模块对象 /// public DynamicModel Model; /// /// 系统对象 /// public ModuleModel SysModel; public FrmMain() { InitializeComponent(); InitializeAltButtonShortcuts(); } private void InitializeAltButtonShortcuts() { mAltButtonShortcuts.Register(btnExport, Keys.E); mAltButtonShortcuts.Register(btnSave, Keys.S); mAltButtonShortcuts.Register(btnDelete, Keys.D); mAltButtonShortcuts.Register(btnAdd, Keys.A); mAltButtonShortcuts.Register(btnRefresh, Keys.R); } protected override bool ProcessCmdKey( ref System.Windows.Forms.Message msg, Keys keyData) { return mAltButtonShortcuts.ProcessKey(keyData) || base.ProcessCmdKey(ref msg, keyData); } /// /// 说明:窗口加载 /// 创建人:龚宇超 /// 创建日期:2018-01-02 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The instance containing the event data. protected override void OnLoad(EventArgs e) { WaitForm.ShowForm(); try { this.Model.Privilege = this.Model.Privilege.Equals("3") ? "1" : Model.ModuleId > 0 ? BaseImpl.GetUserPurviewsByMenuId(Model.ModuleId + "") + "" : BaseImpl.GetUserPurviewsByMenuCode(Model.ModuleCode) + ""; if (!this.Model.HasPrivilege()) { MessageUtil.Show(ResourceKeys.UnPurview); this.Close(); } else { this._parmaryKey = BaseModuleImpl.GetBasePrimaryKey(this.Model.ModuleCode);//获取主键 this.SysModel = new ModuleModel(MainImpl.GetSystemdllTab(this.Model.ModuleCode));//获取单个模块信息 this.treeLeft.TreeInhibitSort = this.SysModel.TreeInhibitSort;//树节点 禁用默认排序 this.btnAdd.Enabled = this.SysModel.AddEnable; this.btnDelete.Enabled = this.SysModel.DeleteEnable; this.btnSave.Enabled = this.SysModel.ModifyEnable; this.gcMain.GridView.OptionsBehavior.Editable = this.SysModel.ModifyEnable; if (Model.HasReadPrivilege()) { this.btnAdd.Enabled = this.btnDelete.Enabled = this.btnSave.Enabled = false; this.gcMain.GridView.OptionsBehavior.Editable = false; } this.InitializeTreeView(); this.InitializeGridView(); //if (this.SysModel.GridObjIsCheck == 1) //{ // this.gcMain.GridView.ClearSelection();//清除第一行选中 //} } if (SystemInfo.Instance.HideHelpDocument) { //隐藏帮助文档按钮 this.simpleButton1.Visible = false; this.btnShowAll.Location = new Point(this.btnShowAll.Location.X + simpleButton1.Width, this.btnShowAll.Location.Y); } this.InitlizeSpiltLocation(); this.scc_container.SplitterMoved += new System.EventHandler(this.OnSplitterMoved); } catch (Exception ex) { LogHelper.Instance.WriteError(ex); //MessageUtil.Show(ex.StackTrace); string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } finally { Lskj.Control.Model.AutoSizeChange.ControllInitializeSize(this); WaitForm.HideForm(); this.scc_container.Visible = true; } } /// /// 说明:初始化树 /// 创建人:龚宇超 /// 创建日期:2018-01-02 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void InitializeTreeView() { if (this.Model.ModuleCode != "A006101") { this._leftTreeRow = BaseModuleImpl.GetBaseLeftTreeField(this.Model.ModuleCode); string specialId = string.Empty; if (this._leftTreeRow != null) { //if (BaseImpl.HasExistsTable("p_systemTreeNodeSetTab")) //{ // DataRow treeNodedr = BaseImpl.TreeNodeSetTab(this.SysModel.MenuTable); // if (treeNodedr != null) // { // specialId = treeNodedr["treeIdField"] + ""; // } //} if (this._leftTreeRow.Table.Columns.Contains("TreeNodeSearch") && "1".Equals(this._leftTreeRow["TreeNodeSearch"] + "")) this.treeLeft.pl_top.Visible = true; this.treeLeft.TreeView.CheckBoxes = false; this.treeLeft.TreeNodeKeyField = this._leftTreeRow["fieldsqlid"] + ""; this.treeLeft.TreeNodeTextField = this._leftTreeRow["fieldsqlname"] + ""; this.treeLeft.TreeNodeSelectAfter += new TreeViewEventHandler(OnTreeNodeSelectAfter); //if (string.IsNullOrEmpty(specialId)) //{ DataTable treeSourceTab = BaseImpl.GetDataTableResult(this._leftTreeRow["fieldsql"] + ""); if (treeSourceTab.Rows.Count == 0) { string fieldValue = string.Empty; string tableName = this.SysModel.MenuTable; if (string.IsNullOrEmpty(tableName)) { MessageUtil.Show(ResourceKeys.MenuTableNameIsNull); return; } string insertSql = "insert into {0}({1}) values({2});"; string insertFields = string.Empty;//插入字段 string insertValues = string.Empty;//插入的值 string Autogrowcolumn = BaseImpl.GetResult(string.Format("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.columns WHERE TABLE_NAME='{0}' AND COLUMNPROPERTY(OBJECT_ID('{0}'),COLUMN_NAME,'IsIdentity')=1", tableName)) + "";//自动增长列 DataColumnCollection columns = BaseImpl.GetTableColumns(tableName).Columns; foreach (DataColumn col in columns) { DataTable gridColumns = BaseModuleImpl.GetBaseGridColumns(this.Model.ModuleCode); // 区分大小写匹配列 DataRow hasContainRow = gridColumns.Rows.Cast().FirstOrDefault(x => x["fieldname"] + "" == col.ColumnName); if (hasContainRow != null) { string defaultValue = BaseImpl.GetDefaultValue(hasContainRow["defaultdate"] + ""); //默认值 //if (col.ColumnName != _parmaryKey) // fieldValue = defaultValue; if (col.ColumnName == _parmaryKey) fieldValue = defaultValue; if (Autogrowcolumn.ToLower() == col.ColumnName.ToLower()) continue; insertFields += col.ColumnName + ","; if (col.ColumnName.Equals(treeLeft.TreeNodeKeyField)) insertValues += "'01',"; else if (col.ColumnName.Equals(treeLeft.TreeNodeTextField)) insertValues += "'公司',"; else insertValues += string.IsNullOrWhiteSpace(defaultValue) ? "NULL," : "'" + defaultValue + "',"; } } insertFields = insertFields.TrimEnd(','); insertValues = insertValues.TrimEnd(','); BaseSaveModel model = new BaseSaveModel() { MenuCode = this.Model.ModuleCode, TableName = tableName, KeyField = _parmaryKey, BaseSaveType = SaveType.Add, FieldValue = fieldValue, BaseSql = string.Format(insertSql, tableName, insertFields, insertValues) }; List mList = new List(); mList.Add(model); try { string retuenMsg = ""; // 批量保存数据 if (BaseModuleImpl.SaveBaseGridData(mList, out retuenMsg)) { treeSourceTab = BaseImpl.GetDataTableResult(this._leftTreeRow["fieldsql"] + ""); } else { } } catch (Exception ex) { //MessageUtil.Show(ResourceKeys.SaveFault); LogUtil.WriteError(ResourceKeys.BaseModule, ex); string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } this.treeLeft.BindTreeView(treeSourceTab); //} //else //{ // _existsPid = true; // this.treeLeft.BindTreeView(BaseImpl.GetDataTableResult(this._leftTreeRow["fieldsql"] + ""), specialId); //} } else { throw new Exception(string.Format("未查询到左侧树数据,模块编号:{0}", this.Model.ModuleCode)); } } else { if (SysModel != null) { string sql = SysModel.MenuSql; sql = sql + " order by speciesNo"; this.treeLeft.TreeView.CheckBoxes = false; this.treeLeft.TreeNodeKeyField = "SpeciesNo"; this.treeLeft.TreeNodeTextField = "SpeciesName"; this.treeLeft.TreeNodeSelectAfter += new TreeViewEventHandler(OnTreeNodeSelectAfter); this.treeLeft.BindSpecialTreeView(BaseImpl.GetDataTableResult(sql)); } } } /// /// 通过列属性判断是否可以编辑 /// /// /// protected void OnGridViewShowingEditor(object sender, CancelEventArgs e) { try { GridView gridView = (GridView)sender; GridColumn gridColumn = gridView.FocusedColumn; GridColumnModel gridColumnModel = null; if (gridColumn.Tag != null) { gridColumnModel = (GridColumnModel)gridColumn.Tag; } DataRow focusedRow = gridView.GetFocusedDataRow(); if (!gridView.FocusedColumn.FieldName.Equals("RightMenuBtnEdit"))//操作列可点击 { e.Cancel = !btnSave.Enabled; } if (!string.IsNullOrEmpty(this.SysModel.RowAllowEditCond) && focusedRow != null) { //e.Cancel = ReplaceHelper.EvalCond(ReplaceHelper.ReplaceRowParam(focusedRow, this.SysModel.RowAllowEditCond)); e.Cancel = !ValidateCond(this.SysModel.RowAllowEditCond, focusedRow, "P_SystemDllTab", "rowAllowEditCond"); } else if (gridColumnModel != null && !string.IsNullOrEmpty(gridColumnModel.DisableCond)) { //e.Cancel = !ReplaceHelper.EvalCond(ReplaceHelper.ReplaceRowParam(focusedRow, gridColumnModel.DisableCond)); e.Cancel = !ValidateCond(gridColumnModel.DisableCond, focusedRow); } } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } /// /// 说明:初始化表格 /// 创建人:龚宇超 /// 创建日期:2018-01-02 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void InitializeGridView() { if (this.SysModel.GridObjIsCheck == 1) { GridDragGrid.GridAddCheckBox(this.gcMain.GridView); } this.gcMain.GridView.ShowingEditor += new CancelEventHandler(OnGridViewShowingEditor); this.gcMain.Model = this.Model; this._gridColumns = BaseModuleImpl.GetBaseGridColumns(this.Model.ModuleCode); //GridDragTree dragTree = new GridDragTree(this.gcMain.GridView, this.treeLeft.TreeView); //dragTree.OnDragComplete += new GridDragTreeCompleteEventHandler(OnDragCompleted); this.gcMain.IsSpecModel = true; this.gcMain.SetEditColumns(this._gridColumns, GridCustomColumnStruct.PubSpecMainGridView + this.SysModel.FormKey); this.gcMain.SetGridRowColors(BaseModuleImpl.GetBaseGridRowColors(this.Model.ModuleCode)); this.gcMain.SetGridRightMenus(BaseModuleImpl.GetBaseGridRightMenus(this.Model.ModuleCode), this.Model, OnGridViewRightCallBack, null); this.gcMain.GridView.FocusedRowObjectChanged += new DevExpress.XtraGrid.Views.Base.FocusedRowObjectChangedEventHandler(OnGridViewFocusedRowObjectChanged); this.SearchLastGridView(); } /// /// 说明:行选中发生变化,判断是否是否可用 /// 创建人:龚宇超 /// 创建日期:2019-06-10 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. void OnGridViewFocusedRowObjectChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowObjectChangedEventArgs e) { try { GridView gridView = sender as GridView; DataRow rowItem = gridView.GetFocusedDataRow(); this.ValidateButtonState(rowItem); } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } /// /// 说明:检查按钮是否可用 /// 创建人:龚宇超 /// 创建日期:2017-11-21 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void ValidateButtonState(DataRow rowItem) { if (rowItem == null) return; try { if (!Model.HasOperPrivilege()) { this.btnAdd.Enabled = this.btnDelete.Enabled = this.btnSave.Enabled = false; } else { if (this.treeLeft.TreeView.SelectedNode != null) { this.btnAdd.Enabled = this.SysModel.AddEnable && this.ValidateCond(this.SysModel.AddCond.Replace("{leftSpeciesNo}", this.treeLeft.TreeView.SelectedNode.Name).Replace("{leftSpeciesName}", this.treeLeft.TreeView.SelectedNode.Text), rowItem, "P_SystemDllTab", "addEnable"); // 判断添加权限 this.btnDelete.Enabled = this.SysModel.DeleteEnable && this.ValidateCond(this.SysModel.DeleteCond.Replace("{leftSpeciesNo}", this.treeLeft.TreeView.SelectedNode.Name).Replace("{leftSpeciesName}", this.treeLeft.TreeView.SelectedNode.Text), rowItem, "P_SystemDllTab", "deleteCond"); // 判断删除权限 this.btnSave.Enabled = this.SysModel.ModifyEnable && this.ValidateCond(this.SysModel.ModifyCond.Replace("{leftSpeciesNo}", this.treeLeft.TreeView.SelectedNode.Name).Replace("{leftSpeciesName}", this.treeLeft.TreeView.SelectedNode.Text), rowItem, "P_SystemDllTab", "modifyCond"); // 判断修改权限 } else { this.btnAdd.Enabled = this.SysModel.AddEnable && this.ValidateCond(this.SysModel.AddCond, rowItem, "P_SystemDllTab", "addEnable"); // 判断添加权限 this.btnDelete.Enabled = this.SysModel.DeleteEnable && this.ValidateCond(this.SysModel.DeleteCond, rowItem, "P_SystemDllTab", "deleteCond"); // 判断删除权限 this.btnSave.Enabled = this.SysModel.ModifyEnable && this.ValidateCond(this.SysModel.ModifyCond, rowItem, "P_SystemDllTab", "modifyCond"); // 判断修改权限 } } } catch (Exception) { } } /// /// 说明:检查可用条件 /// 创建人:龚宇超 /// 创建日期:2017-11-09 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The cond. /// The data row. /// true if XXXX, false otherwise. private bool ValidateCond(string cond, DataRow dataRow, string TableName = null, string ColumnName = null) { bool result = false; string condition = cond; try { cond = ReplaceHelper.ReplaceRowParam(dataRow, cond); if (cond.StartsWith("@") || cond.StartsWith("!")) { result = "1".Equals(BaseImpl.GetDefaultValue(cond)); } else { result = ReplaceHelper.ReplaceRowParamCond(dataRow, cond); } return result; } catch (Exception ex) { //string Message = ErrorMessage.PromptErrorMessage(ex); string Tips = string.Empty; if (!string.IsNullOrWhiteSpace(TableName) && !string.IsNullOrWhiteSpace(ColumnName)) { Tips = string.Format("{0}表中{1}字段{2},判断条件失败\r\n", TableName, ColumnName, condition); } else { Tips = string.Format("条件为:{0}\r\n", condition); } //MessageUtil.Show("条件判断错误:\r\n" + Tips); Tips = "条件判断错误:\r\n" + Tips; string Message = ErrorMessage.PromptErrorMessage(ex, "", Tips); } return result; } /// /// 说明:查询GridView数据 /// 创建人:龚宇超 /// 创建日期:2018-01-02 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void SearchLastGridView(string parentValue = "") { try { string sqlValue = string.Empty; WaitForm.ShowForm(); int firstNum = this.treeLeft.TreeView.Nodes[0].Name.Length; int focusRowHandle = this.gcMain.GridView.FocusedRowHandle; string maxdivision = string.Empty; for (int i = 0; i < firstNum; i++) { maxdivision += "_"; } if (this.Model.ModuleCode != "A006101") { if (_existsPid) { sqlValue = string.IsNullOrWhiteSpace(parentValue) ? this.SysModel.MenuSql : this.SysModel.MenuSql + string.Format(" and pid='{1}' order by {0}", "orderid", parentValue); } else { string sortField = _leftTreeRow["fieldsqlid"] + ""; //配置了树节点不排序,主sql排序默认添加orderid if (this.SysModel.TreeInhibitSort) { sortField = " orderid," + _leftTreeRow["fieldsqlid"]; if (!Lskj.Business.Impl.BaseImpl.HasExistsColumn(this.SysModel.MenuTable, "orderid")) { MessageUtil.Show(string.Format("配置了树节点禁用默认排序的情况下,请在主表{0}中,添加orderid字段", this.SysModel.MenuTable)); return; } } sqlValue = string.IsNullOrWhiteSpace(parentValue) ? this.SysModel.MenuSql : this.SysModel.MenuSql + string.Format(" and {0} like '{1}{2}' order by {3}", _leftTreeRow["fieldsqlid"] + "", parentValue, maxdivision, sortField); if (!string.IsNullOrWhiteSpace(this.SysModel.SortField)) { sqlValue = string.IsNullOrWhiteSpace(parentValue) ? this.SysModel.MenuSql : this.SysModel.MenuSql + string.Format(" and {0} like '{1}{2}' order by {3}", _leftTreeRow["fieldsqlid"] + "", parentValue, maxdivision, this.SysModel.SortField); } } } else { sqlValue = string.IsNullOrWhiteSpace(parentValue) ? this.SysModel.MenuSql : this.SysModel.MenuSql + string.Format(" and {0} like '{1}{2}' order by {0}", "SpeciesNo", parentValue, maxdivision); } DataTable table=BaseImpl.GetDataTableResult(sqlValue); this.gcMain.SetGridViewDataSource(table); this.gcMain.GridView.SelectRowHandler(focusRowHandle); if (table != null && table.Rows.Count == 0&& this.treeLeft.TreeView.SelectedNode!=null) { //DataRow RowItem = gcMain.GridControl.DataSourceTable().NewRow(); //this.ValidateButtonState(RowItem); if (!Model.HasOperPrivilege()) { this.btnAdd.Enabled = this.btnDelete.Enabled = this.btnSave.Enabled = false; } else { //this.SysModel.ModifyCond.Replace("{SpeciesNo}", parentValue).Replace("{SpeciesName}", this.treeLeft.TreeView.SelectedNode.Text) this.btnAdd.Enabled = this.SysModel.AddEnable && this.ValidateCond(this.SysModel.AddCond.Replace("{leftSpeciesNo}", this.treeLeft.TreeView.SelectedNode.Name).Replace("{leftSpeciesName}", this.treeLeft.TreeView.SelectedNode.Text), null, "P_SystemDllTab", "addEnable"); // 判断添加权限 this.btnDelete.Enabled = this.SysModel.DeleteEnable && this.ValidateCond(this.SysModel.DeleteCond.Replace("{leftSpeciesNo}", this.treeLeft.TreeView.SelectedNode.Name).Replace("{leftSpeciesName}", this.treeLeft.TreeView.SelectedNode.Text), null, "P_SystemDllTab", "deleteCond"); // 判断删除权限 this.btnSave.Enabled = this.SysModel.ModifyEnable && this.ValidateCond(this.SysModel.ModifyCond.Replace("{leftSpeciesNo}", this.treeLeft.TreeView.SelectedNode.Name).Replace("{leftSpeciesName}", this.treeLeft.TreeView.SelectedNode.Text), null, "P_SystemDllTab", "modifyCond"); // 判断修改权限 } } } catch (Exception ex) { LogHelper.Instance.WriteError(ex); //MessageUtil.Show(ex); string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } finally { WaitForm.HideForm(); } } /// /// 说明:保存Grid数据 /// 创建人:龚宇超 /// 创建日期:2018-01-03 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// true if XXXX, false otherwise. private void AddGridData(string parentValue) { string parentText = "新增分类"; string fieldValue = string.Empty; string tableName = this.SysModel.MenuTable; if (string.IsNullOrEmpty(tableName)) { MessageUtil.Show(ResourceKeys.MenuTableNameIsNull); return; } string insertSql = "insert into {0}({1}) values({2});"; string insertFields = string.Empty;//插入字段 string insertValues = string.Empty;//插入的值 string Autogrowcolumn = BaseImpl.GetResult(string.Format("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.columns WHERE TABLE_NAME='{0}' AND COLUMNPROPERTY(OBJECT_ID('{0}'),COLUMN_NAME,'IsIdentity')=1", tableName)) + "";//自动增长列 DataColumnCollection columns = BaseImpl.GetTableColumns(tableName).Columns; foreach (DataColumn col in columns) { // 区分大小写匹配列 DataRow hasContainRow = _gridColumns.Rows.Cast().FirstOrDefault(x => x["fieldname"] + "" == col.ColumnName); if (hasContainRow != null) { string defaultValue = BaseImpl.GetDefaultValue(hasContainRow["defaultdate"] + ""); //默认值 //if (col.ColumnName != _parmaryKey) // fieldValue = defaultValue; if (col.ColumnName == _parmaryKey) fieldValue = defaultValue; if (Autogrowcolumn.ToLower() == col.ColumnName.ToLower()) continue; insertFields += col.ColumnName + ","; if (col.ColumnName.Equals(treeLeft.TreeNodeKeyField)) insertValues += "'" + parentValue + "',"; else if (col.ColumnName.Equals(treeLeft.TreeNodeTextField)) insertValues += "'" + parentText + "',"; else insertValues += string.IsNullOrWhiteSpace(defaultValue) ? "NULL," : "'" + defaultValue + "',"; } } insertFields = insertFields.TrimEnd(','); insertValues = insertValues.TrimEnd(','); BaseSaveModel model = new BaseSaveModel() { MenuCode = this.Model.ModuleCode, TableName = tableName, KeyField = _parmaryKey, BaseSaveType = SaveType.Add, FieldValue = fieldValue, BaseSql = string.Format(insertSql, tableName, insertFields, insertValues) }; List mList = new List(); mList.Add(model); try { string retuenMsg = ""; // 批量保存数据 if (BaseModuleImpl.SaveBaseGridData(mList, out retuenMsg)) { //MessageUtil.Show(ResourceKeys.SaveSuccess); TreeNode selectedNode = this.treeLeft.TreeView.SelectedNode; TreeNode treeNode = selectedNode.Nodes.Add(parentValue, parentText); treeNode.Tag = parentValue; selectedNode.Expand(); this.SearchLastGridView(this.treeLeft.GetSelectNodeValue()); } else { if (mList != null && mList.Count > 0) { MessageUtil.Show(ResourceKeys.SaveFault + mList[0].FaultMsg); } else { MessageUtil.Show(ResourceKeys.SaveFault); } } } catch (Exception ex) { //MessageUtil.Show(ResourceKeys.SaveFault); LogUtil.WriteError(ResourceKeys.BaseModule, ex); string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } /// /// 说明:更新数据 /// 创建人:龚宇超 /// 创建日期:2018-01-04 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void UpdateGridData() { string tableName = this.SysModel.MenuTable; if (string.IsNullOrEmpty(tableName)) { MessageUtil.Show(ResourceKeys.MenuTableNameIsNull); return; } List mList = new List(); DataRow[] modifiedRows = (gcMain.GridControl.DataSource as DataTable) .Rows .Cast() .Where(x => x.RowState == DataRowState.Modified || x.RowState == DataRowState.Added) .ToArray(); if (modifiedRows == null || modifiedRows.Length == 0) { MessageUtil.Show(ResourceKeys.UnUpdateData); return; } else { string Autogrowcolumn = BaseImpl.GetResult(string.Format("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.columns WHERE TABLE_NAME='{0}' AND COLUMNPROPERTY(OBJECT_ID('{0}'),COLUMN_NAME,'IsIdentity')=1", tableName)) + ""; DataColumnCollection columns = BaseImpl.GetTableColumns(tableName).Columns; foreach (DataRow row in modifiedRows) { string updateSql = "update {0} set {1} where {2}='{3}';"; string updateFields = string.Empty; BaseSaveModel model = new BaseSaveModel() { MenuCode = this.Model.ModuleCode, TableName = tableName, NewVer = this.SysModel.NewVer, KeyField = _parmaryKey }; foreach (DataColumn col in columns) { // 忽略大小写匹配列 DataRow hasContainRow = _gridColumns.Rows.Cast().FirstOrDefault(x => (x["fieldname"] + "").Equals(col.ColumnName, StringComparison.CurrentCultureIgnoreCase)); if (Autogrowcolumn.ToLower() == col.ColumnName.ToLower()) continue; if (hasContainRow != null && col.ColumnName != _parmaryKey) { if (row.RowState == DataRowState.Modified) { if (!string.IsNullOrWhiteSpace(row[col.ColumnName] + "")) { updateFields += string.Format("{0}=N'{1}',", col.ColumnName, col.DataType == typeof(DateTime) ? Convert.ToDateTime(row[col.ColumnName] + "").ToString("yyyy-MM-dd HH:mm:ss") : row[col.ColumnName] + ""); } else { if (col.DataType == typeof(Decimal) || col.DataType == typeof(Double) || col.DataType == typeof(Int16) || col.DataType == typeof(Int32) || col.DataType == typeof(Int64)) updateFields += string.Format("{0}='{1}',", col.ColumnName, 0); else if (col.DataType == typeof(DateTime)) updateFields += string.Format("{0}='{1}',", col.ColumnName, null); else updateFields += string.Format("{0}='{1}',", col.ColumnName, row[col.ColumnName]); } } } } updateFields = updateFields.TrimEnd(','); if (!string.IsNullOrEmpty(updateFields)) { model.FieldValue = row[_parmaryKey] + ""; model.BaseSaveType = SaveType.Update; model.BaseSql = string.Format(updateSql, tableName, updateFields, _parmaryKey, row[_parmaryKey]); } mList.Add(model); } try { string retuenMsg = ""; string apiMsg = ""; // 批量保存数据 if (BaseModuleImpl.SaveBaseGridData(mList, out retuenMsg, out apiMsg)) { MessageUtil.Show(ResourceKeys.SaveSuccess); if (this._isShowAllNode)//显示所有节点 this.SearchLastGridView(); else this.SearchLastGridView(this.treeLeft.GetSelectNodeValue()); } else { string FaultMsg = string.Empty; foreach (BaseSaveModel baseSaveModel in mList) { if (!string.IsNullOrWhiteSpace(baseSaveModel.FaultMsg)) { FaultMsg += baseSaveModel.FaultMsg + "\r\n"; } } if (retuenMsg == "9") { if (MessageUtil.Show(ResourceKeys.SaveFault + FaultMsg, MessageBoxButtons.YesNo) == DialogResult.Yes) { if (BaseModuleImpl.SaveBaseGridData(mList, "1")) { MessageUtil.Show(ResourceKeys.SaveSuccess); if (this._isShowAllNode)//显示所有节点 this.SearchLastGridView(); else this.SearchLastGridView(this.treeLeft.GetSelectNodeValue()); } else { MessageUtil.Show(ResourceKeys.SaveFault); } } } else { MessageUtil.Show(ResourceKeys.SaveFault + FaultMsg); } } } catch (Exception ex) { //MessageUtil.Show(ResourceKeys.SaveFault); LogUtil.WriteError(ResourceKeys.BaseModule, ex); string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } } /// /// 说明:右键菜单执行后刷新数据,刷新规则按照上一次查询条件刷新 /// 创建人:龚宇超 /// 创建日期:2018-01-02 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. /// The instance containing the event data. protected void OnGridViewRightCallBack(object sender, EventArgs e) { try { this.SearchLastGridView(this.treeLeft.GetSelectNodeValue()); } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } /// /// 说明:表格拖动到树结构 /// 创建人:龚宇超 /// 创建日期:2018-01-02 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. /// The e. protected void OnDragCompleted(object sender, GridDragTreeArgs e) { try { if (e.GridViewSelectRows == null || e.GridViewSelectRows.Length == 0 || e.SelectTreeNode == null) return; if (MessageUtil.Show(string.Format(ResourceKeys.DragSelectNode, e.SelectTreeNode.Text), MessageBoxButtons.YesNo) == DialogResult.Yes) { int[] records = new int[e.GridViewSelectRows.Length]; string fieldName = this._leftTreeRow["fieldName"] + ""; for (int i = 0; i < e.GridViewSelectRows.Length; i++) { DataRow item = e.GridViewSelectRows[i]; try { records[i] = BaseModuleImpl.UpdateRecord(this.SysModel.MenuTable, fieldName, e.SelectTreeNode.Tag + "", this._parmaryKey, item[this._parmaryKey] + ""); } catch (Exception ex) { MessageUtil.Show(ex); LogHelper.Instance.WriteError(ex); LogUtil.WriteError(ResourceKeys.BaseModule, ex); } } int successCount = records.Contains(1) ? records.Where(x => x == 1).Count() : 0; int faultCount = records.Contains(0) ? records.Where(x => x == 0).Count() : 0; MessageUtil.Show(string.Format(ResourceKeys.DragSuccessCount, successCount) + "\r\n" + string.Format(ResourceKeys.DragFaultCount, faultCount)); this.SearchLastGridView(this.treeLeft.GetSelectNodeValue()); } } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } /// /// 说明:树结构选中后 /// 创建人:龚宇超 /// 创建日期:2018-01-03 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void OnTreeNodeSelectAfter(object sender, TreeViewEventArgs e) { try { this.lblSpeciesName.Text = e.Node.Text; this.SearchLastGridView(this.treeLeft.GetSelectNodeValue()); this._isShowAllNode = false; } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } /// /// 说明:显示所有分类 /// 创建人:龚宇超 /// 创建日期:2018-01-02 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void OnShowAllButtonClick(object sender, EventArgs e) { try { this.SearchLastGridView(); this._isShowAllNode = true; } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } /// /// 说明:刷新数据 /// 创建人:龚宇超 /// 创建日期:2018-01-02 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void OnRefreshButtonClick(object sender, EventArgs e) { try { if (this.Model.ModuleCode != "A006101") { this.treeLeft.BindTreeView(BaseImpl.GetDataTableResult(this._leftTreeRow["fieldsql"] + "")); } else { string sql = SysModel.MenuSql; sql = sql + " order by speciesNo"; this.treeLeft.BindSpecialTreeView(BaseImpl.GetDataTableResult(sql)); } this.treeLeft.TreeView.SelectedNode = this.treeLeft.TreeView.TopNode; this.SearchLastGridView(this.treeLeft.TreeView.TopNode.Tag + ""); } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } /// /// 说明:添加数据 /// 创建人:龚宇超 /// 创建日期:2018-01-02 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void OnAddButtonClick(object sender, EventArgs e) { string maxSpeciesNo = "01"; TreeNode treeNode = null; try { bool canAdd = string.IsNullOrEmpty(this.SysModel.AddCond); if (!canAdd) { DataRow dr = gcMain.GridView.GetFocusedDataRow(); if (this.treeLeft.TreeView.SelectedNode != null) { canAdd = this.ValidateCond(this.SysModel.AddCond.Replace("{leftSpeciesNo}", this.treeLeft.TreeView.SelectedNode.Name).Replace("{leftSpeciesName}", this.treeLeft.TreeView.SelectedNode.Text), null, "P_SystemDllTab", "addEnable"); // 判断添加权限 } else { canAdd = this.ValidateCond(this.SysModel.AddCond, dr, "P_SystemDllTab", "addCond"); } } if (canAdd) { if (this.treeLeft.TreeView.Nodes.Count > 0) { treeNode = this.treeLeft.TreeView.SelectedNode; if (treeNode == null) { MessageUtil.Show(ResourceKeys.SelectTreeNodeIsNull); return; } maxSpeciesNo = BaseSpecImpl.GetMaxSpeciesNo(this.SysModel.MenuTable, this.treeLeft.TreeNodeKeyField, treeNode.Name, this.treeLeft.TreeView.Nodes[0].Name); } if ("99".Equals(maxSpeciesNo)) { MessageUtil.Show(ResourceKeys.ChildTreeNodeFlowOver); return; } if ("999".Equals(maxSpeciesNo)) { MessageUtil.Show(ResourceKeys.ChildMaxTreeNodeFlowOver); return; } this.AddGridData(maxSpeciesNo); } else { MessageUtil.Show(ResourceKeys.DisAddCond); } } catch (Exception ex) { //MessageUtil.Show(ex); LogHelper.Instance.WriteError(ex); LogUtil.WriteError(ResourceKeys.BaseModule, ex); string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } /// /// 说明:删除数据 /// 创建人:龚宇超 /// 创建日期:2018-01-02 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void OnDeleteButtonClick(object sender, EventArgs e) { try { // 检查是否可以删除 DataRow rowItem = this.gcMain.GridView.GetFocusedDataRow(); if (rowItem == null) { MessageUtil.Show(ResourceKeys.SelectDeleteRows); return; } if (MessageUtil.Show(string.Format(ResourceKeys.DeleteRows, 1), MessageBoxButtons.YesNo) == DialogResult.Yes) { string parmaryValue = rowItem[this._parmaryKey] + ""; string nodeValue = rowItem[this.treeLeft.TreeNodeKeyField] + ""; if ("01".Equals(nodeValue)) { MessageUtil.Show(ResourceKeys.UnableToDeleteFirstNode); return; } // 检查当前选中节点是否还存在子节点 if (BaseSpecImpl.GetNodeChildCount(this.SysModel.MenuTable, this.treeLeft.TreeNodeKeyField, nodeValue) > 1) { MessageUtil.Show(ResourceKeys.UnableToDeleteContainerChildsNode); return; } string deleteCond = this.SysModel.DeleteCond; List mList = new List(); bool canDelete = string.IsNullOrEmpty(deleteCond); if (!canDelete) { // 验证删除条件 //deleteCond = ReplaceHelper.ReplaceRowParam(rowItem, deleteCond); // canDelete = BaseImpl.GetDefaultValue(deleteCond) == "1"; canDelete = ValidateCond(deleteCond, rowItem, "P_SystemDllTab", "deleteCond"); } if (canDelete) { // 验证删除存储过程 string tipMsg = string.Empty; string fieldValue = rowItem[this._parmaryKey] + ""; string sqlValue = string.Format("delete from {0} where {1} = '{2}'", this.SysModel.MenuTable, this._parmaryKey, rowItem[this._parmaryKey] + ""); BaseSaveModel model = new BaseSaveModel { BaseSaveType = SaveType.Delete, BaseSql = sqlValue, KeyField = _parmaryKey, FieldValue = fieldValue, NewVer = this.SysModel.NewVer, MenuCode = this.Model.ModuleCode, TableName = this.SysModel.MenuTable }; int result = BaseImpl.VerifyCanDelete(this.Model.ModuleCode, parmaryValue, out tipMsg); if (result != 1) { MessageUtil.Show(ResourceKeys.DisDeleteCond + "\r\n" + tipMsg); return; } else { mList.Add(model); } } else { MessageUtil.Show(ResourceKeys.DisDeleteCond); return; } ApiHelper apiHelper = null; Interface.Api.ActionType actionType = Interface.Api.ActionType.Delete; if (ApiHelper.IsExecEventApi(Interface.Api.OperateEvent.AfterModuleDataDelete, this.Model.ModuleCode, 0)) { apiHelper = new ApiHelper(this.Model.ModuleCode, parmaryValue, this._parmaryKey, this.SysModel.MenuTable, 0, rowItem); actionType = Interface.Api.ActionType.Delete; //请求删除数据时先等待返回结果后再进行删除 apiHelper.OnEvent(Interface.Api.OperateEvent.AfterModuleDataDelete, actionType, false); } // 删除记录 //int execResult = BaseSpecImpl.DeleteNode(this.SysModel.MenuTable, this._parmaryKey, parmaryValue); if (this.SysModel.NewVer == 1) { string apiReturnMsg = ""; bool success = BaseModuleImpl.SaveBaseGridData(mList, out apiReturnMsg); if (success) { if (apiHelper != null) apiHelper.OnEvent(); TreeNode[] nodes = this.treeLeft.TreeView.Nodes.Find(nodeValue, true); if (nodes.Length > 0) this.treeLeft.TreeView.Nodes.Remove(nodes[0]); //this.SearchLastGridView(this.treeLeft.GetSelectNodeValue()); int rowHandle = this.gcMain.GridView.FocusedRowHandle; this.gcMain.GridView.DeleteRow(rowHandle); MessageUtil.Show(ResourceKeys.DeleteSuccess); } else { MessageUtil.Show(mList[0].FaultMsg); } } else { int execResult = BaseSpecImpl.DeleteNode(this.SysModel.MenuTable, this._parmaryKey, parmaryValue); if (execResult == 1) { if (apiHelper != null) apiHelper.OnEvent(); TreeNode[] nodes = this.treeLeft.TreeView.Nodes.Find(nodeValue, true); if (nodes.Length > 0) this.treeLeft.TreeView.Nodes.Remove(nodes[0]); //this.SearchLastGridView(this.treeLeft.GetSelectNodeValue()); int rowHandle = this.gcMain.GridView.FocusedRowHandle; this.gcMain.GridView.DeleteRow(rowHandle); MessageUtil.Show(ResourceKeys.DeleteSuccess); } else { MessageUtil.Show(ResourceKeys.DataNotFount); } } } } catch (Exception ex) { //MessageUtil.Show(ex); LogHelper.Instance.WriteError(ex); LogUtil.WriteError(ResourceKeys.BaseModule, ex); string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } /// /// 说明:保存数据 /// 创建人:龚宇超 /// 创建日期:2018-01-02 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void OnSaveButtonClick(object sender, EventArgs e) { for (int i = 0; i < (this.gcMain.GridView.GetGridViewFilteredAndSortedDataToDataTable() as DataTable).Rows.Count; i++) { if (this.gcMain.GridView.GetDataRow(i).GetColumnsInError().Count() > 0) { MessageUtil.Show("表格中数据不符合要求,保存失败!"); return; } } try { DataRow[] nullFields = this._gridColumns.Select("nullable=1"); if (this.gcMain.GridView.ValidateNullRequired(nullFields)) { this.UpdateGridData(); } } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } /// /// 说明:导出Excel /// 创建人:龚宇超 /// 创建日期:2019-06-12 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. /// The instance containing the event data. private void OnExportClick(object sender, EventArgs e) { try { this.gcMain.GridControl.ToExcel(this.Model.FormText); } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } private void simpleButton1_Click(object sender, EventArgs e) { try { WebBrowserUtil.StartWebBrowser(this.Model.ModuleCode, this.SysModel.MenuText); } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } /// /// 说明:设置分割条位置 /// 创建人:龚宇超 /// 创建日期:2018-02-01 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// protected void InitlizeSpiltLocation() { try { string htight = IniHelper.Read(string.Format("PubSpec_Wide_{0}", this.Model.ModuleCode)); if (!string.IsNullOrEmpty(htight)) { this.scc_container.SplitterPosition = Convert.ToInt32(htight); } } catch (Exception ex) { LogHelper.Instance.WriteError(ex); string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } /// /// 说明:设置分割条位置 /// 创建人:龚宇超 /// 创建日期:2018-02-01 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. protected void OnSplitterMoved(object sender, EventArgs e) { try { if (this.Model != null) { IniHelper.Write(string.Format("PubSpec_Wide_{0}", this.Model.ModuleCode), this.scc_container.SplitterPosition + ""); } } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } } }