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; using DevExpress.XtraGrid.Views.Base; using DevExpress.XtraGrid.Views.Grid.ViewInfo; using DevExpress.XtraEditors; using DevExpress.XtraTab; namespace Lskj.PubModelAdd3 { 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; set; } public GridDetailModel BottomDetailModel; /// ///左上方查询条件控件 /// public MyControl SearchLeftObj; /// /// 顶部表格控件 /// public ModuleGridEx ModuleGridObj; /// /// 系统模块实体对象 /// /// The system model. public ModuleModel SysModel { get; private set; } /// /// 底部多标签表格数据 /// public List GridDetailList; /// /// 系统模块下部分实体对象 /// /// The system model. public ModuleModel BottomModel { get; 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.mg_control.AfterDeleteGridCallBack += mg_control_AfterDeleteGridCallBack; this.mg_control.RightGridCallBack += OnGridAfterRightCallBack; this.BandModel.GridEnumObj = GridEnum.BandedGridView; //初始化多表头GridView this.mg_bandcontrol._leftGridSearchObj = _leftGridSearchObj; this.mg_bandcontrol.LeftGridEx = gridLeft; this.mg_bandcontrol.InitializeControl(SysModel, BandModel); this.ModuleGridObj.SearchObj.OnDataSourceBindCallBack += new EventHandler(OnDataSourceBindCallBack); this.ModuleGridObj.VisibleSearchPanel = false; InitSpliterPosition(); this.sccMain_container.SplitterPositionChanged += new EventHandler(OnSccMain_container_LocationChanged); this.sccRight_container.SplitterPositionChanged += new EventHandler(OnSccRight_container_LocationChanged); //this.pl_left_main.Parent = pl_right; //this.sccRight_container.Parent = pl_left; if (this.SysModel.MenuType == 5) { this.pl_left_main.Parent = pl_right; this.sccRight_container.Parent = pl_left; } switch (this.SysModel.MenuType) { case 5: // 左侧为表格 this.pl_left_main.Parent = pl_right; this.sccRight_container.Parent = pl_left; break; case 2: // 左侧为表格 this.pl_left_main.Parent = pl_left; this.sccRight_container.Parent = pl_right; break; case 3: // 左侧为空 default: this.sccMain_container.PanelVisibility = SplitPanelVisibility.Panel2; break; } } 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 初始化配置表格表 /// /// 说明:判断多标签里是否有明细表 /// 创建人:王一帆 /// 创建日期:2019-12-19 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// List<GridDetailModel>. private List GetDetails(string ModuleCode) { List details = new List(); DataTable table = BaseModuleImpl.GetBaseDetailPages(ModuleCode); foreach (DataRow item in table.Rows) { if (int.Parse(item["orderId"] + "") <= -1 && int.Parse(item["orderId"] + "") >= -9) { DataTable gridColumns = ReportImpl.GetReportDetailColumns(ModuleCode, item["id"] + ""); details.Add(new GridDetailModel(item, gridColumns, GridCustomColumnStruct.BaseDetailGridView)); } } return details; } /// /// 说明:加载下部分表格 /// 创建人:王一帆 /// 创建日期:2020-09-08 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void InitializeGrid() { this.GridDetailList = GetDetails(this.Model.ModuleCode);// 底部多标签表格数据 //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 (GridDetailList.Count > 0) { this.mg_Bottom.Visible = false; Model.IsDetailSearch = true; this.TabControl.Model = this.Model; this.TabControl.InitTabPages(this.GridDetailList); int i = 0; this.TabControl.TabControlObj.SelectedPageChanged += new DevExpress.XtraTab.TabPageChangedEventHandler(this.OnSelectedPageChanged); foreach (XtraTabPage page in this.TabControl.TabControlObj.TabPages) { Object moduleObject = page.Controls.Cast().FirstOrDefault(); ModuleGridEx moduleGridEx = null; if (moduleObject is ModuleGridEx) { moduleGridEx = moduleObject as ModuleGridEx; //moduleGridEx.VisibleMrpSearchPanel = false; //moduleGridEx.VisibleOperPanel = true; //moduleGridEx.VisibleSearchPanel = true; GridDetailModel DetailModel = moduleGridEx.GridControlObj.Tag as GridDetailModel; ModuleModel BottomModel = new ModuleModel(MainImpl.GetSystemdllTab(DetailModel.UnionModule)); //moduleGridEx.GridControlObj.GridView.DoubleClick += new EventHandler(OnBottomDoubleClick); moduleGridEx.SearchObj.OnSourceRefrshCallBack += OnRefreshBillSource; if (BottomModel.DragToLeft) { if (i == 0) { this.BottomModel = BottomModel; this.MoudleBottomObj = moduleGridEx; this.BottomDetailModel = DetailModel; } if (this.SysModel.DoubleClickMode) { moduleGridEx.GridControlObj.GridView.DoubleClick += new EventHandler(OnBottomDoubleClick); } else { GridDragGrid dragMainGrid = new GridDragGrid(moduleGridEx.GridControlObj.GridView, this.gridLeft.GridView); dragMainGrid.OnDragComplete += new GridFragGridCompleteEventHandler(OnDragMainGridCompleted); } } if (BottomModel.GridObjIsCheck == 1)//加载复选框 { GridDragGrid.GridAddCheckBox(moduleGridEx.GridControlObj.GridView); } if (this.SysModel.GridObjIsCheck == 1) { GridDragGrid.GridAddCheckBox(moduleGridEx.GridControlObj.GridView); } if (this.SysModel.LeftGridIsCheck == 1) { GridDragGrid.GridAddCheckBox(this.gridLeft.GridView); } i++; } } } } /// /// 切换页签赋予选中页签 /// /// /// private void OnSelectedPageChanged(object sender, TabPageChangedEventArgs e) { Object moduleObject = e.Page.Controls.Cast().FirstOrDefault(); ModuleGridEx moduleGridEx = null; if (moduleObject is ModuleGridEx) { this.MoudleBottomObj = moduleObject as ModuleGridEx; GridDetailModel DetailModel = MoudleBottomObj.GridControlObj.Tag as GridDetailModel; this.BottomModel = new ModuleModel(MainImpl.GetSystemdllTab(DetailModel.UnionModule)); this.BottomDetailModel = DetailModel; } } #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 { if (_leftGridSearchObj != null) 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) { string sqlValue = ReplaceHelper.ReplaceWhereCond(this.SysModel.MenuSql); sqlValue = this.SysModel.MenuSql.StartsWith("select", StringComparison.OrdinalIgnoreCase) ? sqlValue : sqlValue; DataRow dataRow = this.gridLeft.GridView.GetFocusedDataRow(); // 左侧gridView时,需要替换sql参数(包含查询条件、表格选中行). sqlValue = this._leftGridSearchObj != null ? this._leftGridSearchObj.ReplaceParentControlValue(sqlValue) : sqlValue; sqlValue = ReplaceHelper.ReplaceRowParam(dataRow, sqlValue); this.ModuleGridObj.GridControlObj.LastSearchSql = this.ModuleGridObj.SearchObj.ReplaceLeftOrGridValue(sqlValue, true); this.ModuleGridObj.SearchObj.SearchLastGrid(); bool Replacement = false; //右侧表格条件构建 if (this.MoudleBottomObj == null) return; foreach (ControlModel model in this.MoudleBottomObj.SearchObj._models) { if (dataRow.Table.Columns.Contains(model.FieldName)) { this.MoudleBottomObj.SearchObj.SetControlValue(model, dataRow[model.FieldName] + ""); Replacement = true; } } if (Replacement) this.MoudleBottomObj.SearchObj.SearchGrid(); } /// /// 说明:刷新右侧表格数据 /// 创建人:龚宇超 /// 创建日期:2018-03-19 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. protected void OnGridFocuseRowChange(object sender, 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 //#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 初始化分割条位置 /// /// 说明:初始化分割条位置 /// 创建人:龚宇超 /// 创建日期:2017-12-15 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void InitSpliterPosition() { string spliterPosition = IniHelper.Read(string.Format("Step_spliterPositionMain_{0}", this.Model.ModuleCode)); string spliterRightPosition = IniHelper.Read(string.Format("Step_spliterRightPositionMain_{0}", this.Model.ModuleCode)); if (!string.IsNullOrEmpty(spliterPosition)) this.sccMain_container.SplitterPosition = Convert.ToInt32(spliterPosition); if (!string.IsNullOrEmpty(spliterRightPosition)) this.sccRight_container.SplitterPosition = Convert.ToInt32(spliterRightPosition); } #endregion #endregion #region 事件 #region 下方选择模板动态刷新列 /// /// 说明:下方选择模板动态刷新列 /// 创建人:王一帆 /// 创建日期:2020-09-11 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// /// The sender. /// The instance containing the event data. private void OnRefreshBillSource(object sender, EventArgs e) { 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)); } #endregion /// /// 说明:明细拖拽保存主表方法 /// 创建人:王一帆 /// 创建日期:2021-03-10 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. /// The e. private void OnDragMainGridCompleted(object sender, GridDragGridArgs e) { if (e.GridViewSelectRows == null || e.GridViewSelectRows.Length == 0) return; try { if (MessageUtil.Show(ResourceKeys.DragSelectRow, MessageBoxButtons.YesNo) == DialogResult.Yes) { GridView ge = sender as GridView; DataRow[] rowItems = e.GridViewSelectRows; DataRow GridLeftItem = this.gridLeft.GridView.GetFocusedDataRow(); GridColumnCollection gridColumns = this.ModuleGridObj.GridControlObj.GridView.Columns; DataTable table = this.ModuleGridObj.GridControlObj.gridControl.DataSourceTable(); 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; } if (GridLeftItem.Table.Columns.Contains(col.FieldName)) { newRow[col.FieldName] = GridLeftItem[col.FieldName]; } else { // 未包含字段,则使用控件默认值. GridColumnModel model = col.Tag as GridColumnModel; string fieldValue = BaseImpl.GetDefaultValue(model.DefaultValue); 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); 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.SaveGridRecord(false); this.ModuleGridObj.GridControlObj.GridView.SelectRowHandler(table.Rows.Count - 1); if (this.BottomDetailModel != null && this.BottomDetailModel.AutoRefresh) { this.MoudleBottomObj.SearchObj.SearchLastGrid(); if (this.BottomModel.GridObjIsCheck == 1) { this.MoudleBottomObj.GridControlObj.GridView.ClearSelection(); } } this._leftGridSearchObj.SearchLastGrid(); } } catch (Exception ex) { LogHelper.Instance.WriteError(ex); LogUtil.WriteError("单据来源表格拖拽完出错!", ex); //MessageUtil.Show(ResourceKeys.OperFault); string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } #region 下部分表双击添加事件 /// /// 说明:下部分表双击添加事件 /// 创建人:王一帆 /// 创建日期:2020-09-08 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. /// The instance containing the event data. private void OnBottomDoubleClick(object sender, EventArgs e) { try { Point mouseDowmPoint = this.MoudleBottomObj.GridControlObj.gridControl.PointToClient(System.Windows.Forms.Control.MousePosition); GridHitInfo info = this.MoudleBottomObj.GridControlObj.GridView.CalcHitInfo(mouseDowmPoint); //在列标题栏内则退出该方法 if (info.InColumnPanel) return; DataRow[] rowItems = null; if (this.BottomModel.GridObjIsCheck == 1) { rowItems = this.MoudleBottomObj.GridControlObj.GetViewFocusedDataRows(); } else { rowItems = new DataRow[] { this.mg_Bottom.GridControlObj.GridView.GetFocusedDataRow() }; } if (!ValidateDetailCond(rowItems, BottomModel.DoubleClickAddCond)) return;//不满足条件则退出该方法 DataRow GridLeftItem = this.gridLeft.GridView.GetFocusedDataRow(); GridColumnCollection gridColumns = this.ModuleGridObj.GridControlObj.GridView.Columns; DataTable table = this.ModuleGridObj.GridControlObj.gridControl.DataSourceTable(); foreach (DataRow rowItem in rowItems) { if (rowItem == null) continue; 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 if (GridLeftItem != null && GridLeftItem.Table.Columns.Contains(col.FieldName)) { newRow[col.FieldName] = GridLeftItem[col.FieldName]; } else { // 未包含字段,则使用控件默认值. GridColumnModel model = col.Tag as GridColumnModel; string fieldValue = BaseImpl.GetDefaultValue(model.DefaultValue); 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); 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.SaveGridRecord(false); this.ModuleGridObj.GridControlObj.GridView.SelectRowHandler(table.Rows.Count - 1); if (this.BottomDetailModel != null && this.BottomDetailModel.AutoRefresh) { this.MoudleBottomObj.SearchObj.SearchLastGrid(); if (this.BottomModel.GridObjIsCheck == 1) { this.MoudleBottomObj.GridControlObj.GridView.ClearSelection(); } } if (_leftGridSearchObj != null) this._leftGridSearchObj.SearchLastGrid(); } 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 删除后刷新明细数据源 private void mg_control_AfterDeleteGridCallBack(object sender, EventArgs e) { if (this.BottomDetailModel != null && this.BottomDetailModel.AutoRefresh) { this.MoudleBottomObj.SearchObj.SearchLastGrid(); if (this.BottomModel.GridObjIsCheck == 1) { this.MoudleBottomObj.GridControlObj.GridView.ClearSelection(); } } if (_leftGridSearchObj != null) this._leftGridSearchObj.SearchLastGrid(); } /// /// 右键回调刷新所有 /// /// /// private void OnGridAfterRightCallBack(object sender, EventArgs e) { if (this.BottomDetailModel != null && this.BottomDetailModel.AutoRefresh) { this.MoudleBottomObj.SearchObj.SearchLastGrid(); if (this.BottomModel.GridObjIsCheck == 1) { this.MoudleBottomObj.GridControlObj.GridView.ClearSelection(); } } this._leftGridSearchObj.SearchLastGrid(); } #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(); if (_leftGridSearchObj != null) this._leftGridSearchObj.SearchLastGrid(); } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } #endregion #endregion #region 分隔条位置改变事件 /// /// 分隔条位置改变事件 /// /// /// private void OnSccMain_container_LocationChanged(object sender, EventArgs e) { IniHelper.Write(string.Format("Step_spliterPositionMain_{0}", this.Model.ModuleCode), this.sccMain_container.SplitterPosition + ""); } /// /// 分隔条右边位置改变事件 /// /// /// private void OnSccRight_container_LocationChanged(object sender, EventArgs e) { IniHelper.Write(string.Format("Step_spliterRightPositionMain_{0}", this.Model.ModuleCode), this.sccRight_container.SplitterPosition + ""); } #endregion #region 条件判断 /// /// 说明:条件判断 /// 创建人:龚宇超 /// 创建日期:2017-11-30 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// true if XXXX, false otherwise. private bool ValidateDetailCond(DataRow[] rowItems, string conditions) { bool validate = false; try { foreach (DataRow rowItem in rowItems) { string detailCond = ReplaceHelper.ReplaceRowParam(rowItem, conditions); if (detailCond.Contains("#")) { List condition = ReplaceHelper.GetParamFields(detailCond); foreach (string item in condition) { string fieldValue = this.MoudleBottomObj.SearchObj.GetControlValue(item.Replace("{#", "").Replace("}", "")); detailCond = detailCond.Replace(item, fieldValue); } } if (detailCond.StartsWith("@") || detailCond.StartsWith("!")) { validate = "1".Equals(BaseImpl.GetDefaultValue(detailCond)); } else { validate = ReplaceHelper.EvalCond(detailCond); } if (!validate) { break; } } } catch (Exception ex) { LogHelper.Instance.WriteLog(ex.StackTrace); LogUtil.WriteError("验证多条添加条件出错!", ex); //MessageUtil.Show(ResourceKeys.CondtionError + "\r\n" + unionModel.ModelObj.DetailEnableCond); } return validate; } #endregion } }