using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Windows.Forms; using Lskj.Model; using Lskj.Control.Model; using Lskj.Util; using Lskj.Data; using Lskj.Business.Impl; using Lskj.Control; using Lskj.Business; using DevExpress.XtraGrid.Columns; using DevExpress.XtraGrid.Views.Grid; namespace Lskj.PubModelAdd { public partial class BaseModelAdd : UserControl { public BaseModelAdd() { InitializeComponent(); } #region 私有变量 /// /// 模块初始化完成 /// private bool _isInitFinish; /// /// 表格列 /// private DataTable _gridColumns = new DataTable(); /// /// 主键名 /// private string _primaryLeftKey; /// /// 左侧表格查询条件 /// private MyControl _leftGridSearchObj; #endregion #region 公共变量 /// /// 左侧树数据 /// public DataRow LeftRowObj; /// /// 基础添加模块的入口参数 /// public DynamicPubModelAdd Model; /// /// 基础添加模块的入口参数 /// public DynamicPubModelAdd BandModel; /// /// 左侧基础模型 /// public ModuleGridEx MoudleBottomObj { get { return this.mg_Bottom; } } /// ///左上方查询条件控件 /// public MyControl SearchLeftObj; /// /// 顶部表格控件 /// public ModuleGridEx ModuleGridObj; /// /// 系统模块实体对象 /// /// The system model. public ModuleModel SysModel { get; private set; } /// /// 系统模块下部分实体对象 /// /// The system model. public ModuleModel BottomModel { get; private set; } /// /// 左侧条件 /// public string LeftCond; #endregion /// /// 说明:窗口加载 /// 创建人:龚宇超 /// 创建日期:2019-06-28 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. /// The instance containing the event data. public void OnLoad(DynamicPubModelAdd Model) { WaitForm.ShowForm(); try { this._isInitFinish = false; if (Model.isBandGrid) { this.mg_control.Visible = false; this.mg_bandcontrol.Visible = true; this.ModuleGridObj = this.mg_bandcontrol; } else { this.mg_control.Visible = true; this.mg_bandcontrol.Visible = false; this.ModuleGridObj = this.mg_control; } this.Model = Model; this.BandModel = Model; DataRow modelRow = MainImpl.GetSystemdllTab(this.Model.ModuleCode); if (modelRow == null) { MessageUtil.Show("模块编号[" + this.Model.ModuleCode + "],配置错误!\r\n该模块信息未找到!"); return; } this.SysModel = new ModuleModel(modelRow); this.SetLeftGridView(); InitializeGrid(); //初始化单表GridView this.mg_control._leftGridSearchObj = _leftGridSearchObj; this.mg_control.InitializeControl(SysModel, Model); this.mg_control.LeftGridEx = gridLeft; this.BandModel.GridEnumObj = GridEnum.BandedGridView; //初始化多表头GridView this.mg_bandcontrol._leftGridSearchObj = _leftGridSearchObj; this.mg_bandcontrol.InitializeControl(SysModel, BandModel); this.mg_bandcontrol.LeftGridEx = gridLeft; this.ModuleGridObj.SearchObj.OnDataSourceBindCallBack += new EventHandler(OnDataSourceBindCallBack); } catch (Exception ex) { LogHelper.Instance.WriteError(ex, ResourceKeys.BaseModule); //MessageUtil.Show(ex.Message + "\r\n" + ex.StackTrace); string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message,ex.Message); } finally { this._isInitFinish = true; } WaitForm.HideForm(); } #region 方法 #region 数据源绑定完成后执行 /// /// 说明:数据源绑定完成后执行 /// 创建人:王一帆 /// 创建日期: /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. void OnDataSourceBindCallBack(object sender, EventArgs e) { string sqlValue = ReplaceHelper.ReplaceWhereCond(this.SysModel.MenuSql); this.ModuleGridObj.GridControlObj.LastSearchSql = this.ModuleGridObj.SearchObj.SetSearchSqlValue(sqlValue, true, false); this.ModuleGridObj.SearchObj.SearchLastGrid(); } #endregion #region 初始化配置表格表 /// /// 说明:加载下部分表格 /// 创建人:王一帆 /// 创建日期:2020-09-08 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void InitializeGrid() { DataTable moduleDetailTable = BaseModuleImpl.GetBaseDetailPages(this.Model.ModuleCode);//通过明细获取动态表格 DataRow LeftItem = moduleDetailTable.Rows.Cast().FirstOrDefault(x => int.Parse(x["orderId"] + "") <= -1 && int.Parse(x["orderId"] + "") >= -9); if (LeftItem != null) { this.BottomModel = new ModuleModel(MainImpl.GetSystemdllTab(LeftItem["UnionModule"] + "")); DynamicModel dyncModel = new DynamicPubModelAdd(new string[] { BottomModel.MenuText, ERPInfo.Instance.UserId, ERPInfo.Instance.UserName, this.Model.Privilege, LeftItem["UnionModule"] + "", "0" }); this.MoudleBottomObj.InitializeControl(BottomModel, dyncModel); this.MoudleBottomObj.GridControlObj.GridView.DoubleClick += new EventHandler(OnBottomDoubleClick); this.MoudleBottomObj.SearchObj.OnSourceRefrshCallBack += OnRefreshBillSource; } } #endregion #region 绑定左侧表格的事件 /// /// 说明:设置左侧表格数据 /// 创建人:王一帆 /// 创建日期:2020-09-08 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// protected void SetLeftGridView() { this.LeftRowObj = BaseModuleImpl.GetBaseLeftTreeField(this.Model.ModuleCode); if (LeftRowObj != null) { this.mg_control.ParentKeyField = LeftRowObj["fieldsqlid"] + ""; this.mg_control.ParentUnionField = LeftRowObj["fieldname"] + ""; this.mg_control.LeftGridEx = this.gridLeft; this.mg_control.ParentGridEx = this.gridLeft; // 方便右侧添加数据自动带出相同字段值 this.mg_bandcontrol.ParentKeyField = LeftRowObj["fieldsqlid"] + ""; this.mg_bandcontrol.ParentUnionField = LeftRowObj["fieldname"] + ""; this.mg_bandcontrol.LeftGridEx = this.gridLeft; this.mg_bandcontrol.ParentGridEx = this.gridLeft; // 方便右侧添加数据自动带出相同字段值 DataTable dtTable = BaseModuleImpl.GetBaseLeftGridField(this.Model.ModuleCode); DataTable dtColorTable = BaseModuleImpl.GetBaseGridRowColors(LeftRowObj["fieldKey"] + ""); this.gridLeft.GridView.RowClick += new DevExpress.XtraGrid.Views.Grid.RowClickEventHandler(OnGridViewRowClick); //this.gridLeft.GridView.FocusedRowObjectChanged += new DevExpress.XtraGrid.Views.Base.FocusedRowObjectChangedEventHandler(OnGridFocuseRowChange); this.gridLeft.SetGridRightMenus(BaseModuleImpl.GetBaseGridRightMenus(LeftRowObj["fieldKey"] + ""), this.Model, OnGridViewRightCallBack, this._leftGridSearchObj); this.gridLeft.SetGridRowColors(dtColorTable); this.gridLeft.SetReadOnlyColumns(dtTable, GridCustomColumnStruct.BaseLeftGridView + this.Model.ModuleCode); DataTable table = BaseModuleImpl.GetCustomQueryFields(LeftRowObj["fieldKey"] + ""); string searchSql = LeftRowObj["fieldsql"] + " " + LeftCond; if (table != null && table.Rows.Count > 0) { // 自定义查询条件 this._leftGridSearchObj = new MyControl(searchSql, this.gridLeft); this._leftGridSearchObj.OtherParams = Model.OtherParams(); this.pl_left_top.Height = this._leftGridSearchObj.InitSearchControl(table, this.pl_left_top); this._leftGridSearchObj.OnDataSourceBindCallBack += new EventHandler(OnLeftControlObjDataSourceBindCallBack); } else { this.pl_left_top.Visible = false; this.gridLeft.GridControl.DataSource = BaseImpl.GetDataTableResult(searchSql); } } } #endregion #region 数据绑定完成后加载数据 /// /// 说明:数据绑定完成后加载数据 /// 创建人:王一帆 /// 创建日期: /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. protected void OnLeftControlObjDataSourceBindCallBack(object sender, EventArgs e) { try { this._leftGridSearchObj.SearchGrid(); } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message,ex.Message); } } #endregion #region 刷新右侧表格数据 /// /// 说明:刷新右侧表格数据 /// 创建人:龚宇超 /// 创建日期:2018-03-19 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. protected void OnGridViewRowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e) { try { string sqlValue = ReplaceHelper.ReplaceWhereCond(this.SysModel.MenuSql); sqlValue = this.SysModel.MenuSql.StartsWith("select", StringComparison.OrdinalIgnoreCase) ? sqlValue : sqlValue; // 左侧gridView时,需要替换sql参数(包含查询条件、表格选中行). sqlValue = this._leftGridSearchObj != null ? this._leftGridSearchObj.ReplaceParentControlValue(sqlValue) : sqlValue; sqlValue = ReplaceHelper.ReplaceRowParam(this.gridLeft.GridView.GetFocusedDataRow(), sqlValue); this.ModuleGridObj.GridControlObj.LastSearchSql = this.ModuleGridObj.SearchObj.ReplaceLeftOrGridValue(sqlValue, true); this.ModuleGridObj.SearchObj.SearchLastGrid(); if (this.SysModel.LeftUnioCond) { DataRow dr = this.gridLeft.GridView.GetFocusedDataRow(); foreach (ControlModel item in this.MoudleBottomObj.SearchObj.ControlModels) { if (dr.Table.Columns.Contains(item.FieldName)) { this.MoudleBottomObj.SearchObj.SetControlValue(item, dr[item.FieldName]+""); } } } } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message,ex.Message); } } #endregion //#region 选中刷新右侧表格数据 ///// ///// 说明:刷新右侧表格数据 ///// 创建人:龚宇超 ///// 创建日期:2018-03-19 ///// 修改人: ///// 修改日期: ///// 修改备注: ///// 版本:1.0 ///// ///// The source of the event. ///// The instance containing the event data. //protected void OnGridFocuseRowChange(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowObjectChangedEventArgs e) //{ // string sqlValue = ReplaceHelper.ReplaceWhereCond(this.SysModel.MenuSql); // sqlValue = this.SysModel.MenuSql.StartsWith("select", StringComparison.OrdinalIgnoreCase) ? sqlValue : sqlValue; // // 左侧gridView时,需要替换sql参数(包含查询条件、表格选中行). // sqlValue = this._leftGridSearchObj != null ? this._leftGridSearchObj.ReplaceParentControlValue(sqlValue) : sqlValue; // sqlValue = ReplaceHelper.ReplaceRowParam(this.gridLeft.GridView.GetFocusedDataRow(), sqlValue); // this.ModuleGridObj.GridControlObj.LastSearchSql = this.ModuleGridObj.SearchObj.ReplaceLeftOrGridValue(sqlValue, true); // this.ModuleGridObj.SearchObj.SearchLastGrid(); //} //#endregion #endregion #region 事件 #region 下方选择模板动态刷新列 /// /// 说明:下方选择模板动态刷新列 /// 创建人:王一帆 /// 创建日期:2020-09-11 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// /// The sender. /// The instance containing the event data. private void OnRefreshBillSource(object sender, EventArgs e) { try { BaseUserControl baseControl = (sender as System.Windows.Forms.Control).ToBaseUserControl(); ControlModel model = baseControl.Model as ControlModel; string ConditionValue = this.MoudleBottomObj.SearchObj.GetControlValue(model.FieldName);//获取同它条件的替换值 DataTable columns = BillImpl.GetBillDetailBrpColumns(ConditionValue); string colorUnion = string.Format("MODULECOLOR_{0}", ConditionValue); if (columns != null && columns.Rows.Count > 0) { if ((columns.Rows.Cast().FirstOrDefault(x => (x["userName"] + "").Contains("|")) != null)) { this.mg_control.Visible = false; this.mg_bandcontrol.Visible = true; this.ModuleGridObj = this.mg_bandcontrol; } else { this.mg_control.Visible = true; this.mg_bandcontrol.Visible = false; this.ModuleGridObj = this.mg_control; } this.ModuleGridObj.GridControlObj.SetEditColumns(columns); this.ModuleGridObj.GridControlObj.SetGridRowColors(BaseModuleImpl.GetBaseGridRowColors(colorUnion)); } else { this._gridColumns = BaseModuleImpl.GetBaseGridColumns(this.Model.ModuleCode); if (Model.isBandGrid) { this.mg_control.Visible = false; this.mg_bandcontrol.Visible = true; this.ModuleGridObj = this.mg_bandcontrol; } else { this.mg_control.Visible = true; this.mg_bandcontrol.Visible = false; this.ModuleGridObj = this.mg_control; } if (SysModel.CanEdit) { this.ModuleGridObj.GridControlObj.SetEditColumns(this._gridColumns, GridCustomColumnStruct.BaseMainGridView + this.SysModel.FormKey); } else { this.ModuleGridObj.GridControlObj.SetReadOnlyColumns(this._gridColumns, GridCustomColumnStruct.BaseMainGridView + this.SysModel.FormKey); } this.ModuleGridObj.GridControlObj.SetGridRowColors(BaseModuleImpl.GetBaseGridRowColors(this.Model.ModuleCode)); } string sql = this.SysModel.MenuSql + "and " + this.MoudleBottomObj.SearchObj.RefreshControl + "='" + ConditionValue + "'"; //左侧上下结构刷新 this.ModuleGridObj.GridControlObj.LastSearchSql = this.ModuleGridObj.SearchObj.SetSearchSqlValue(sql); this.ModuleGridObj.GridControlObj.SetGridViewDataSource(MainImpl.GetDataTableResult(this.ModuleGridObj.GridControlObj.LastSearchSql)); } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message,ex.Message); } } #endregion #region 下部分表双击添加事件 /// /// 说明:下部分表双击添加事件 /// 创建人:王一帆 /// 创建日期:2020-09-08 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. /// The instance containing the event data. private void OnBottomDoubleClick(object sender, EventArgs e) { try { GridView ge = sender as GridView; DataRow[] rowItems = new DataRow[] { ge.GetFocusedDataRow() }; GridColumnCollection gridColumns = this.ModuleGridObj.GridControlObj.GridView.Columns; DataTable table = this.ModuleGridObj.GridControlObj.gridControl.DataSourceTable(); // 左侧关联 string parentKeyValue = string.Empty; if (!string.IsNullOrWhiteSpace(this.ModuleGridObj.ParentKeyField)) { DataRow dr = this.ModuleGridObj.ParentGridEx.GetViewFocusedDataRow(); parentKeyValue = dr!=null? dr[this.ModuleGridObj.ParentKeyField] + "":""; } foreach (DataRow rowItem in rowItems) { DataRow newRow = table.NewRow(); foreach (GridColumn col in gridColumns) { if ("id".Equals(col.FieldName) || col.FieldName.Equals(this.BottomModel.ParmaryKey)) continue; string ConditionValue = this.MoudleBottomObj.SearchObj.GetControlValue(col.FieldName);//获取同它条件的替换值 if (rowItem.Table.Columns.Contains(col.FieldName)) { // 列中是否包含对应字段,包含则使用值 newRow[col.FieldName] = string.IsNullOrWhiteSpace(ConditionValue) ? rowItem[col.FieldName] : ConditionValue; } else { // 未包含字段,则使用控件默认值. GridColumnModel model = col.Tag as GridColumnModel; string fieldValue = BaseImpl.GetDefaultValue(model.DefaultValue, parentKeyValue); if (!string.IsNullOrEmpty(model.DefaultValue) || !string.IsNullOrEmpty(ConditionValue)) { newRow[col.FieldName] = string.IsNullOrWhiteSpace(ConditionValue) ? fieldValue : ConditionValue; } } } table.Rows.Add(newRow); } this.ModuleGridObj.GridControlObj.GridView.ClearSelection(); this.ModuleGridObj.GridControlObj.GridView.UpdateCurrentRow(); this.ModuleGridObj.GridControlObj.GridView.ShowEditor(); string sql = this.SysModel.MenuSql; //左侧上下结构刷新 //this.ModuleGridObj.GridControlObj.LastSearchSql = this.ModuleGridObj.SearchObj.SetSearchSqlValue(sql, true, false); this.ModuleGridObj.SaveGridRecord(false); this.ModuleGridObj.GridControlObj.GridView.SelectRowHandler(table.Rows.Count - 1); } catch (Exception ex) { LogUtil.WriteError("表格双击移动错误", ex); LogHelper.Instance.WriteError(ex); //MessageUtil.Show(ResourceKeys.OperFault); string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message,ex.Message); } } #endregion #region 右键菜单执行后刷新数据,刷新规则按照上一次查询条件刷新 /// /// 说明:右键菜单执行后刷新数据,刷新规则按照上一次查询条件刷新 /// 创建人:王一帆 /// 创建日期:2020-09-09 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. /// The instance containing the event data. protected void OnGridViewRightCallBack(object sender, EventArgs e) { try { DataRow item = this.ModuleGridObj.GridControlObj.GridView.GetFocusedDataRow(); } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message,ex.Message); } } #endregion #endregion } }