diff --git a/插件库/Lskj.PubBomAlter/FrmMain.Designer.cs b/插件库/Lskj.PubBomAlter/FrmMain.Designer.cs index c2f0b1d..a23d714 100644 --- a/插件库/Lskj.PubBomAlter/FrmMain.Designer.cs +++ b/插件库/Lskj.PubBomAlter/FrmMain.Designer.cs @@ -33,8 +33,8 @@ namespace Lskj.PubBomAlter this.splitRightContainer = new DevExpress.XtraEditors.SplitContainerControl(); this.splitControlContainer = new DevExpress.XtraEditors.SplitContainerControl(); this.topPanel = new DevExpress.XtraEditors.PanelControl(); - this.treeGridControlEx = new Lskj.Control.TreeGridControlEx(); this.pl_buttom = new DevExpress.XtraEditors.PanelControl(); + this.btnApply = new DevExpress.XtraEditors.SimpleButton(); this.btnSave = new DevExpress.XtraEditors.SimpleButton(); this.pl_top = new DevExpress.XtraEditors.PanelControl(); this.pl_top_search = new DevExpress.XtraEditors.PanelControl(); @@ -49,6 +49,7 @@ namespace Lskj.PubBomAlter this.btnPmsSave = new DevExpress.XtraEditors.SimpleButton(); this.rightDetailPanel = new System.Windows.Forms.Panel(); this.gcDetailControlEx = new Lskj.Control.GridControlEx(); + this.treeGridControlEx = new Lskj.Control.TreeGridControlEx(); ((System.ComponentModel.ISupportInitialize)(this.splitRightContainer)).BeginInit(); this.splitRightContainer.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.splitControlContainer)).BeginInit(); @@ -130,21 +131,11 @@ namespace Lskj.PubBomAlter this.topPanel.Size = new System.Drawing.Size(380, 566); this.topPanel.TabIndex = 21; // - // treeGridControlEx - // - this.treeGridControlEx.AdapterObj = null; - this.treeGridControlEx.Dock = System.Windows.Forms.DockStyle.Fill; - this.treeGridControlEx.Location = new System.Drawing.Point(2, 29); - this.treeGridControlEx.Margin = new System.Windows.Forms.Padding(4); - this.treeGridControlEx.Name = "treeGridControlEx"; - this.treeGridControlEx.SiftEnumObj = Lskj.Control.GridControlEx.HeaderSiftEnum.Sum; - this.treeGridControlEx.Size = new System.Drawing.Size(376, 500); - this.treeGridControlEx.TabIndex = 29; - // // pl_buttom // this.pl_buttom.Appearance.BackColor = System.Drawing.Color.Transparent; this.pl_buttom.Appearance.Options.UseBackColor = true; + this.pl_buttom.Controls.Add(this.btnApply); this.pl_buttom.Controls.Add(this.btnSave); this.pl_buttom.Dock = System.Windows.Forms.DockStyle.Bottom; this.pl_buttom.Location = new System.Drawing.Point(2, 529); @@ -153,6 +144,17 @@ namespace Lskj.PubBomAlter this.pl_buttom.Size = new System.Drawing.Size(376, 35); this.pl_buttom.TabIndex = 28; // + // btnApply + // + this.btnApply.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnApply.Appearance.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnApply.Appearance.Options.UseFont = true; + this.btnApply.Location = new System.Drawing.Point(214, 5); + this.btnApply.Name = "btnApply"; + this.btnApply.Size = new System.Drawing.Size(80, 26); + this.btnApply.TabIndex = 41; + this.btnApply.Text = "提交审批(&A)"; + // // btnSave // this.btnSave.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); @@ -310,6 +312,17 @@ namespace Lskj.PubBomAlter this.gcDetailControlEx.Size = new System.Drawing.Size(411, 566); this.gcDetailControlEx.TabIndex = 52; // + // treeGridControlEx + // + this.treeGridControlEx.AdapterObj = null; + this.treeGridControlEx.Dock = System.Windows.Forms.DockStyle.Fill; + this.treeGridControlEx.Location = new System.Drawing.Point(2, 29); + this.treeGridControlEx.Margin = new System.Windows.Forms.Padding(4); + this.treeGridControlEx.Name = "treeGridControlEx"; + this.treeGridControlEx.SiftEnumObj = Lskj.Control.GridControlEx.HeaderSiftEnum.Sum; + this.treeGridControlEx.Size = new System.Drawing.Size(376, 500); + this.treeGridControlEx.TabIndex = 29; + // // FrmMain // this.Appearance.BackColor = System.Drawing.SystemColors.Control; @@ -352,22 +365,4 @@ namespace Lskj.PubBomAlter private DevExpress.XtraEditors.SplitContainerControl splitRightContainer; private DevExpress.XtraEditors.SplitContainerControl splitControlContainer; private DevExpress.XtraEditors.PanelControl topPanel; - private DevExpress.XtraEditors.PanelControl pl_Bottom; - private System.Windows.Forms.Panel rightDetailPanel; - private DevExpress.XtraEditors.PanelControl pl_top; - private DevExpress.XtraEditors.PanelControl pl_top_search; - private DevExpress.XtraEditors.PanelControl pl_top_fix_search; - private System.Windows.Forms.ComboBox cbField; - private DevExpress.XtraEditors.SimpleButton btnFixSearch; - private System.Windows.Forms.TextBox txtFixKey; - private System.Windows.Forms.Label label1; - private Control.TreeGridControlEx treeGridControlEx; - private DevExpress.XtraEditors.PanelControl pl_buttom; - private DevExpress.XtraEditors.SimpleButton btnSave; - private Control.GridControlEx gcMainControlEx; - private DevExpress.XtraEditors.PanelControl panelControl1; - private DevExpress.XtraEditors.SimpleButton btnPmsSave; - private Control.GridControlEx gcDetailControlEx; - } -} - + private DevExpress.XtraEditors.PanelC \ No newline at end of file diff --git a/插件库/Lskj.PubBomAlter/FrmMain.cs b/插件库/Lskj.PubBomAlter/FrmMain.cs index 2e80175..1f1e570 100644 --- a/插件库/Lskj.PubBomAlter/FrmMain.cs +++ b/插件库/Lskj.PubBomAlter/FrmMain.cs @@ -42,6 +42,10 @@ namespace Lskj.PubBomAlter /// public MyControl SearchObj; /// + /// 数据源绑定完成后 + /// + public event EventHandler OnAfterDataSourceCallback; + /// /// 上方控件面板 /// private XtraScrollableControl MainControlPanel = new XtraScrollableControl(); @@ -58,6 +62,14 @@ namespace Lskj.PubBomAlter /// private ModuleModel sysModel; /// + /// 列数据源 + /// + private DataTable _gridColumns; + /// + /// 无需更新的列 + /// + private string[] _disUpdateColumns = { "id" }; + /// /// 明细表 /// private DataTable detailsTab; @@ -237,7 +249,7 @@ namespace Lskj.PubBomAlter { try { - + SearchObj.SearchGrid(); } catch (Exception ex) { @@ -322,6 +334,7 @@ namespace Lskj.PubBomAlter sysModel.PrefixKey = BaseImpl.GetColumnPrefix(sysModel.MenuTable);//获取列前缀 SearchObj = new MyControl(sysModel.MenuSql, TreeGridObj);//替换sql语句中的bmp字段 SearchObj.OnDataSourceBindCallBack += OnSearchObjDataSourceBindCallBack; + SearchObj.OnSearchAfterCallBack += OnSearchObjSearchAfterCallBack; bool fixedQuery = queryTable == null || queryTable.Rows.Count == 0; if (fixedQuery) { @@ -340,8 +353,8 @@ namespace Lskj.PubBomAlter SearchObj.OtherParams = BomAlterModel.OtherParams(); pl_top.Height = SearchObj.InitSearchControl(queryTable, pl_top_search); } - DataTable gridColumns = BaseModuleImpl.GetBaseGridColumns(BomAlterModel.ModuleCode); - TreeGridObj.SetEditColumns(gridColumns, GridCustomColumnStruct.BaseMainGridView + sysModel.FormKey); + _gridColumns = BaseModuleImpl.GetBaseGridColumns(BomAlterModel.ModuleCode); + TreeGridObj.SetEditColumns(_gridColumns, GridCustomColumnStruct.BaseMainGridView + sysModel.FormKey); TreeGridObj.SetGridRowColors(BaseModuleImpl.GetBaseGridRowColors(BomAlterModel.ModuleCode)); TreeGridObj.TreeListObj.MouseClick += OnTreeListObjMouseClick; DataTable rightMenusTable = BaseModuleImpl.GetBaseGridRightMenus(BomAlterModel.ModuleCode); @@ -490,6 +503,7 @@ namespace Lskj.PubBomAlter //this.pl_scrollBottom.Click += OnScrollableControlClick; this.btnPmsSave.Click += OnBtnPmsSaveClick; this.btnSave.Click += OnBtnSaveClick; + this.btnApply.Click += OnBtnApplyClick; this.gcDetailControlEx.GridView.DoubleClick += OnGcDetailGridViewDoubleClick; this.gcDetailControlEx.GridView.SelectionChanged += OnGridViewSelectionChanged; } @@ -502,6 +516,7 @@ namespace Lskj.PubBomAlter { try { + this.OnAfterDataSourceCallback -= OnAfterDataSource; gcMainControlEx.GridControl.DataSource = null; TreeList treeListGrid = sender as TreeList; Point gcPoint = treeListGrid.PointToScreen(treeListGrid.Location); @@ -514,8 +529,8 @@ namespace Lskj.PubBomAlter if (dataRow.Table.Columns.Contains("Plm_lmb_SmartBmFa")) { string projectId = dataRow["Plm_lmb_SmartBmFa"] + ""; + this.OnAfterDataSourceCallback += OnAfterDataSource; SetDynamicControl(projectId); - SetAllControlValue(dataRow); } } } @@ -525,6 +540,22 @@ namespace Lskj.PubBomAlter } } /// + /// 数据源加载完成后事件 + /// + /// + /// + private void OnAfterDataSource(object sender, EventArgs e) + { + WaitForm.ShowForm(); + this.Invoke(new Action(() => + { + TreeListNode focusedNode = TreeGridObj.TreeListObj.FocusedNode; + DataRow dataRow = (TreeGridObj.TreeListObj.GetDataRecordByNode(focusedNode) as DataRowView).Row; + SetAllControlValue(dataRow); + })); + WaitForm.HideForm(); + } + /// /// 更改菜单点击 /// /// @@ -910,6 +941,10 @@ namespace Lskj.PubBomAlter })); } } + if (OnAfterDataSourceCallback != null) + { + OnAfterDataSourceCallback(null, null); + } } catch (Exception) { @@ -1302,12 +1337,49 @@ namespace Lskj.PubBomAlter TopControlObj.SetAllControlValue(BomAlterModel.MaintabFocusedRow); } List modelControls = this.MainControlPanel.Controls.Cast().Where(n => !string.IsNullOrEmpty((n.Tag as SysSetModel).DbName)).OrderBy(n => (n.Tag as SysSetModel).OrderId).ToList(); - foreach (BaseUserControl item in modelControls) + if (selectSource == null) { - SysSetModel sysSetModel = item.Tag as SysSetModel; - string value = selectSource.Table.Columns.Contains(sysSetModel.DbName) ? selectSource[sysSetModel.DbName] + "" : ""; - item.EditText = value; + primaryVlaue = dataRow["plm_lmb_id"] + ""; + selectSource = BaseImpl.GetDataRowResult(string.Format("select * from Plm_MbomListTab where plm_lmb_id = '{0}'", primaryVlaue)); + foreach (BaseUserControl item in modelControls) + { + SysSetModel sysSetModel = item.Tag as SysSetModel; + string value = ""; + if (selectSource != null) + { + value = selectSource.Table.Columns.Contains(sysSetModel.DbName) ? selectSource[sysSetModel.DbName] + "" : ""; + } + item.EditText = value; + } } + else + { + foreach (BaseUserControl item in modelControls) + { + SysSetModel sysSetModel = item.Tag as SysSetModel; + string value = ""; + if (selectSource != null) + { + value = selectSource.Table.Columns.Contains(sysSetModel.DbName) ? selectSource[sysSetModel.DbName] + "" : ""; + } + item.EditText = value; + } + } + //if (!string.IsNullOrEmpty(lastValues)) + //{ + // string[] lastValueArray = lastValues.Split('\\'); + // for (int i = 0; i < modelControls.Count; i++) + // { + // if (i == 0) + // { + // continue; + // } + // int index = i - 1; + // string value = index >= 0 && lastValueArray.Length > index ? lastValueArray[index] : ""; + // BaseUserControl item = modelControls[i]; + // item.EditText = value; + // } + //} } /// /// 说明:查找控件(无需要传入txt_) @@ -1657,6 +1729,144 @@ namespace Lskj.PubBomAlter /// 保存按钮 /// private void OnBtnSaveClick(object sender, EventArgs e) + { + TreeGridControlEx treeMain = TreeGridObj; + string tableName = this.sysModel.MenuTable; + if (string.IsNullOrEmpty(tableName)) + { + MessageUtil.Show(ResourceKeys.MenuTableNameIsNull); + return; + } + List mList = new List(); + DataRow[] modifiedRows = (treeMain.TreeListObj.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 _parmaryKey = BaseImpl.GetBasePrimaryKey(this.BomAlterModel.ModuleCode);//获取主键 + DataColumnCollection columns = BaseImpl.GetTableColumns(tableName).Columns; + foreach (DataRow row in modifiedRows) + { + string updateSql = "update {0} set {1} where {2}='{3}';"; + string insertSql = "insert into {0}({1}) values({2});"; + string updateFields = string.Empty; + string insertFields = string.Empty; + string insertValues = string.Empty; + BaseSaveModel model = new BaseSaveModel() + { + MenuCode = this.BomAlterModel.ModuleCode, + TableName = tableName, + KeyField = _parmaryKey, + NewVer = this.sysModel.NewVer + }; + foreach (DataColumn col in columns) + { + // 区分大小写匹配列 + DataRow hasContainRow = _gridColumns.Rows.Cast().FirstOrDefault(x => x["fieldname"] + "" == col.ColumnName); + if (hasContainRow != null && col.ColumnName != _parmaryKey && !_disUpdateColumns.Contains(col.ColumnName)) + { + if (row.RowState == DataRowState.Modified && string.IsNullOrEmpty(sysModel.CustomColumnSQL)) + { + if ((col.DataType == typeof(DateTime)) && (row[col.ColumnName] + "" == "")) + { + updateFields += string.Format("[{0}]=null,", col.ColumnName); + } + else + { + if (col.DataType == typeof(Decimal) && string.IsNullOrWhiteSpace((row[col.ColumnName] + "").Replace("'", "''"))) + { + updateFields += string.Format("[{0}]='{1}',", col.ColumnName, 0); + } + else + { + updateFields += string.Format("[{0}]='{1}',", col.ColumnName, (row[col.ColumnName] + "").Replace("'", "''")); + } + + } + } + else if (row.RowState == DataRowState.Added || (row.RowState == DataRowState.Modified && !string.IsNullOrEmpty(sysModel.CustomColumnSQL))) + { + // 动态生成列,保存时默认全部为新增 + string fieldValue = (row[col.ColumnName] + "").Replace("'", "''"); + insertFields += "[" + col.ColumnName + "],"; + if (!string.IsNullOrWhiteSpace(fieldValue)) + { + insertValues += col.DataType == typeof(DateTime) ? "'" + Convert.ToDateTime(fieldValue).ToString("yyyy-MM-dd HH:mm:ss") + "'," : "'" + fieldValue + "',"; + } + else + { + if (col.DataType == typeof(Decimal) || col.DataType == typeof(Int32)) + insertValues += "0,"; + else if (col.DataType == typeof(DateTime)) + insertValues += "NULL,"; + else + insertValues += "'',"; + } + } + } + } + updateFields = updateFields.TrimEnd(','); + insertFields = insertFields.TrimEnd(','); + insertValues = insertValues.TrimEnd(','); + + if (!string.IsNullOrEmpty(updateFields)) + { + model.FieldValue = row[_parmaryKey] + ""; + model.BaseSaveType = SaveType.Update; + model.BaseSql = string.Format(updateSql, tableName, updateFields, _parmaryKey, row[_parmaryKey]); + } + if (!string.IsNullOrEmpty(insertFields)) + { + model.BaseSaveType = SaveType.Add; + model.FieldValue = row[_parmaryKey] + ""; + model.BaseSql = string.Format(insertSql, tableName, insertFields, insertValues); + } + mList.Add(model); + } + try + { + // 批量保存数据 + if (BaseModuleImpl.SaveBaseGridData(mList)) + { + (treeMain.TreeListObj.DataSource as DataTable).AcceptChanges(); + if (this.SearchObj != null) + { + this.SearchObj.SearchLastGrid(); + } + MessageUtil.Show(ResourceKeys.SaveSuccess); + } + else + { + StringBuilder builder = new StringBuilder(); + builder.Append("失败列表\r\n"); + foreach (BaseSaveModel item in mList) + { + if (!string.IsNullOrEmpty(item.FaultMsg)) + builder.Append("原因:" + item.FaultMsg + "\r\n"); ; + } + LogHelper.Instance.WriteLog(builder.ToString()); + MessageUtil.Show(builder.ToString()); + } + } + catch (Exception ex) + { + string Message = ErrorMessage.PromptErrorMessage(ex); + MessageUtil.Show(Message, ex.Message); + } + } + } + /// + /// 提交按钮 + /// + private void OnBtnApplyClick(object sender, EventArgs e) { TreeListNode focusedNode = treeGridControlEx.TreeListObj.FocusedNode; DataRow focusedRow = (treeGridControlEx.TreeListObj.GetDataRecordByNode(focusedNode) as DataRowView).Row; @@ -1765,5 +1975,7 @@ namespace Lskj.PubBomAlter SearchObj.SearchGrid(); } } - } -} + /// + /// 查询后事件 + /// + /// < \ No newline at end of file diff --git a/插件库/Lskj.PubBomAlter/Lskj.PubBomAlter.csproj b/插件库/Lskj.PubBomAlter/Lskj.PubBomAlter.csproj index e635457..0038878 100644 --- a/插件库/Lskj.PubBomAlter/Lskj.PubBomAlter.csproj +++ b/插件库/Lskj.PubBomAlter/Lskj.PubBomAlter.csproj @@ -73,7 +73,6 @@ FrmMain.cs - ResXFileCodeGenerator Resources.Designer.cs