using DevExpress.XtraGrid.Columns; using Lskj.Business.Impl; using Lskj.Control.Model; using Lskj.Core; using Lskj.Data; using Lskj.Model; using Lskj.Util; 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; namespace Lskj.Control { public partial class FrmAddDynamic : BaseForm { #region 变量 /// /// 动态sql /// public string DynamicSql; /// /// 模块编号 /// public string ModuleCode; /// /// 最大高度 /// public int MaxHeight; /// /// 预加载模块的关联字段 /// public string UnionKey; /// /// 预加载模块的关联字段 /// public string UnionValue; /// /// 主键值 /// public string ParmaryKey; /// /// 主模块对象 /// public ModuleModel MainModuleObj; /// /// guid主键值 /// public string keyValue; /// /// 主表表格属性 /// public DataTable TableProperties; /// /// 是否为新增 /// public bool IsAdd = false; /// /// 是否已点击保存 /// public bool IsSave = false; #endregion public FrmAddDynamic() { InitializeComponent(); this.Load += OnFrmAddDynamicLoad; this.btnUpdate.Click += OnBtnUpdateClick; this.btnClose.Click += OnBtnCloseClick; this.FormClosing += OnFrmAddDynamicFormClosing; } /// /// 初始化时 /// /// /// private void OnFrmAddDynamicLoad(object sender, EventArgs e) { WaitForm.ShowForm(); try { this.MainModuleObj = new ModuleModel(MainImpl.GetSystemdllTab(ModuleCode)); if (MainModuleObj == null) { throw new Exception(string.Format("初始化模块{0}失败", ModuleCode)); } TableProperties = BaseImpl.GetDataTableResult(string.Format("select COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH from information_schema.columns where table_name = '{0}'", MainModuleObj.MenuTable)); if (string.IsNullOrEmpty(keyValue)) { IsAdd = true; InsertDynamicTab(); } InsertConotrol(); SetFormSize(); } catch (Exception ex) { MessageBox.Show(ex.Message); } WaitForm.HideForm(); } /// /// 修改按钮点击时 /// /// /// private void OnBtnUpdateClick(object sender, EventArgs e) { WaitForm.ShowForm(ResourceKeys.DataSaving); try { // 保存之前先进行表格更新 this.gcMain.GridView.PostEditor(); this.gcMain.GridView.UpdateCurrentRow(); if (this.gcMain.VerifyNull()) { string updateSql = GetDetailRecord().ToString(); SqlHelper.ExecuteNonQuery(updateSql); IsSave = true; MessageUtil.Show("修改成功"); } } catch (Exception ex) { MessageUtil.Show(ex.Message); } WaitForm.HideForm(); } /// /// 退出按钮点击时 /// /// /// private void OnBtnCloseClick(object sender, EventArgs e) { this.Close(); } /// /// 关闭窗体时 /// /// /// private void OnFrmAddDynamicFormClosing(object sender, FormClosingEventArgs e) { if (IsAdd && !IsSave)//新增且未保存删除插入的数据 { string deleteSql = string.Format("delete from {0} where keyvalue = '{1}'", this.MainModuleObj.MenuTable, keyValue); SqlHelper.ExecuteNonQuery(deleteSql); } this.DialogResult = DialogResult.OK; } /// /// 说明:通过模块加载预载界面列 /// 创建人:王一帆 /// 创建日期:2023-10-20 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void InsertConotrol() { //表格样式设置 gcMain.GridView.Appearance.HeaderPanel.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;//表头居中 gcMain.GridView.Appearance.Row.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;//内容居中 this.ParmaryKey = BaseImpl.GetBasePrimaryKey(ModuleCode);//获取主键 DataTable GridColumns = BaseModuleImpl.GetBaseGridColumns(ModuleCode); DataTable GridAllColumns = BaseModuleImpl.GetBaseGridAllColumns(ModuleCode); this.gcMain.SetEditColumns(GridColumns); string MainSql = string.Format("select * from {0} where keyvalue = '{1}'", this.MainModuleObj.MenuTable, keyValue); this.gcMain.SetGridViewDataSource(SqlHelper.ExecuteDataTable(MainSql)); } /// /// 说明:添加模板表数据 /// 创建人:唐德馨 /// 创建日期:2023-10-20 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void InsertDynamicTab() { try { string dynamicSql = ReplaceHelper.ReplaceUserInfo(DynamicSql); DataTable dynamicTab = SqlHelper.ExecuteDataTable(dynamicSql); if (dynamicTab != null) { this.keyValue = Guid.NewGuid().ToString(); string dateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); StringBuilder addSqlStrBuilder = new StringBuilder(); foreach (DataRow dynamicRow in dynamicTab.Rows) { StringBuilder addKeysBuilder = new StringBuilder(); StringBuilder addValuesBuilder = new StringBuilder(); foreach (DataColumn dynamicCol in dynamicTab.Columns) { if (TableProperties.Select().Where(n => (n["COLUMN_NAME"] + "").Equals(dynamicCol.ColumnName, StringComparison.OrdinalIgnoreCase)).Count() == 0) continue; if (dynamicCol.ColumnName.Equals("id", StringComparison.OrdinalIgnoreCase) || dynamicCol.ColumnName.Equals("keyvalue", StringComparison.OrdinalIgnoreCase) || dynamicCol.ColumnName.Equals("operatedate", StringComparison.OrdinalIgnoreCase) || dynamicCol.ColumnName.Equals("operatorname", StringComparison.OrdinalIgnoreCase) || dynamicCol.ColumnName.Equals(UnionKey, StringComparison.OrdinalIgnoreCase)) { continue; } addKeysBuilder.Append(string.Format("{0},", dynamicCol.ColumnName)); addValuesBuilder.Append(string.Format("'{0}',", (dynamicRow[dynamicCol] + "").Replace("'", "''"))); } if (!string.IsNullOrEmpty(UnionKey)) { addKeysBuilder.Append(UnionKey + ","); addValuesBuilder.Append(string.Format("'{0}',", UnionValue)); } addKeysBuilder.Append("keyvalue,"); addValuesBuilder.Append(string.Format("'{0}',", keyValue)); addKeysBuilder.Append("operatedate,"); addValuesBuilder.Append(string.Format("'{0}',", dateTime)); addKeysBuilder.Append("operatorname,"); addValuesBuilder.Append(string.Format("'{0}',", ERPInfo.Instance.UserName)); addSqlStrBuilder.Append(string.Format("insert into {0} ({1}) values ({2});", MainModuleObj.MenuTable, addKeysBuilder.ToString().TrimEnd(','), addValuesBuilder.ToString().TrimEnd(','))); } string execSql = addSqlStrBuilder.ToString(); if (!string.IsNullOrEmpty(execSql)) { SqlHelper.ExecuteNonQuery(execSql); } } } catch (Exception ex) { MessageUtil.Show(ex.Message); } } /// /// 说明:获取保存数据 /// 创建人:唐德馨 /// 创建日期:2023-10-20 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// System.String. private StringBuilder GetDetailRecord() { StringBuilder updateBuilder = new StringBuilder(); DataTable mainTable = this.gcMain.GridControl.DataSourceTable().TrimDeleteRows(); if (mainTable.Rows.Count > 0) { foreach (DataRow dataRow in mainTable.Rows) { StringBuilder updateKeyValues = new StringBuilder(); string id = ""; string keyvalue = ""; foreach (DataColumn item in mainTable.Columns) { GridColumn[] gridColumns = gcMain.GridView.Columns.Cast().Where(x => x.FieldName.Equals(item.Caption, StringComparison.OrdinalIgnoreCase)).ToArray(); if (item.Caption.Equals("id", StringComparison.OrdinalIgnoreCase)) { id = dataRow["id"] + ""; continue; } if (item.Caption.Equals("keyvalue", StringComparison.OrdinalIgnoreCase)) { keyvalue = dataRow["keyvalue"] + ""; continue; } if (gridColumns.Count() == 0) continue; string fieldValue = dataRow.Table.Columns.Contains(item.ColumnName) ? dataRow[item.ColumnName] + "" : string.Empty; if (!string.IsNullOrWhiteSpace(fieldValue)) { fieldValue = item.DataType == typeof(DateTime) ? Convert.ToDateTime(fieldValue).ToString("yyyy-MM-dd HH:mm:ss") : fieldValue.Contains("'") ? fieldValue.Replace("'", "''") : fieldValue; } else { if (item.DataType == typeof(Decimal) || item.DataType == typeof(Double) || item.DataType == typeof(Int16) || item.DataType == typeof(Int32) || item.DataType == typeof(Int64)) fieldValue = "0"; else if (item.DataType == typeof(DateTime)) { fieldValue = "null"; } else { fieldValue = ""; } } updateKeyValues.Append(string.Format("{0} = '{1}',", item.ColumnName, fieldValue)); } updateBuilder.Append(string.Format("update {0} set {1} where id = '{2}' and keyvalue = '{3}';", MainModuleObj.MenuTable, updateKeyValues.ToString().TrimEnd(','), id, keyvalue)); } } return updateBuilder; } /// /// 调整窗体大小 /// private void SetFormSize() { this.gcMain.GridView.HorzScrollVisibility = DevExpress.XtraGrid.Views.Base.ScrollVisibility.Never; this.gcMain.GridView.VertScrollVisibility = DevExpress.XtraGrid.Views.Base.ScrollVisibility.Never; this.gcMain.GridView.OptionsView.RowAutoHeight = false; this.gcMain.GridView.FooterPanelHeight = 25; this.gcMain.GridView.ViewCaptionHeight = 25; this.gcMain.GridView.RowHeight = MaxHeight > 25 ? MaxHeight : 25; int width = this.gcMain.GridView.IndicatorWidth; foreach (GridColumn gridColumn in this.gcMain.GridView.VisibleColumns) { //gridColumn.MaxWidth = gridColumn.Width; //gridColumn.MinWidth = gridColumn.Width; width += gridColumn.Width; } int height = this.gcMain.GridView.RowCount * this.gcMain.GridView.RowHeight + 75 + this.gcMain.plbuttomObj.Height + this.gcMain.plbuttomObj.Height - 13; if (height > System.Windows.Forms.Screen.GetWorkingArea(this).Height) { height = System.Windows.Forms.Screen.GetWorkingArea(this).Height; this.gcMain.GridView.VertScrollVisibility = DevExpress.XtraGrid.Views.Base.ScrollVisibility.Always; } else if (height < System.Windows.Forms.Screen.GetWorkingArea(this).Height) { this.gcMain.GridView.VertScrollVisibility = DevExpress.XtraGrid.Views.Base.ScrollVisibility.Never; } if (this.gcMain.GridView.VertScrollVisibility == DevExpress.XtraGrid.Views.Base.ScrollVisibility.Always) { width = width + 30; } this.Size = new Size(width, height); int screenTop = (System.Windows.Forms.Screen.GetWorkingArea(this).Width - this.Width) / 2; int screenLeft = (System.Windows.Forms.Screen.GetWorkingArea(this).Height - this.Height) / 2; if (this.WindowState == FormWindowState.Normal) { this.Location = new Point(screenTop, screenLeft); } } } }