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.Business.Impl; using DevExpress.XtraGrid.Views.Grid; using Lskj.Data; using DevExpress.XtraBars; using DevExpress.XtraTab; using DevExpress.XtraEditors; using System.Collections; using Lskj.PubBillNewDrag.Model; using DevExpress.Data; using DevExpress.XtraGrid.Columns; using System.IO; using Lskj.Business; using System.Text.RegularExpressions; using DevExpress.XtraTreeList.Nodes; using DevExpress.XtraEditors.Repository; using DevExpress.XtraGrid.Views.Base; using System.Threading; using DevExpress.XtraGrid.Views.Grid.ViewInfo; using Lskj.Core; namespace Lskj.PubBillNewDrag { public partial class BillModule : UserControl { /// /// 是否为初始化创建 /// private bool _isInitFinish; /// /// 是否加载右侧控件数据 /// private bool _isLoadRightControlValue = true; /// /// 是否手动选择了模版 /// private bool _isSelectedTemplete; /// /// 是否直接打印 /// private bool _isExcPrint; /// /// 主打印Sql /// private string _mainPrintSql; private string guidField = "xxxxx_guid"; /// /// 主键字段 /// private string mRecordPrimaryField; /// /// 单据水印 /// private WaterMark _waterMark; /// /// 导入单据明细数据、导入单据明细并更新 /// private BarButtonItem _itemImport, _itemImportUpdate; /// /// 打印主sql中关联打印次数返回条件 /// private string _printModeCond; /// /// 打印完成后添加数据用到的参数: 表名,列前缀,主键字段,主键值,模块编号,主打印Sql /// private List _printSaveParams; /// /// 单据明细列 /// private DataTable _detailColumns; private bool IsCopying = false; /// /// 单据来源明细拖拽删除当前行数据集合 /// private List RemoveRowitem=new List(); protected DataRow BillRowItem; /// /// 主表控件 /// protected MyControl ControlObj; /// /// 入口参数 /// protected DynamicBillModel SysModel; /// /// 是否为Brp模版 /// /// true if this instance is BRP templete; otherwise, false. protected bool IsBrpTemplete { get { return SysModel is DynamicBillBrpModel; } } /// /// /// public BillModel BillModel; /// /// 快速扫码控件 /// /// The main bottom input object. public PanelControl MainBottomInputObj { get { return this.pl_input; } } /// /// Brp模版控件 /// /// The main bottom templete object. public PanelControl MainBottomTempleteObj { get { return this.pl_templete; } } /// /// 数量名称 /// public string NumberMc; /// /// 红字单据的分配管理模块 /// public string rdRedUnionCode; /// /// 蓝字单据的分配管理模块 /// public string rdBlueUnionCode; /// /// 蓝字单据的分配管理模块 /// Dictionary pageNumKey = new Dictionary(); /// /// 是否拖拽换行展示 /// public bool isDragWrap = true; /// /// 触发主表改变刷新来源限制 /// private bool IsBillMaster = true; /// /// 是否执行了加载储存过程 /// public bool ProcessExists = false; /// /// 保存或修改时报错信息 /// public string SaveErrorMessage = string.Empty; /// /// /// public string AssociatedField = string.Empty; /// /// 单据明细删除的行 /// private Dictionary ToWithdrawRows = new Dictionary(); public BillModule() { InitializeComponent(); } #region 初始化操作 /// /// 说明:窗口加载 /// 创建人:龚宇超 /// 创建日期:2017-11-23 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The instance containing the event data. public void OnLoad(DynamicBillModel Model) { try { this.SysModel = Model;// 单据动态链接库参数,入口参数 this._isInitFinish = false;// 是否为初始化创建 this.ssc_main.Visible = false; //获取或设置一个值,该值指示是否显示该控件及其所有子控件。 this.ProcessExists = (Lskj.Data.Caches.CacheSYSConfig.Instance().JudgeProcessExists() && SystemInfo.Instance.isExecload); this.InitializeSetting();//初始化系统配置 this.InitializeControl();//初始化控件 this.InitlizeSpiltLocation(); this.gcMain.GridView.KeyDown += new KeyEventHandler(OnToWithdraw); } catch (Exception ex) { LogHelper.Instance.WriteError(ex); LogUtil.WriteError("单据初始化窗体失败!", ex); MessageUtil.Show(ex.StackTrace); } finally { this._isInitFinish = true; this.ssc_main.Visible = true; } } /// /// 说明:初始化分割条位置 /// 创建人:龚宇超 /// 创建日期:2018-03-06 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void InitlizeSpiltLocation() { try { // 设置单据来源左侧宽度 if (this.BillModel.PanelWidth == 0) { // 隐藏来源 this.ssc_main_top.PanelVisibility = SplitPanelVisibility.Panel2; } else { string width = IniHelper.Read(string.Format("bill_width_{0}", this.SysModel.ModuleCode)); if (!string.IsNullOrEmpty(width)) this.ssc_main_top.SplitterPosition = Convert.ToInt32(width); } // 设置单据来源底部高度 if (this.BillModel.PanelHeight == 0) { // 隐藏来源明细 this.ssc_main.PanelVisibility = SplitPanelVisibility.Panel1; } else { string height = IniHelper.Read(string.Format("bill_height_{0}", this.SysModel.ModuleCode)); if (!string.IsNullOrEmpty(height)) this.ssc_main.SplitterPosition = Convert.ToInt32(height); } } catch (Exception ex) { LogHelper.Instance.WriteError(ex); } } /// /// 说明:初始化系统配置 /// 创建人:龚宇超 /// 创建日期:2017-11-27 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void InitializeSetting() { if (ProcessExists) { this.BillModel = new BillModel(Lskj.Data.Caches.CacheSYSConfig.Instance().GetBaseDetailPages().Rows[0]); if (this.BillModel != null) { this.BillModel.TypeName = string.IsNullOrEmpty(SysModel.BillMasterSql) ? this.SysModel.FormText : this.BillModel.TypeName;// 模块名称 this.BillModel.MasterPreFix = Lskj.Data.Caches.CacheSYSConfig.Instance().GetColumnPrefix(); this.BillModel.DetailPreFix = Lskj.Data.Caches.CacheSYSConfig.Instance().GetColumnPrefix(); this.BillModel.DetailOrderField = this.BillModel.DetailPreFix + "lsidx_id";// 单据来源id } DataRow menuRow = Lskj.Data.Caches.CacheSYSConfig.Instance().GetMenuConfigTab();//获取菜单其他配置 if (menuRow != null) { this.BillModel.BillSourceIds = Lskj.Data.Caches.CacheSYSConfig.Instance().GetColumnPrefix(); this.BillModel.BillFlag = int.Parse(Lskj.Data.Caches.CacheSYSConfig.Instance().GetColumnPrefix()); } } else { this.BillModel = new BillModel(BillImpl.GetBillInfo(this.SysModel.ModuleCode));//初始化类的新实例。 if (this.BillModel != null) { this.BillModel.TypeName = string.IsNullOrEmpty(SysModel.BillMasterSql) ? this.SysModel.FormText : this.BillModel.TypeName;// 模块名称 this.BillModel.MasterPreFix = BaseImpl.GetColumnPrefix(this.BillModel.MasterTable);// 主表列前缀 this.BillModel.DetailPreFix = BaseImpl.GetColumnPrefix(this.BillModel.DetailTable);// 明细表列前缀 this.BillModel.DetailOrderField = this.BillModel.DetailPreFix + "lsidx_id";// 单据来源id } DataRow menuRow = BillImpl.GetMenuConfigTab(this.SysModel.ModuleId);//获取菜单其他配置 if (menuRow != null) { this.BillModel.BillSourceIds = menuRow.Table.Columns.Contains("BillSourceIds") ? (menuRow["BillSourceIds"] + "").Trim(',') : string.Empty; this.BillModel.BillFlag = menuRow.Table.Columns.Contains("BillFlag") && !string.IsNullOrEmpty(menuRow["BillFlag"] + "") ? Convert.ToInt32(menuRow["BillFlag"] + "") : -1; } } //获取打印其他参数 GetPrintOtherParam(); BillImpl.InitBillSetting(this.BillModel); } /// /// 说明:初始化分配关联模块 /// 创建人:王一帆 /// 创建日期:2020-02-18 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void InitializeUnionCode() { if (this.BillModel.PopupUnionCode.Contains(",")) { string[] UnionCodeSplit = this.BillModel.PopupUnionCode.Split(','); if (UnionCodeSplit.Length >= 1) { this.BillModel.PopupUnionCode = this.BillModel.BillFlag == 1 ? UnionCodeSplit[1] + "" : UnionCodeSplit[0] + ""; rdBlueUnionCode = UnionCodeSplit[0] + ""; rdRedUnionCode = UnionCodeSplit[1] + ""; } } else { rdBlueUnionCode = rdRedUnionCode = this.BillModel.PopupUnionCode; } } /// /// 说明:初始化控件 /// 创建人:龚宇超 /// 创建日期:2017-11-23 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void InitializeControl() { if (this.IsBrpTemplete)// 是否为Brp模版 this.InitializeTemplete(); this.InitializeStatus();//初始化红蓝字单 this.InitializeOper();//初始化常用操作等功能 this.InitializeBillInfo();//初始化单据控件信息 if (this.BillModel.PanelWidth > 0) this.InitializeBillSource();//初始化单据来源 } /// /// 说明:初始化红蓝字单 /// 创建人:龚宇超 /// 创建日期:2017-11-27 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void InitializeStatus() { // 初始化红、蓝单 if (this.BillModel.BillFlag == 0) { this.rdBlue.Checked = true; this.rdRed.Checked = false; this.lbTitle.ForeColor = Color.Blue; this.pl_red.Visible = false; } if (this.BillModel.BillFlag == 1) { this.rdRed.Checked = true; this.rdBlue.Checked = false; this.lbTitle.ForeColor = Color.Red; this.pl_blue.Visible = false; } this.dpCopyBill.Enabled = this.BillModel.CanCopy; this.dpbImport.Enabled = this.BillModel.CanImport || this.BillModel.CanExport; if (this.SysModel.HasReadPrivilege()) this.pl_main_bottom.Enabled = false; this.ssc_main_top.SplitterPosition = this.BillModel.PanelWidth; InitializeUnionCode();//根据红蓝字段更新分配 this.btnFP.Visible = !string.IsNullOrWhiteSpace(this.BillModel.PopupUnionCode); } /// /// 说明:初始化常用操作等功能 /// 创建人:龚宇超 /// 创建日期:2017-11-27 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void InitializeOper() { BarButtonItem itemCopyMaster = new BarButtonItem(); itemCopyMaster.Caption = "复制表头信息"; itemCopyMaster.ItemClick += new ItemClickEventHandler(OnCopyMasterItemClick); BarButtonItem itemCopyAll = new BarButtonItem(); itemCopyAll.Caption = "复制整单信息"; itemCopyAll.ItemClick += new ItemClickEventHandler(OnCopyAllItemClick); BarButtonItem itemExport = new BarButtonItem(); itemExport.Caption = "导出Excel文件"; itemExport.ItemClick += new ItemClickEventHandler(OnExportItemClick); this._itemImport = new BarButtonItem(); this._itemImport.Caption = "导入Excel文件"; this._itemImport.ItemClick += new ItemClickEventHandler(OnImportItemClick); this._itemImportUpdate = new BarButtonItem(); this._itemImportUpdate.Caption = "导入Excel文件(更新)"; this._itemImportUpdate.ItemClick += new ItemClickEventHandler(OnImportUpdateItemClick); // 复制单据 this.pmBill.AddItems(new BarItem[] { itemCopyMaster, itemCopyAll }); // 导入导出 if (this.BillModel.CanExport) this.pmBillExp.AddItem(itemExport); if (this.BillModel.CanImport) this.pmBillExp.AddItems(new BarItem[] { _itemImport, _itemImportUpdate }); // 打印模版 string[] files = this.BillModel.PrintFile.Split('|'); for (int i = 0; i < files.Length; i++) { string fileName = files[i]; if (!string.IsNullOrWhiteSpace(fileName)) { BarButtonItem itemPrint = new BarButtonItem(); int index = i + 1; itemPrint.Caption = files[i].Replace(".rmf", "").Replace(".frx", ""); itemPrint.Tag = files[i]; itemPrint.ItemClick += new ItemClickEventHandler(OnPrintItemClick); pMprint.AddItem(itemPrint); } } // 常用工具 bool ProcessExists = (Lskj.Data.Caches.CacheSYSConfig.Instance().JudgeProcessExists()&&SystemInfo.Instance.isExecload); DataTable tableCommon = new DataTable(); if (ProcessExists) { tableCommon = Lskj.Data.Caches.CacheSYSConfig.Instance().GetBaseGridRightMenus();//获取右键菜单数据 } else { tableCommon = BaseModuleImpl.GetBaseGridRightMenus(this.SysModel.ModuleCode, ModuleType.BillDetail);//获取右键菜单数据 } foreach (DataRow item in tableCommon.Rows) { BarButtonItem itemCommon = new BarButtonItem(); itemCommon.Caption = item["menuname"] + ""; itemCommon.Tag = item; itemCommon.ItemClick += new ItemClickEventHandler(OnCommonItemClick); pMenu.AddItem(itemCommon); } } /// /// 说明:初始化单据控件信息 /// 创建人:龚宇超 /// 创建日期:2017-11-27 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void InitializeBillInfo() { DataTable controls = new DataTable(); DataTable groups = new DataTable(); // 初始化表头 if (ProcessExists) { controls = Lskj.Data.Caches.CacheSYSConfig.Instance().GetCustomQueryFields(); groups = Lskj.Data.Caches.CacheSYSConfig.Instance().GetCustomQueryFields(); //获取主信息分组数据 } else { controls = BaseModuleImpl.GetControlLocation(this.BillModel.FormKey, this.SysModel.ModuleCode); groups = BaseModuleImpl.GetAddGroupData(this.BillModel.FormKey);//获取主信息分组数据 } this.ControlObj = new MyControl();//// 主表控件 this.ControlObj.OtherParams = this.SysModel.OtherParams(); this.ControlObj.InitControl(controls, this.pl_main_center_master, groups); this.ControlObj.OnSourceRefrshCallBack += OnRefreshBillSource; this.ControlObj.OnDataSourceBindCallBack += new EventHandler(OnInitializeHeaderCallBack); this.pl_main_center_master.Height = (this.BillModel.ParentHeight - 36) > this.pl_main_center_master.Height ? this.pl_main_center_master.Height : this.BillModel.ParentHeight - 36; // 初始化明细 // 创建多表头,默认标准表格 if (this.SysModel.GridEnumObj == GridEnum.BandedGridView || this.BillModel.AutoMultiHeader == 1) { this.pl_main_center_detail.Controls.Clear(); this.gcMain = new BandedGridControlEx(); this.gcMain.Model = this.SysModel; this.gcMain.Dock = DockStyle.Fill; this.pl_main_center_detail.Controls.Add(this.gcMain); } if (ProcessExists) { _detailColumns = Lskj.Data.Caches.CacheSYSConfig.Instance().AccessToContent(); } else { _detailColumns = BillImpl.GetDetailColumns(this.SysModel.ModuleCode);//初始化单据明细列 } this.gcMain.Model = this.SysModel; this.gcMain.ParentControl = this.ControlObj;//把主表控件赋给 单据主表控件、基础档案查询条件控件等等 this.gcMain.SetEditColumns(_detailColumns, GridCustomColumnStruct.BillDetailGridView + this.BillModel.FormKey);//设置可编辑列 if (this.BillModel.IsBillMainDetailCheck == 1)//加载明细复选框 { GridDragGrid.GridAddCheckBox(this.gcMain.GridView); } if (ProcessExists) { this.gcMain.SetGridRowColors(Lskj.Data.Caches.CacheSYSConfig.Instance().GetBaseGridRowColors()); if (this.gcMain is BandedGridControlEx)// 判断是不是多表头表格 { //设置表格右键菜单 (this.gcMain as BandedGridControlEx).SetGridRightMenus(Lskj.Data.Caches.CacheSYSConfig.Instance().GetBaseGridRightMenus(), this.SysModel, OnGridViewRightCallBack, this.ControlObj); } else { this.gcMain.SetGridRightMenus(Lskj.Data.Caches.CacheSYSConfig.Instance().GetBaseGridRightMenus(), this.SysModel, OnGridViewRightCallBack, this.ControlObj); } } else { this.gcMain.SetGridRowColors(BaseModuleImpl.GetBaseGridRowColors("BILLDETAIL_" + this.BillModel.FormKey)); if (this.gcMain is BandedGridControlEx)// 判断是不是多表头表格 { //设置表格右键菜单 (this.gcMain as BandedGridControlEx).SetGridRightMenus(BaseModuleImpl.GetBaseGridRightMenus("BILLDETAIL_" + this.SysModel.ModuleCode), this.SysModel, OnGridViewRightCallBack, this.ControlObj); } else { this.gcMain.SetGridRightMenus(BaseModuleImpl.GetBaseGridRightMenus("BILLDETAIL_" + this.SysModel.ModuleCode), this.SysModel, OnGridViewRightCallBack, this.ControlObj); } } this.gcMain.GridView.DoubleClick += new EventHandler(OnGridViewDoubleClick); this.gcMain.GridView.ShowingEditor += new CancelEventHandler(OnGridViewShowingEditor); if (this.BillModel.DefaultAddEmptyRow) { this.gcMain.GridView.OptionsView.NewItemRowPosition = NewItemRowPosition.Bottom; this.gcMain.GridView.MouseDown += GridView_MouseDown; this.gcMain.GridView.FocusedRowChanged += GridView_FocusedRowChanged; } //程序若配置扫码框则回车换行 if (this._detailColumns.Rows.Cast().FirstOrDefault(x => x["fieldsqltag"].ToString() == ControlType.LabSacn + "") != null) { this.gcMain.GridView.CellValueChanged += new CellValueChangedEventHandler(OnGridViewCellValueChanged); } //this.gcMain.GridView.InitNewRow += new InitNewRowEventHandler(OnGridViewInitNewRow); this.gcMain.GridView.RowCellClick += OngcMainRowCellClick; } /// /// 说明:数据绑定后判断是否是右键打开模块赋值 /// 创建人:王一帆 /// 创建日期:2020-03-27 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. protected void OnInitializeHeaderCallBack(object sender, EventArgs e) { // 通过右键菜单打开单据时,判断修改还是新增 if (!string.IsNullOrEmpty(this.SysModel.BillOrderNo)) { // 修改 string sqlValue = "select * from " + this.BillModel.MasterTable + " where 1=1"; string sqlCond = string.Format(" and {0}='{1}'", this.BillModel.PrimaryKey, this.SysModel.BillOrderNo); DataTable masterTable = BillImpl.GetDataTableResult(sqlValue + sqlCond); this.SetBillStatus(masterTable.Rows.Count > 0 ? masterTable.Rows[0] : null); } else { this.SetBillStatus(null); // 新增 if (!string.IsNullOrEmpty(this.SysModel.BillMasterSql)) { // 处理单据表头数据 DataRow row = BillImpl.GetDataRowResult(this.SysModel.BillMasterSql); if (row != null) { this.ControlObj.SetAllControlValue(row, true); // 设置Brp模版 if (this.IsBrpTemplete) { this.SetTempleteSelectedValue(row["brpId"] + ""); } } } if (!string.IsNullOrEmpty(this.SysModel.BillMasterSql)) { // 处理单据明细数据 this.AddMultiRowToGridView(BillImpl.GetDataTableResult(this.SysModel.BillDetailSql)); } } } /// /// 说明:表格编辑时,判断是否是否编辑 /// 创建人:王一帆 /// 创建日期:2020-03-27 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. protected void OnGridViewShowingEditor(object sender, CancelEventArgs e) { try { DataRow rowItem = this.gcMain.GridView.GetDataRow(this.gcMain.GridView.FocusedRowHandle); if (!string.IsNullOrWhiteSpace(BillModel.UpdateDetailCond)) { string UpdateCond = this.ControlObj.ReplaceParentControlValue(BillModel.UpdateDetailCond); UpdateCond = ReplaceHelper.ReplaceRowParam(rowItem, UpdateCond); if (!ReplaceHelper.EvalCond(UpdateCond)) { e.Cancel = true;//该行不可编辑 } } } catch (Exception ex) { LogHelper.Instance.WriteError(ex); } } /// /// 虚拟行点击添加 /// /// private void InitNewRowMethod(object sender) { GridView view = sender as DevExpress.XtraGrid.Views.Grid.GridView; DataTable gridTable = (this.gcMain.GridControl.DataSource as DataTable).TrimDeleteRows(); DataRow tmpRow = gridTable.NewRow(); gridTable.Rows.Add(tmpRow); int position = gridTable.Rows.Count - 1; foreach (DataRow dr in _detailColumns.Rows) { GridColumnModel model = new GridColumnModel(dr); string fieldValue = BaseImpl.GetDefaultValue(model.DefaultValue); if (model.DefaultValue.Contains("{#")) { fieldValue = this.ControlObj.ReplaceParentControlValue(model.DefaultValue); if (!string.IsNullOrEmpty(fieldValue)) { tmpRow[model.FieldName] = fieldValue; } } else if (!string.IsNullOrEmpty(model.DefaultValue)) { if (model.DefaultValue.Contains("{ROW")) { if (position > 0) { fieldValue = ReplaceHelper.GetParamFields(model.DefaultValue)[0]; fieldValue = fieldValue.Replace("}", "").Replace("{", ""); fieldValue = fieldValue.Substring(fieldValue.IndexOf('_') + 1); string topFieldValue = gridTable.Rows[position - 1][fieldValue] + ""; if (gridTable.Columns[model.FieldName].DataType == typeof(DateTime)) { if (!string.IsNullOrEmpty(topFieldValue)) tmpRow[model.FieldName] = Convert.ToDateTime(topFieldValue); } else { tmpRow[model.FieldName] = topFieldValue; } } } else { tmpRow[model.FieldName] = fieldValue; } } } gridTable.OrderBy(this.BillModel.DetailOrderField); if (tmpRow.Table.Columns.Contains(this.BillModel.DetailOrderField) && gridTable.Rows.Count == 0) { tmpRow[this.BillModel.DetailOrderField] = 1; } this.gcMain.GridView.UpdateCurrentRow(); this.gcMain.GridView.ShowEditor(); } /// /// 切换行判断是否是虚拟行数据进行数据填充 /// /// /// private void GridView_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e) { DataTable gridTable = (this.gcMain.GridControl.DataSource as DataTable).TrimDeleteRows(); int _rowNumber = this.gcMain.GridView.FocusedRowHandle; int _prvFocused = e.PrevFocusedRowHandle; int indexNumber = this.gcMain.GridView.RowCount; if (_rowNumber < 0 && _prvFocused != gridTable.Rows.Count) { InitNewRowMethod(sender); this.gcMain.GridView.FocusedRowHandle = indexNumber - 1; } } /// /// 说明:单据重写明细回车事件(用于扫码回车移动至下一行数据) /// 创建人:王一帆 /// 创建日期:2021-06-08 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. /// The instance containing the event data. protected void OnGridViewCellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e) { if (isDragWrap) { int _rowNumber = this.gcMain.GridView.FocusedRowHandle; GridColumn focusColumn = this.gcMain.GridView.FocusedColumn; GridColumnModel Columnmodel = focusColumn.Tag as GridColumnModel; if (Columnmodel.FieldType == ControlType.LabSacn) { this.gcMain.GridView.OptionsNavigation.EnterMoveNextColumn = false; if (this.BillModel.DefaultAddEmptyRow && _rowNumber + 1 == this.gcMain.GridView.DataRowCount) { DataTable gridTable = (this.gcMain.GridView.GridControl.DataSource as DataTable).TrimDeleteRows(); DataRow tmpRow = gridTable.NewRow(); gridTable.Rows.Add(tmpRow); int position = gridTable.Rows.Count - 1; foreach (DataRow dr in _detailColumns.Rows) { GridColumnModel model = new GridColumnModel(dr); string fieldValue = BaseImpl.GetDefaultValue(model.DefaultValue); if (model.DefaultValue.Contains("{#")) { fieldValue = this.ControlObj.ReplaceParentControlValue(model.DefaultValue); if (!string.IsNullOrEmpty(fieldValue)) { tmpRow[model.FieldName] = fieldValue; } } else if (!string.IsNullOrEmpty(model.DefaultValue)) { if (model.DefaultValue.Contains("{ROW")) { if (position > 0) { fieldValue = ReplaceHelper.GetParamFields(model.DefaultValue)[0]; fieldValue = fieldValue.Replace("}", "").Replace("{", ""); fieldValue = fieldValue.Substring(fieldValue.IndexOf('_') + 1); string topFieldValue = gridTable.Rows[position - 1][fieldValue] + ""; if (gridTable.Columns[model.FieldName].DataType == typeof(DateTime)) { if (!string.IsNullOrEmpty(topFieldValue)) tmpRow[model.FieldName] = Convert.ToDateTime(topFieldValue); } else { tmpRow[model.FieldName] = topFieldValue; } } } else { tmpRow[model.FieldName] = fieldValue; } } } gridTable.OrderBy(this.BillModel.DetailOrderField); if (tmpRow.Table.Columns.Contains(this.BillModel.DetailOrderField) && gridTable.Rows.Count == 0) { tmpRow[this.BillModel.DetailOrderField] = 1; } this.gcMain.GridView.UpdateCurrentRow(); this.gcMain.GridView.ShowEditor(); } int ColumnIndex = this.gcMain.GridView.FocusedColumn.VisibleIndex;//焦点列的坐标 this.gcMain.GridView.FocusedRowHandle = _rowNumber + 1; this.gcMain.GridView.FocusedColumn.VisibleIndex = ColumnIndex; //this.gridView.OptionsNavigation.EnterMoveNextColumn = true; } else { this.gcMain.GridView.OptionsNavigation.EnterMoveNextColumn = true; } } } /// /// 点击第一个默认新增行新增默认数据 /// /// /// private void GridView_MouseDown(object sender, MouseEventArgs e) { } /// /// 说明:初始化单据来源 /// 创建人:龚宇超 /// 创建日期:2017-11-28 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void InitializeBillSource() { this.xtc_left_container.TabPages.Clear(); List attachModels = GetAttachTabs(); DataTable masterTable = new DataTable(); DataTable detailTable = new DataTable(); if (ProcessExists) { masterTable = Lskj.Data.Caches.CacheSYSConfig.Instance().AccessToContent(); detailTable = Lskj.Data.Caches.CacheSYSConfig.Instance().AccessToContent(); } else { Hashtable htTable = BillImpl.GetSources(this.SysModel.ModuleCode, this.BillModel.BillSourceIds);//获取单据来源 masterTable = htTable["master"] as DataTable; detailTable = htTable["detail"] as DataTable; } /* 构造原理 * 1. 假如存在附加信息,则底部显示来源明细(来源明细摆放在标签第一个位置)+多标签,假如标签只有一个则隐藏标签头. * 2. 假如不存在附加信息,则底部只显示来源明细. **/ if (attachModels.Count > 0) { this.tb_buttom.Model = this.SysModel; this.tb_buttom.InitTabPages(attachModels); } else { this.tb_buttom.TabControlObj.ShowTabHeader = DevExpress.Utils.DefaultBoolean.False; } for (int i = 0; i < masterTable.Rows.Count; i++) { BillSourceModel model = new BillSourceModel(masterTable.Rows[i]); BillSourceUnionModel unionModel = new BillSourceUnionModel(); DataTable controls = new DataTable(); if (ProcessExists) { controls = Lskj.Data.Caches.CacheSYSConfig.Instance().GetCustomQueryFields(); } else { controls = BaseModuleImpl.GetCustomQueryFields(model.FormKey); } XtraTabPage tabPage = new XtraTabPage(); tabPage.Text = model.UserName; #region 加载快速添加 if (!string.IsNullOrWhiteSpace(model.CodeInputSql) && !string.IsNullOrWhiteSpace(model.CodeInputCaption)) { ComboBoxEditModel editModel = new ComboBoxEditModel() { ValuemMeber = "id", TextMember = "CodeInputCaption", RowItem = masterTable.Rows[i], SourceModel = model, UnionModel = unionModel }; this.cb_input.Properties.Items.Add(editModel); } #endregion #region 加载来源表头 GridControlEx gridControl = null; TreeViewEx treeView = null; if (model.SourceType == 1) { // 来源为树类型 treeView = new TreeViewEx(); treeView.BorderStyle = BorderStyle.None; treeView.Dock = DockStyle.Fill; treeView.TreeNodeKeyField = model.SourceKeyField; treeView.TreeNodeTextField = model.SourceResult; treeView.BindTreeView(BillImpl.GetDataTableResult(model.SourceSql)); treeView.TreeNodeSelectAfter += new TreeViewEventHandler(OnTreeNodeSelectAfter); tabPage.Controls.Add(treeView); } else if (model.SourceType == 3 || model.SourceType == 4) { gridControl = new TreeGridControlEx(); gridControl.Dock = DockStyle.Fill; gridControl.BorderStyle = System.Windows.Forms.BorderStyle.None; gridControl.Model = this.SysModel; if (ProcessExists) { gridControl.SetReadOnlyColumns(Lskj.Data.Caches.CacheSYSConfig.Instance().AccessToContent(), GridCustomColumnStruct.BillSourceGridView + model.FormKey); gridControl.SetGridRowColors(Lskj.Data.Caches.CacheSYSConfig.Instance().GetBaseGridRowColors()); gridControl.SetGridRightMenus(Lskj.Data.Caches.CacheSYSConfig.Instance().GetBaseGridRightMenus(), this.SysModel, OnGridControlRightCallback); } else { gridControl.SetReadOnlyColumns(BillImpl.GetSourceColumns(model.Id), GridCustomColumnStruct.BillSourceGridView + model.FormKey); gridControl.SetGridRowColors(BaseModuleImpl.GetBaseGridRowColors("BILLSOURCE_" + model.FormKey)); gridControl.SetGridRightMenus(BaseModuleImpl.GetBaseGridRightMenus("BILLSOURCE_" + model.FormKey), this.SysModel, OnGridControlRightCallback); } unionModel.TreeGridControlObj = gridControl as TreeGridControlEx; unionModel.TreeGridControlObj.TreeListObj.FocusedNodeChanged += new DevExpress.XtraTreeList.FocusedNodeChangedEventHandler(OnTreeListObjFocusedNodeChanged); tabPage.Controls.Add(gridControl); } else { // 来源为表格类型 gridControl = new GridControlEx(); gridControl.BorderStyle = BorderStyle.None; gridControl.Model = this.SysModel; gridControl.Dock = DockStyle.Fill; if (ProcessExists) { gridControl.SetReadOnlyColumns(Lskj.Data.Caches.CacheSYSConfig.Instance().AccessToContent(), GridCustomColumnStruct.BillSourceGridView + model.FormKey); gridControl.SetGridRowColors(Lskj.Data.Caches.CacheSYSConfig.Instance().GetBaseGridRowColors()); gridControl.SetGridRightMenus(Lskj.Data.Caches.CacheSYSConfig.Instance().GetBaseGridRightMenus(), this.SysModel, OnGridControlRightCallback); } else { gridControl.SetReadOnlyColumns(BillImpl.GetSourceColumns(model.Id), GridCustomColumnStruct.BillSourceGridView + model.FormKey); gridControl.SetGridRowColors(BaseModuleImpl.GetBaseGridRowColors("BILLSOURCE_" + model.FormKey)); gridControl.SetGridRightMenus(BaseModuleImpl.GetBaseGridRightMenus("BILLSOURCE_" + model.FormKey), this.SysModel, OnGridControlRightCallback); } //gridControl.GridView.SelectionChanged += new SelectionChangedEventHandler(OnGridControlSelectionChanged); //gridControl.GridView.FocusedRowObjectChanged += OnFocusedRowObjectChanged; gridControl.GridView.RowCellClick += OnGridViewRowCellClick; // 2019-11-12 cmd提出改为行点击事件,否则会出现保存提交后,单据管理无法查询出数据 if (BillModel.IsBillSourceCheck == 1) { GridDragGrid.GridAddCheckBox(gridControl.GridView); } if (model.SourceType == 0) { GridDragGrid dragMainGrid = new GridDragGrid(gridControl.GridView, this.gcMain.GridView); dragMainGrid.OnDragComplete += new GridFragGridCompleteEventHandler(OnDragMainGridCompleted); } tabPage.Controls.Add(gridControl); } #endregion #region 加载来源明细 XtraTabPage tabDetail = new XtraTabPage(); DataRow[] detailColumns = detailTable.Select("sourceId=" + model.Id); GridControlEx gridDetail = new GridControlEx(); gridDetail.Model = this.SysModel; gridDetail.Dock = DockStyle.Fill; gridDetail.SetReadOnlyColumns(detailColumns == null || detailColumns.Length == 0 ? new DataTable() : detailColumns.CopyToDataTable(), GridCustomColumnStruct.BillSourceDetailGridView + model.FormKey); if (ProcessExists) { gridDetail.SetGridRowColors(Lskj.Data.Caches.CacheSYSConfig.Instance().GetBaseGridRowColors()); gridDetail.SetGridRightMenus(Lskj.Data.Caches.CacheSYSConfig.Instance().GetBaseGridRightMenus(), this.SysModel, OnGridDetailRightMenuCallback); } else { gridDetail.SetGridRowColors(BaseModuleImpl.GetBaseGridRowColors("SOURCEDETAIL_" + model.FormKey)); gridDetail.SetGridRightMenus(BaseModuleImpl.GetBaseGridRightMenus("BILLSOURCEDT_" + model.FormKey), this.SysModel, OnGridDetailRightMenuCallback); } if (BillModel.IsBillDetailCheck == 0) { gridDetail.GridView.DoubleClick += new EventHandler(OnGridDetailDoubleClick); } gridDetail.Parent = tabDetail; gridDetail.BorderStyle = System.Windows.Forms.BorderStyle.None; if (i == 0) { this.tb_buttom.TabControlObj.TabPages.Insert(0, tabDetail); this.tb_buttom.TabControlObj.SelectedTabPageIndex = 0; if (attachModels.Count > 0) this.tb_buttom.TabControlObj.TabPages[0].Text = model.UserName + "-明细"; } GridDragGrid dragDetailGrid = new GridDragGrid(gridDetail.GridView, this.gcMain.GridView); dragDetailGrid.OnDragComplete += new GridFragGridCompleteEventHandler(OnDragDetailGridCompleted); if (BillModel.IsBillDetailCheck == 1)//加载复选框 { GridDragGrid.GridAddCheckBox(gridDetail.GridView); } #endregion #region 加载来源条件 if (model.SourceType == 1 && (controls == null || controls.Rows.Count == 0)) { // 设置默认下拉列表框 DataTable columnTable = detailTable.Select("sourceId=" + model.Id + " and isnull(isVisible,0)=0").CopyToDataTable(); this.lceCombobox.ValueMember = this.lceCombobox.ValueField = "fieldName"; this.lceCombobox.TextField = "userName"; this.lceCombobox.SetDataSource(columnTable); this.lceCombobox.TextEdit.SelectedIndex = 0; this.pl_treeview_detault_search.Dock = DockStyle.Bottom; this.pl_treeview_detault_search.Visible = true; tabPage.Controls.Add(pl_treeview_detault_search); } else { // 创建自定义条件 string searchSql = model.SourceType == 1 ? Regex.Replace(model.DetailSql, "{speciesno}", "", RegexOptions.IgnoreCase) : model.SourceSql; //searchSql = ReplaceHelper.ReplaceParam(searchSql); PanelControl searchPanel = new PanelControl(); MyControl searchControl = new MyControl(searchSql, gridControl == null ? gridDetail : gridControl, treeView); searchControl.OnSearchBeforeCallBack += new SearchEventHandler(OnSearchBefore); searchControl.OnSearchAfterCallBack += new EventHandler(OnSearchAfterd); if (i == 0) { // 第一个页面要刷新数据,所以绑定事件用于初始化完成后在查询数据 searchControl.OnDataSourceBindCallBack += new EventHandler(OnFirstPageDataSourceBindCallBack); } searchControl.ParentUnionField = model.SourceKeyField; searchPanel.Dock = DockStyle.Bottom; searchPanel.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; searchPanel.BackColor = Color.Transparent; searchPanel.Parent = tabPage; searchPanel.Height = searchControl.InitSearchControl(controls, searchPanel); unionModel.SearchObj = searchControl; } #endregion unionModel.GridControlObj = gridControl; unionModel.GridDetailControlObj = gridDetail; unionModel.ModelObj = model; unionModel.TreeViewObj = treeView; if (i == 0) unionModel.IsChange = true; tabPage.Tag = unionModel; if (model.SourceType == 0) { // 模块要查看具体条数 unionModel.SearchObj.OnDataSourceBindCallBack += new EventHandler(OnPageDataSourceBindCallBack); pageNumKey.Add(unionModel.SearchObj, tabPage); } this.xtc_left_container.TabPages.Add(tabPage); } if (this.cb_input.Properties.Items.Count > 0) { this.pl_input.Visible = true; this.cb_input.SelectedIndex = 0; } } /// /// 说明:验证单据是否修改过 /// 创建人:龚宇超 /// 创建日期: /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void VerfyBillUpdated() { bool isUpdateDetailed = false; DataTable table = this.gcMain.gridControl.DataSource as DataTable; if (table != null && table.Rows.Count > 0) { DataRow updateRow = table.Rows.Cast().FirstOrDefault(x => x.RowState != DataRowState.Unchanged); isUpdateDetailed = updateRow != null; } if (this.BillRowItem != null && (this.ControlObj.VerifyUpdated() || isUpdateDetailed)) { bool isReadOnly2 = !string.IsNullOrEmpty(this.BillModel.ModifyCond) && !ReplaceHelper.ReplaceRowParamCond(this.BillRowItem, this.BillModel.ModifyCond); if (!isReadOnly2) { if (MessageUtil.Show(ResourceKeys.DataChanged, MessageBoxButtons.YesNo) == DialogResult.Yes) { this.BillSave(); } } } } /// /// 说明:初始化单据按钮状态 /// 创建人:龚宇超 /// 创建日期:2017-12-04 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// if set to true [is edit]. private void SetBillStatus(DataRow rowItem) { if (this.BillModel.unableToSave.Contains(SysModel.UserName)) { this.btnBillSave.Hide(); foreach (System.Windows.Forms.Control control in pl_main_bottom.Controls) { if (control.Location.X < btnBillSave.Location.X && control is DevExpress.XtraEditors.SimpleButton && control.Name != "btn_input") { control.Location = new Point(control.Location.X + btnBillSave.Width, control.Location.Y); } } } if (rowItem != null) { // 单据为修改状态,无需设置赋值时不需要计算面板属性 bool isReadOnly = !string.IsNullOrEmpty(this.BillModel.ModifyCond) && !ReplaceHelper.ReplaceRowParamCond(rowItem, this.BillModel.ModifyCond); this.ControlObj.CanExecControl = false; // 单据为修改状态时,无需计算面板属性 this.lbTitle.Text = this.BillModel.TypeName + "(修改)"; this.lblOrderNo.Text = rowItem[this.BillModel.PrimaryKey] + ""; this.rdBlue.Checked = "0".Equals(rowItem[this.BillModel.RtagidKey] + ""); this.rdRed.Checked = "1".Equals(rowItem[this.BillModel.RtagidKey] + ""); this.BillModel.SaveState = true; this.rdBlue.Enabled = this.rdRed.Enabled = false; this._itemImport.Enabled = this._itemImportUpdate.Enabled = !isReadOnly; this.ControlObj.SetReadOnlyAllControl(isReadOnly); this.ControlObj.SetAllControlValue(rowItem); this.btnFP.Enabled = this.btnDelete.Enabled = this.btnBillSave.Enabled = this.btnBillApply.Enabled = !isReadOnly; this.ControlObj.CanExecControl = true; this.cb_input.Enabled = this.btn_input.Enabled = this.txt_input.Enabled = !isReadOnly; this.BillRowItem = rowItem; // 设置Brp模版 if (this.IsBrpTemplete) { this.SetTempleteSelectedValue(rowItem["brpId"] + ""); this.cb_templete.Enabled = !isReadOnly; } this.BillModel.PopupUnionCode = rdBlue.Checked ? rdBlueUnionCode : rdRedUnionCode; this.btnFP.Visible = !string.IsNullOrWhiteSpace(this.BillModel.PopupUnionCode); this.labelControl1.ForeColor = this.lblOrderNo.ForeColor = this.lbTitle.ForeColor = rdBlue.Checked ? Color.Blue : Color.Red; this.gcMain.GridView.OptionsBehavior.Editable = !isReadOnly; this.gcMain.GridControl.DataSource = BillImpl.GetDataTableResult(ReplaceHelper.ReplaceRowParam(rowItem, this.BillModel.DetailSql)); RefreshPrindMenu(); BaseUserControl userControl = this.ControlObj.FindControl(this.BillModel.RtagidKey); if (userControl != null) { userControl.EditText = this.rdRed.Checked ? "1" : "0"; } } else { // 单据为新增状态 this.btnFP.Enabled = this.btnDelete.Enabled = this.btnBillSave.Enabled = this.btnBillApply.Enabled = true; this.lbTitle.Text = this.BillModel.TypeName + "(新增)"; this.lblOrderNo.Text = BillImpl.GetBillNo(this.BillModel.BillSeq); this._itemImport.Enabled = this._itemImportUpdate.Enabled = true; this.cb_input.Enabled = this.btn_input.Enabled = this.txt_input.Enabled = true; this.cb_templete.Enabled = true; this.BillModel.SaveState = false; this.ControlObj.SetReadOnlyAllControl(false); this.rdBlue.Enabled = this.rdRed.Enabled = true; // 通过右键菜单打开单据,假如明细有数据则在初始化时使用传入数据. this.gcMain.GridView.OptionsBehavior.Editable = true; this.gcMain.GridControl.DataSource = BillImpl.GetDataTableResult(this.BillModel.DetailSql); BaseUserControl userControl = this.ControlObj.FindControl(this.BillModel.RtagidKey); if (userControl != null) { userControl.EditText = this.rdRed.Checked ? "1" : "0"; } } this._waterMark = new WaterMark(this.BillModel.MasterPreFix, rowItem); this.lbTitle.Invalidate(); } #endregion #region 切换红、蓝字单据 /// /// 说明:点击蓝字单据 /// 创建人:龚宇超 /// 创建日期:2017-11-23 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void OnBlueStateClick(object sender, EventArgs e) { this.rdRed.Checked = false; this.labelControl1.ForeColor = this.lblOrderNo.ForeColor = this.lbTitle.ForeColor = Color.Blue; this.btnFP.Visible = !string.IsNullOrWhiteSpace(rdBlueUnionCode); this.BillModel.PopupUnionCode = rdBlueUnionCode; BaseUserControl userControl = this.ControlObj.FindControl(this.BillModel.RtagidKey); if (userControl != null) { userControl.EditText = "0"; } } /// /// 说明:点击红字单据 /// 创建人:龚宇超 /// 创建日期:2017-11-23 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void OnRedStateClick(object sender, EventArgs e) { this.rdBlue.Checked = false; this.labelControl1.ForeColor = this.lblOrderNo.ForeColor = this.lbTitle.ForeColor = Color.Red; this.btnFP.Visible = !string.IsNullOrWhiteSpace(rdRedUnionCode); this.BillModel.PopupUnionCode = rdRedUnionCode; BaseUserControl userControl = this.ControlObj.FindControl(this.BillModel.RtagidKey); if (userControl != null) { userControl.EditText = "1"; } } #endregion #region 复制单据 /// /// 说明:复制表头数据 /// 创建人:龚宇超 /// 创建日期:2017-11-27 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. protected void OnCopyMasterItemClick(object sender, ItemClickEventArgs e) { this.btnFP.Enabled = this.btnDelete.Enabled = this.btnBillSave.Enabled = this.btnBillApply.Enabled = true; this.lbTitle.Text = this.BillModel.TypeName + "(新增)"; this.lbTitle.Invalidate(); this.lblOrderNo.Text = BillImpl.GetBillNo(this.BillModel.BillSeq); this.BillModel.SaveState = false; this.rdBlue.Enabled = this.rdRed.Enabled = true; this.cb_input.Enabled = this.btn_input.Enabled = this.txt_input.Enabled = true; this._itemImport.Enabled = this._itemImportUpdate.Enabled = true; this.cb_templete.Enabled = true; this.ControlObj.CopyControlValue(); this.ControlObj.SetReadOnlyAllControl(false); this.gcMain.GridControl.DataSourceTable().Clear(); this.gcMain.GridView.OptionsBehavior.Editable = true; this._waterMark = new WaterMark(this.BillModel.MasterPreFix, null); } /// /// 说明:复制整单 /// 创建人:龚宇超 /// 创建日期:2017-11-27 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. protected void OnCopyAllItemClick(object sender, ItemClickEventArgs e) { DataTable gridTable = (this.gcMain.GridControl.DataSource as DataTable).TrimDeleteRows(); this.btnFP.Enabled = this.btnDelete.Enabled = this.btnBillSave.Enabled = this.btnBillApply.Enabled = true; this.lbTitle.Text = this.BillModel.TypeName + "(新增)"; this.lbTitle.Invalidate(); this.lblOrderNo.Text = BillImpl.GetBillNo(this.BillModel.BillSeq); this.rdBlue.Enabled = this.rdRed.Enabled = true; this.cb_input.Enabled = this.btn_input.Enabled = this.txt_input.Enabled = true; this._itemImport.Enabled = this._itemImportUpdate.Enabled = true; this.cb_templete.Enabled = true; this.ControlObj.CopyControlValue(); this.ControlObj.SetReadOnlyAllControl(false); this._waterMark = new WaterMark(this.BillModel.MasterPreFix, null); if (!gridTable.Columns.Contains(ERPInfo.Instance.isAddRows)) { gridTable.Columns.Add(ERPInfo.Instance.isAddRows, typeof(String)); } // 处理单据明细 DataTable detailTable = this.gcMain.GridControl.DataSourceTable(); bool canCopy = false; string defaultValue = string.Empty; if (detailTable.Columns.Contains(this.BillModel.PrimaryDetailKey)) { foreach (DataRow item in detailTable.Rows) { //根据后台列配置可否复制 if (_detailColumns.Columns.Contains("canCopy")) { int index = detailTable.Rows.IndexOf(item); foreach (DataRow dr in _detailColumns.Rows) { canCopy = !string.IsNullOrEmpty(dr["canCopy"] + "") ? "1".Equals(dr["canCopy"] + "") : false; if (!canCopy) { GridColumn column = this.gcMain.GridView.Columns.ColumnByFieldName(dr["fieldName"] + ""); defaultValue = this.ControlObj.ReplaceParentControlValue(dr["defaultdate"] + ""); defaultValue = BaseImpl.GetDefaultValue(defaultValue); if (!string.IsNullOrEmpty(defaultValue)) { this.gcMain.GridView.SetRowCellValue(index, column, defaultValue); } else { this.gcMain.GridView.SetRowCellValue(index, column, DBNull.Value); } } } } item[this.BillModel.PrimaryDetailKey] = this.lblOrderNo.Text; } } this.gcMain.GridView.OptionsBehavior.Editable = true; this.BillModel.SaveState = false; } #endregion #region Excel操作 /// /// 说明:导出Excel /// 创建人:龚宇超 /// 创建日期:2017-11-27 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. protected void OnExportItemClick(object sender, ItemClickEventArgs e) { this.gcMain.GridControl.ToExcel(this.SysModel.FormText); } /// /// 说明:从Excel导入 /// 创建人:龚宇超 /// 创建日期:2017-11-27 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. protected void OnImportItemClick(object sender, ItemClickEventArgs e) { OpenFileDialog dialog = new OpenFileDialog(); dialog.Title = "选择导入文件"; dialog.Filter = "Excel文件(*.xls)|*.xls"; DialogResult result = dialog.ShowDialog(); if (result == DialogResult.OK) { string fileName = dialog.FileName; string colFields = this.gcMain.GridView.Columns.ToString(','); DataTable DataImportTable = this.gcMain.GridView.ToExcelDataTable(fileName, colFields, true, true); DataTable NewTable = this.gcMain.GridControl.DataSourceTable(); GridColumnCollection gridColumns = this.gcMain.GridView.Columns; foreach (DataRow rowItem in DataImportTable.Rows) { DataRow newRow = NewTable.NewRow(); foreach (GridColumn col in gridColumns) { if ("id".Equals(col.FieldName) || col.FieldName.Equals(this.BillModel.PrimaryKey)) continue; if (rowItem.Table.Columns.Contains(col.FieldName)) { // 列中是否包含对应字段,包含则使用值 newRow[col.FieldName] = rowItem[col.FieldName]; } else { // 未包含字段,则使用控件默认值. GridColumnModel model = col.Tag as GridColumnModel; string fieldValue = BaseImpl.GetDefaultValue(model.DefaultValue); if (model.DefaultValue.Contains("{#")) { fieldValue = this.ControlObj.ReplaceParentControlValue(model.DefaultValue); } if (!string.IsNullOrEmpty(fieldValue)) { newRow[col.FieldName] = fieldValue; } } } NewTable.Rows.Add(newRow); } this.gcMain.GridControl.DataSource = NewTable; } } /// /// 说明:导入Excel文件(更新) /// 创建人:龚宇超 /// 创建日期:2017-11-27 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. protected void OnImportUpdateItemClick(object sender, ItemClickEventArgs e) { } #endregion #region 常用工具 /// /// 说明:验证可操作条件 /// 创建人:龚宇超 /// 创建日期:2018-03-07 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. protected void OnToolsClick(object sender, EventArgs e) { foreach (BarItemLink itemLink in pMenu.ItemLinks) { DataRow rowItem = itemLink.Item.Tag as DataRow; if (rowItem != null) { string menuCond = rowItem["MenuCond"] + ""; string menuCaption = itemLink.Caption; if (!string.IsNullOrEmpty(menuCond)) { try { bool result = true; menuCond = ReplaceHelper.ReplaceParamToValue(menuCond, "{" + this.BillModel.PrimaryKey + "}", this.lblOrderNo.Text.Trim()); if (menuCond.StartsWith("@") || menuCond.StartsWith("!")) { result = "1".Equals(BaseImpl.GetDefaultValue(menuCond)); } else { menuCond = this.ControlObj.ReplaceControlValue(menuCond); if (this.BillRowItem != null) menuCond = ReplaceHelper.ReplaceRowParam(this.BillRowItem, menuCond); menuCond = ReplaceHelper.ReplaceParamToValue(menuCond, "0"); // 未替换的参数所有替换为0 result = ReplaceHelper.EvalCond(menuCond); } itemLink.Item.Enabled = result; } catch (Exception ex) { MessageUtil.Show("[" + menuCaption + "] " + ResourceKeys.SetRightMenuCondFault); LogHelper.Instance.WriteError(ex); } } } } } /// /// 说明:常用工具点击 /// 创建人:龚宇超 /// 创建日期:2017-11-27 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. protected void OnCommonItemClick(object sender, ItemClickEventArgs e) { DataRow rowItem = e.Item.Tag as DataRow; CommonMenu menu = new CommonMenu(this.SysModel, this.ControlObj); menu.ApplyBefore += new CommonToolApplyEventHandler(OnMenuApplyBefore); menu.Apply(rowItem); } /// /// 说明:执行前单独替换BilldocumentId /// 创建人:龚宇超 /// 创建日期:2018-03-07 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The e. protected void OnMenuApplyBefore(ApplyArgs e) { string[] paramList = new string[e.MemuModel.ParamList.Count]; for (int i = 0; i < e.MemuModel.ParamList.Count; i++) { string item = e.MemuModel.ParamList[i]; List condition = ReplaceHelper.GetParamFields(item); foreach (string cond in condition) { string value = this.BillModel.PrimaryKey.Equals(cond.Replace("{", "").Replace("}", "").ToLower(), StringComparison.OrdinalIgnoreCase) ? this.lblOrderNo.Text.Trim() : cond; item = item.Replace(cond, value); ; } paramList[i] = item; } e.MemuModel.ParamList = paramList.ToList(); } #endregion #region 打印模版 /// /// 说明:打印完成需要参数 /// 创建人:龚宇超 /// 创建日期:2018-07-09 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// protected void GetPrintOtherParam() { //取得打印完成后的参数 if (!string.IsNullOrEmpty(this.BillModel.PrintSql) && this.BillModel.PrintSql.Contains("<<")) { string[] strs = this.BillModel.PrintSql.Split(new[] { ">>" }, 2, StringSplitOptions.None); _mainPrintSql = strs[1]; _printModeCond = strs[0].Replace("<<", ""); } if (!string.IsNullOrEmpty(_printModeCond) && _printModeCond.IndexOf(';') > 0) { string[] str = _printModeCond.Split(';'); DataRow item = AttachImpl.GetSystemModule(str[0]); string tableName = item["TableName"] + ""; string modetype = item["modType"] + ""; string comprefix = BaseImpl.GetColumnPrefix(tableName); string primaryKey = modetype == "1" ? BaseImpl.GetBasePrimaryKey(str[0]) : comprefix + "billdocument_id"; //表名,列前缀,主键字段,主键值,模块编号,主打印Sql _printSaveParams = new List() { tableName, comprefix, primaryKey, str[1], str[0], _mainPrintSql }; //判断是否直接打印 modetype 区别单据和基础档案模块 switch (modetype) { case "1": ModuleModel mode = new ModuleModel(MainImpl.GetSystemdllTab(str[0])); if (mode != null) _isExcPrint = mode.PrintType == 3; break; case "2": BaseAccraditationModel model = new BaseAccraditationModel(BillAuditImpl.GetPubAuditProperty(str[0])); if (model != null) _isExcPrint = model.BillPrintType == 3; break; } } } /// /// 说明:打印模版 /// 创建人:龚宇超 /// 创建日期:2017-11-27 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. protected void OnPrintItemClick(object sender, ItemClickEventArgs e) { string printFile = e.Item.Tag + ""; string printPath = PubUtil.PrintFileAbsolutelyPath; if (!File.Exists(printPath)) { MessageUtil.Show(ResourceKeys.NotFoundPrintFile); return; } bool isPrint = this.BillModel.SaveState; if (!isPrint) { if (MessageUtil.Show(ResourceKeys.BillNotSavedAndNotPrint, MessageBoxButtons.YesNo) == DialogResult.Yes) isPrint = this.BillSave(); } if (isPrint) { try { // 判断是否满足打印条件 //DataRow masterRow = BillImpl.GetDataRowResult(this.BillModel.MasterSql.Replace("{" + this.BillModel.PrimaryKey + "}", this.lblOrderNo.Text)); DataRow masterRow = BillImpl.GetDataRowResult(string.Format("select * from {0} where {1}='{2}'", BillModel.MasterTable, BillModel.PrimaryKey, this.lblOrderNo.Text)); if (masterRow == null) { MessageUtil.Show(ResourceKeys.DataNotFount); return; } if (!ReplaceHelper.ReplaceRowParamCond(masterRow, this.BillModel.PrintCond)) { MessageUtil.Show(ResourceKeys.DisSatisfyPrintCond); return; } string tmpSql = ReplaceHelper.ReplaceRowParam(masterRow, this.BillModel.PrintSql); string tmpSql1 = ReplaceHelper.ReplaceRowParam(masterRow, this.BillModel.PrintSql1); string tmpSql2 = ReplaceHelper.ReplaceRowParam(masterRow, this.BillModel.PrintSql2); if (printFile.Contains(PrintUtil.TemplateFlag)) { //主Sql string mainSql = string.Empty; List tmpSqls = new List(); if (_printSaveParams != null && _printSaveParams.Count > 0) { _printSaveParams[5] = mainSql = ReplaceHelper.ReplaceRowParam(masterRow, _mainPrintSql); _printSaveParams[3] = masterRow.Table.Columns.Contains(_printSaveParams[2] + "") ? masterRow[_printSaveParams[2]] + "" : masterRow[BillModel.PrimaryKey] + ""; tmpSqls.Add(mainSql); tmpSqls.Add(tmpSql1); tmpSqls.AddRange(tmpSql2.Split(';').ToList()); } PrintUtil.OnAfterPrint -= new EventHandler(OnReportPrintAfter); PrintUtil.OnAfterPrint += new EventHandler(OnReportPrintAfter); PrintUtil.FastReportPrint(tmpSqls, printFile, _isExcPrint); } else { DelphiHelper.LoadDelphiDll(printPath, printPath, printFile, tmpSql, tmpSql1, this.BillModel.PrintFileType, tmpSql2); } } catch (Exception ex) { MessageUtil.Show(ex.Message + "\r\n" + ex.StackTrace); LogUtil.WriteError(ResourceKeys.BillModule + "打印模板错误", ex); LogHelper.Instance.WriteError(ex); } } } #endregion #region 单据来源相关 /// /// 说明:刷新当前选中的TabPage /// 创建人:龚宇超 /// 创建日期:2018-06-29 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// private void RefreshSelectedSource() { XtraTabPage tabPage = this.xtc_left_container.SelectedTabPage; BillSourceUnionModel model = tabPage.Tag as BillSourceUnionModel; if (model.GridControlObj != null) this.RefreshSource(model); if (BillModel.drgFinishHide == "1") { RemoveRowitem.Clear(); if (model.ModelObj.SourceType == 1) { string sqlValue = ReplaceHelper.ReplaceUserInfo(ReplaceHelper.ReplaceWhereCond(model.ModelObj.DetailSql)); sqlValue = sqlValue.Replace("#", ""); sqlValue = this.ControlObj.ReplaceControlValue(sqlValue); sqlValue = ReplaceHelper.ReplaceParamToValue(sqlValue, model.TreeViewObj.GetSelectValue()); model.GridDetailControlObj.GridControl.DataSource = BillImpl.GetDataTableResult(sqlValue); } this.RefreshSourceDetail(model); } if (model.ModelObj.SourceType == 0 && model.SearchObj.GridRowCount > 0) tabPage.Text = model.ModelObj.UserName + "(" + model.SearchObj.GridRowCount + "条)"; // 假如只有单据来源主表没有记录,则手动调用刷新明细.否则会通过选中行自动刷新明细 //if (model.GridControlObj != null && model.GridControlObj.DataRowCount() == 0) //{ // this.RefreshSourceDetail(model); //} } /// /// 说明:刷新单据来源主表,未传递时,默认刷新 /// 创建人:龚宇超 /// 创建日期:2017-12-13 /// 修改人: /// 修改日期: /// 修改备注:gcMain /// 版本:1.0 /// /// The union model. /// XtraTabPage. private void RefreshSource(BillSourceUnionModel unionModel = null) { if (unionModel == null || unionModel.SearchObj == null) return; unionModel.SearchObj.SearchLastGrid(); } /// /// 说明:右边选择下拉框刷新左边来源 /// 创建人:龚宇超 /// 创建日期:2018-08-16 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// /// The sender. /// The instance containing the event data. private void OnRefreshBillSource(object sender, EventArgs e) { XtraTabPage tabPage = this.xtc_left_container.SelectedTabPage; BillSourceUnionModel unionModel = tabPage.Tag as BillSourceUnionModel; if (unionModel.ModelObj.SourceType != 2) { IsBillMaster = false; int Handle = 0; string sql = ReplaceHelper.ReplaceUserInfo(unionModel.ModelObj.SourceSql); if (unionModel.GridControlObj != null) Handle = unionModel.GridControlObj.GridView.FocusedRowHandle; sql = sql.Replace("#", ""); List paramList = ReplaceHelper.GetParamFields(sql); if (unionModel.SearchObj != null) { sql = this.ControlObj.ReplaceControlValue(unionModel.SearchObj.SetSearchSqlValue(sql, true)); } if (unionModel.GridControlObj != null) { unionModel.GridControlObj.gridControl.DataSource = BaseImpl.GetDataTableResult(sql); RefreshSourceDetail(unionModel); if (unionModel.GridControlObj != null) { unionModel.GridControlObj.GridView.SelectRowHandler(Handle); this.RefreshSourceDetail(tabPage.Tag as BillSourceUnionModel); } } if (unionModel.TreeViewObj != null) { if (unionModel.TreeViewObj.TreeView.SelectedNode == null) unionModel.TreeViewObj.TreeView.SelectedNode = unionModel.TreeViewObj.TreeView.Nodes[0];//选中 sql = ReplaceHelper.ReplaceUserInfo(ReplaceHelper.ReplaceWhereCond(unionModel.ModelObj.DetailSql)); sql = sql.Replace("#", ""); sql = this.ControlObj.ReplaceControlValue(sql); sql = ReplaceHelper.ReplaceParamToValue(sql, unionModel.TreeViewObj.TreeView.SelectedNode.Name); unionModel.GridDetailControlObj.GridControl.DataSource = BillImpl.GetDataTableResult(sql); } } } /// /// 说明:刷新单据来源明细 /// 创建人:龚宇超 /// 创建日期:2017-11-30 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The union model. private void RefreshSourceDetail(BillSourceUnionModel unionModel) { if (unionModel == null) return; XtraTabPage tabPage = this.xtc_left_container.SelectedTabPage; if (unionModel.ModelObj.SourceType == 1) { // 树加载明细 string fieldName = this.lceCombobox.EditValue; string fieldValue = this.textEdit1.Text.Trim(); string checkStrs = unionModel.TreeViewObj.GetCheckValues(); string sqlValue = ReplaceHelper.ReplaceParamToValue(ReplaceHelper.ReplaceUserInfo(unionModel.ModelObj.DetailSql), unionModel.TreeViewObj.GetSelectNodeValue()); if (!string.IsNullOrEmpty(checkStrs)) checkStrs = " and SpeciesNo in (" + checkStrs.TrimEnd(',') + ")"; sqlValue = string.Format("select * from ({0}) temp where 1=1 ", ReplaceHelper.ReplaceWhereCond(sqlValue) + checkStrs) + string.Format(" and ({0} like '%{1}%' or dbo.P_getpy({0}) like '%{1}%')", fieldName, fieldValue); try { WaitForm.ShowForm(); unionModel.GridDetailControlObj.GridControl.DataSource = BillImpl.GetDataTableResult(sqlValue); if (BillModel.drgFinishHide == "1") { DataTable finishHideTb = unionModel.GridDetailControlObj.GridControl.DataSourceTable(); foreach (DataRow drItem in RemoveRowitem) { if (finishHideTb.Select().Contains(drItem)) finishHideTb.Rows.Remove(drItem); } } } catch (Exception ex) { MessageUtil.Show(ex); LogHelper.Instance.WriteError(ex); LogUtil.WriteError(BillModel.TypeName + "模块刷新树加载明细出错!", ex); } finally { WaitForm.HideForm(); } } else { // 加载明细 try { WaitForm.ShowForm(); if (unionModel.ModelObj.SourceType == 3) { TreeListNode focusedNode = unionModel.TreeGridControlObj.TreeListObj.FocusedNode; unionModel.GridDetailControlObj.GridControl.DataSource = focusedNode == null ? new DataTable() : BillImpl.GetDataTableResult(ReplaceHelper.ReplaceNodeParam(focusedNode, unionModel.ModelObj.DetailSql)); if (this._isLoadRightControlValue) { string masterSql = focusedNode == null ? BillModel.MasterSql.Replace("{" + BillModel.PrimaryKey + "}", this.lblOrderNo.Text) : ReplaceHelper.ReplaceNodeParam(focusedNode, BillModel.MasterSql); // 加载单据信息 this.SetBillStatus(BillImpl.GetDataRowResult(masterSql)); } } else { DataRow rowItem = unionModel.GridControlObj.GridView.GetFocusedDataRow(); unionModel.GridDetailControlObj.GridControl.DataSource = rowItem == null ? new DataTable() : BillImpl.GetDataTableResult(ReplaceHelper.ReplaceRowParam(rowItem, unionModel.ModelObj.DetailSql)); DataTable table = unionModel.GridDetailControlObj.GridControl.DataSource as DataTable; if (table != null && !table.Columns.Contains("_check")) { table.Columns.Add("_check", typeof(bool)); foreach (DataRow row in table.Rows) { row["_check"] = 0; } } if (unionModel.ModelObj.SourceType == 2 && this._isLoadRightControlValue) { string masterSql = rowItem == null ? BillModel.MasterSql.Replace("{" + BillModel.PrimaryKey + "}", this.lblOrderNo.Text) : ReplaceHelper.ReplaceRowParam(rowItem, BillModel.MasterSql); // 加载单据信息 this.SetBillStatus(BillImpl.GetDataRowResult(masterSql)); } } if (BillModel.drgFinishHide=="1") { DataTable finishHideTb = unionModel.GridDetailControlObj.GridControl.DataSourceTable(); //foreach (DataRow drItem in RemoveRowitem) //{ // if (finishHideTb.Select().Contains(drItem)) finishHideTb.Rows.Remove(drItem); //} } if (tb_buttom.TabControlObj.TabPages.Count > 0) { DataRow rowItem = unionModel.GridControlObj.GridView.GetFocusedDataRow(); if (unionModel.ModelObj.SourceType == 3 || unionModel.ModelObj.SourceType == 4) { rowItem = unionModel.TreeGridControlObj.GetViewFocusedDataRow(); } for (int i = 0; i < this.tb_buttom.TabControlObj.TabPages.Count; i++) { XtraTabPage page = this.tb_buttom.TabControlObj.TabPages[i]; if (i == 0) continue; if (rowItem != null && page != null) { this.SetTabPageDataSource(page, rowItem); } } } } catch (Exception ex) { MessageUtil.Show(ex); LogHelper.Instance.WriteError(ex); LogUtil.WriteError(BillModel.TypeName + "模块加载明细出错!", ex); } finally { WaitForm.HideForm(); } } } /// /// 说明:刷新单据来源 /// 创建人:龚宇超 /// 创建日期:2019-12-16 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void SaveRefreshSource() { foreach (XtraTabPage tabPage in this.xtc_left_container.TabPages) { BillSourceUnionModel model = tabPage.Tag as BillSourceUnionModel; if (model != null && model.GridControlObj != null && model.ModelObj.SaveRefreshFlag) { this.RefreshSource(model); this.RefreshSourceDetail(model); } } } /// /// 说明:计算列关联字段 /// 创建人:龚宇超 /// 创建日期:2017-12-18 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The model. /// The field value. protected virtual void SetUnionValue(GridColumnModel model, string fieldValue, DataRow rowItem) { DataTable table = this.gcMain.gridControl.DataSourceTable(); //DataRow rowItem = this.gridView.GetFocusedDataRow(); string unionValues = model.UnionValues; if (rowItem != null && model != null) { if (this.ControlObj != null) unionValues = this.ControlObj.ReplaceParentControlValue(unionValues); unionValues = ReplaceHelper.ReplaceRowParam(rowItem, unionValues.Replace("{" + model.FieldName + "}", fieldValue)); try { string[] fields = model.UnionFields.Trim(',').Split(','); DataRow rowResult = BaseImpl.GetDataRowResult(unionValues); if (rowResult != null) { for (int i = 0; i < fields.Length; i++) { string field = fields[i]; string value = rowResult.Table.Columns.Contains(field) ? rowResult[field] + "" : null; rowItem[field] = value; } } else { // 设置为空 for (int i = 0; i < fields.Length; i++) { string field = fields[i]; rowItem[field] = DBNull.Value; } } } catch (Exception ex) { LogHelper.Instance.WriteError(ex); LogUtil.WriteError("计算列关联字段--错误-->" + unionValues, ex); } } } /// /// 说明:禁用控件条件 /// 创建人:龚宇超 /// 创建日期:2019-01-22 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The model. /// The field value. protected virtual void SetDisableColumn(GridColumnModel model, string fieldValue, DataRow rowItem) { if (model.EnableCond != string.Empty) { List columns = this.gcMain.ObjmControlList.FindAll(x => x.EnableCond.Contains("{" + model.FieldName + "}")).ToList(); foreach (GridColumnModel item in columns) { try { string disableCond = ReplaceHelper.ReplaceRowParam(rowItem, item.EnableCond.Replace("{" + model.FieldName + "}", fieldValue)); string diaableType = item.DisableType; this.gcMain.GridView.Columns.ColumnByFieldName(model.FieldName).Visible = ("true".Equals(EvalHelper.Eval(ReplaceHelper.ReplaceEvalCond(disableCond)) + "", StringComparison.OrdinalIgnoreCase)); } catch (Exception) { } } } } /// /// 说明:计算列计算公式 /// 创建人:龚宇超 /// 创建日期:2017-12-18 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The model. /// The field value. protected virtual void SetCalcValue(GridColumnModel model, string fieldValue, DataRow rowItem) { try { DataTable table = this.gcMain.gridControl.DataSourceTable(); if (rowItem != null && model != null) { List calcModels = this.gcMain.ObjmControlList.FindAll(x => !string.IsNullOrEmpty(x.CalcExpr)).OrderBy(y => y.CalcOrder).ToList(); foreach (GridColumnModel gridModel in calcModels) { // 计算顺序小于当前控件则不计算 if (gridModel.CalcOrder < model.CalcOrder) continue; if (!gridModel.FieldName.Equals(model.FieldName, StringComparison.OrdinalIgnoreCase)) { bool isTruncate = false; string calcExpr = gridModel.CalcExpr; if (calcExpr.StartsWith("@truncate:")) { calcExpr = calcExpr.Substring(10); isTruncate = true; } try { if (this.ControlObj != null) calcExpr = ControlObj.ReplaceParentControlValue(calcExpr); calcExpr = ReplaceHelper.ReplaceRowParam(rowItem, calcExpr); //EvalHelper.Eval2(ReplaceHelper.ReplaceEvalCond(calcExpr)) + "" string result = EvalHelper.Eval2(ReplaceHelper.ReplaceEvalCond(calcExpr)) + ""; if (isTruncate) { result += result.Contains(".") ? "0000000000" : ".0000000000"; rowItem[gridModel.FieldName] = result.Substring(0, result.IndexOf(".")) + result.Substring(result.IndexOf("."), model.Decimals + 1); //this.gridView.SetRowCellValue(this.gridView.FocusedRowHandle, this.gridView.Columns[gridModel.FieldName], result.Substring(0, result.IndexOf(".")) + result.Substring(result.IndexOf("."), model.Decimals + 1)); } else { try { double d = 0; if (!string.IsNullOrEmpty(result) && !"NaN".Equals(result, StringComparison.OrdinalIgnoreCase) && !"非数字".Equals(result, StringComparison.OrdinalIgnoreCase) && !"undefined".Equals(result, StringComparison.OrdinalIgnoreCase) && result != "∞" && result != "-∞" && !"正无穷大".Equals(result, StringComparison.OrdinalIgnoreCase) && !"负无穷大".Equals(result, StringComparison.OrdinalIgnoreCase) && double.TryParse(result, out d)) { if (string.IsNullOrEmpty(gridModel.DataFormat)) { result = Math.Round(Convert.ToDouble(d), model.Decimals, MidpointRounding.AwayFromZero) + ""; } else { //计算后先执行保存小数位数 result = string.Format("{0:" + gridModel.DataFormat + "}", Convert.ToDecimal(result)); } if (model.FieldType == 7 && result.Contains('%')) { result = (double.Parse(result.Replace("%", "")) * 0.01).ToString(); } rowItem[gridModel.FieldName] = result; // 判断计算列有无关联值 GridColumnModel UnionModel = calcModels.FirstOrDefault(x => x.FieldName == gridModel.FieldName); if (!string.IsNullOrEmpty(UnionModel.UnionFields)) { this.SetUnionValue(UnionModel, rowItem[gridModel.FieldName] + "", rowItem); } //this.gridView.SetRowCellValue(this.gridView.FocusedRowHandle, this.gridView.Columns[gridModel.FieldName], result); } } catch (Exception) { } } } catch (Exception ex) { LogHelper.Instance.WriteError(ex); LogUtil.WriteError("计算列计算公式--错误-->" + rowItem[gridModel.FieldName], ex); } } } } } catch (Exception ex) { LogHelper.Instance.WriteError(ex); string Message = ErrorMessage.PromptErrorMessage(ex); // MessageUtil.Show(Message,ex.Message); } } /// /// 说明:添加行到单据明细中 /// 创建人:龚宇超 /// 创建日期:2017-11-30 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The row item. /// The union model. private void AddRowToGridView(DataRow rowItem) { GridColumnCollection gridColumns = this.gcMain.GridView.Columns; DataTable gridTable = (this.gcMain.GridControl.DataSource as DataTable).TrimDeleteRows(); if (!gridTable.Columns.Contains(ERPInfo.Instance.isAddRows)) { gridTable.Columns.Add(ERPInfo.Instance.isAddRows, typeof(String)); } string repeatProduct = this.gcMain.GridView.Columns["ProductId"] != null && rowItem.Table.Columns.Contains("ProductId") ? "ProductId" : this.BillModel.DetailPreFix + "ProductId"; AssociatedField = repeatProduct; if ("1".Equals(this.BillModel.DetailDoubleClickTip) && this.gcMain.GridView.Columns[repeatProduct] != null && rowItem.Table.Columns.Contains(repeatProduct)) { // 需要提示编码重复 GridView view = this.gcMain.GridView; bool result = (view.LocateByValue(repeatProduct, rowItem[repeatProduct], null) >= 0) | (view.LocateByValue(repeatProduct, rowItem[repeatProduct], null) >= 0) | (view.LocateByValue(repeatProduct, rowItem[repeatProduct], null) >= 0) | (view.LocateByValue(repeatProduct, rowItem[repeatProduct], null) >= 0); if (result) { DialogResult dialog = MessageUtil.Show(ResourceKeys.ProductIsRepet, MessageBoxButtons.YesNo); if (dialog != DialogResult.Yes) return; } } DataRow newRow = gridTable.NewRow(); //if (gridTable.Columns.Contains(guidField)) //{ // newRow[guidField] = Guid.NewGuid().ToString(); //} int position = this.gcMain.GridView.FocusedRowHandle; bool isLastRow = this.gcMain.GridView.IsLastVisibleRow; this.gcMain.GridView.BeginDataUpdate(); GridView gridView = this.gcMain.GridView; // 赋值明细字段 foreach (GridColumn col in gridColumns) { try { // 未包含字段,则使用控件默认值. GridColumnModel model = col.Tag as GridColumnModel; if (rowItem.Table.Columns.Contains(col.FieldName)) { // 来源列中是否包含对应字段,包含则使用值 newRow[col.FieldName] = rowItem[col.FieldName]; if (!string.IsNullOrEmpty(model.UnionFields)) { this.SetUnionValue(model, rowItem[col.FieldName] + "", newRow); } SetCalcValue(model, rowItem[col.FieldName] + "", newRow); } else { if (col.FieldName.Contains("_Ls")) { string[] unioFielName = col.FieldName.Split('_'); string UnioValue = unioFielName[unioFielName.Length - 1]; DataColumn grid = rowItem.Table.Columns.Cast().FirstOrDefault(x => x.ColumnName.Split('_')[x.ColumnName.Split('_').Length - 1].Equals(UnioValue)); if (grid != null && !string.IsNullOrEmpty(model.UnionFields)) { this.SetUnionValue(model, rowItem[col.FieldName] + "", newRow); } SetCalcValue(model, rowItem[col.FieldName] + "", newRow); } else { string fieldValue = BaseImpl.GetDefaultValue(model.DefaultValue); //int nowPositon = !isLastRow ? position : gridTable.Rows.Count - 1; if (model.DefaultValue.Contains("{#")) { fieldValue = this.ControlObj.ReplaceParentControlValue(model.DefaultValue); if (!string.IsNullOrEmpty(fieldValue)) { newRow[col.FieldName] = fieldValue; if (!string.IsNullOrEmpty(model.UnionFields)) { this.SetUnionValue(model, fieldValue + "", newRow); } SetCalcValue(model, fieldValue + "", newRow); //计算规则配置在结果字段上,所以无需验证当前操作控件 //this.gcMain.GridView.SetFocusedRowCellValue(col, fieldValue); } } else if (!string.IsNullOrEmpty(model.DefaultValue)) { newRow[col.FieldName] = fieldValue; if (!string.IsNullOrEmpty(model.UnionFields)) { this.SetUnionValue(model, fieldValue + "", newRow); } SetCalcValue(model, fieldValue + "", newRow); //this.gcMain.GridView.SetFocusedRowCellValue(col, fieldValue); } } } SetDisableColumn(model, newRow[col.FieldName] + "", newRow); //GridColumnModel model = col.Tag as GridColumnModel; if (model.LimitLength > 0) { DataRow HandleRow = newRow; int MaxInputLength = System.Text.Encoding.Default.GetBytes(newRow[col.FieldName] + "").Length; if (model.LimitLength < MaxInputLength) HandleRow.SetColumnError(HandleRow.Table.Columns[col.ColumnHandle], "当前输入文本超过设定长度!");//满足条件设置错误信息 } } catch (Exception ex) { LogHelper.Instance.WriteError(ex); LogUtil.WriteError(col.FieldName + "添加出错!", ex); } } this.gcMain.GridView.EndDataUpdate(); if (!isLastRow) { // 插入数据行 gridTable.Rows.InsertAt(newRow, position); this.gcMain.GridView.ClearSelection(); this.gcMain.GridView.SelectRowHandler(position); } else { // 添加数据行 gridTable.Rows.Add(newRow); this.gcMain.GridView.ClearSelection(); this.gcMain.GridView.SelectRowHandler(gridTable.Rows.Count - 1); } // 插入数据后 if (isLastRow) { this.gcMain.GridView.ClearSelection(); this.gcMain.GridView.SelectRowHandler(position + 1); } if (!string.IsNullOrEmpty(NumberMc) && gridTable.Columns.Contains(mRecordPrimaryField)) { DataRow[] rt = gridTable.Rows.Cast().Where(x => (newRow[BillModel.DetailPreFix + "ProductId"] + "").Equals(x[BillModel.DetailPreFix + "ProductId"] + "") && !string.IsNullOrEmpty(x[mRecordPrimaryField] + "")).ToArray(); foreach (DataRow item in rt) { if (newRow != null) { newRow[NumberMc] = Convert.ToDouble(newRow[NumberMc]) - Convert.ToDouble(item[NumberMc]); } this.gcMain.OnGridViewCellValueChanged(this.gcMain, new CellValueChangedEventArgs(position + 1, this.gcMain.GridView.Columns[NumberMc], newRow[NumberMc] + "")); this.gcMain.GridView.UpdateCurrentRow(); this.gcMain.GridView.ShowEditor(); if (Convert.ToDouble(newRow[NumberMc] + "") == 0.0) { gridTable.Rows.Remove(newRow); MessageUtil.Show("数量已分配完毕!无需再进行拖拽!"); } } } gridTable.OrderBy(this.BillModel.DetailOrderField); this.gcMain.GridView.UpdateCurrentRow(); this.gcMain.GridView.ShowEditor(); } /// /// 说明:添加多行到单据明细中 /// 创建人:龚宇超 /// 创建日期:2017-11-30 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The row item. /// The union model. private void AddRowsToGridView(DataTable dataTable, BillSourceUnionModel unionModel) { WaitForm.ShowForm(); GridColumnCollection gridColumns = this.gcMain.GridView.Columns; DataTable gridTable = (this.gcMain.GridControl.DataSource as DataTable).TrimDeleteRows().Copy(); if (!gridTable.Columns.Contains(ERPInfo.Instance.isAddRows)) { gridTable.Columns.Add(ERPInfo.Instance.isAddRows, typeof(String)); } int position = this.gcMain.GridView.FocusedRowHandle; bool isLastRow = this.gcMain.GridView.IsLastVisibleRow; foreach (DataRow rowItem in dataTable.Rows) { if (unionModel == null || ValidateDetailCond(rowItem, unionModel)) { string repeatProduct = this.gcMain.GridView.Columns["ProductId"] != null && dataTable.Columns.Contains("ProductId") ? "ProductId" : this.BillModel.DetailPreFix + "ProductId"; AssociatedField = repeatProduct; if ("1".Equals(this.BillModel.DetailDoubleClickTip) && this.gcMain.GridView.Columns[repeatProduct] != null && dataTable.Columns.Contains(repeatProduct)) { // 需要提示编码重复 GridView view = this.gcMain.GridView; bool result = (view.LocateByValue(repeatProduct, rowItem[repeatProduct], null) >= 0) | (view.LocateByValue(repeatProduct, rowItem[repeatProduct], null) >= 0) | (view.LocateByValue(repeatProduct, rowItem[repeatProduct], null) >= 0) | (view.LocateByValue(repeatProduct, rowItem[repeatProduct], null) >= 0); if (result) { DialogResult dialog = MessageUtil.Show(ResourceKeys.ProductIsRepet, MessageBoxButtons.YesNo); if (dialog != DialogResult.Yes) return; } } DataRow newRow = gridTable.NewRow(); newRow.BeginEdit(); // 赋值明细字段 foreach (GridColumn col in gridColumns) { try { GridColumnModel model = col.Tag as GridColumnModel; if (dataTable.Columns.Contains(col.FieldName)) { // 来源列中是否包含对应字段,包含则使用值 newRow[col.FieldName] = rowItem[col.FieldName]; if (!string.IsNullOrEmpty(model.UnionFields)) { this.SetUnionValue(model, rowItem[col.FieldName] + "", newRow); } SetCalcValue(model, rowItem[col.FieldName] + "", newRow); } else { // 未包含字段,则使用控件默认值. if (col.FieldName.Contains("_Ls")) { string[] unioFielName = col.FieldName.Split('_'); string UnioValue = unioFielName[unioFielName.Length - 1]; DataColumn grid = dataTable.Columns.Cast().FirstOrDefault(x => x.ColumnName.Split('_')[x.ColumnName.Split('_').Length - 1].Equals(UnioValue)); if (grid != null && !string.IsNullOrEmpty(model.UnionFields)) { this.SetUnionValue(model, rowItem[col.FieldName] + "", newRow); } SetCalcValue(model, rowItem[col.FieldName] + "", newRow); } else { string fieldValue = BaseImpl.GetDefaultValue(model.DefaultValue); //int nowPositon = !isLastRow ? position : gridTable.Rows.Count - 1; if (model.DefaultValue.Contains("{#")) { fieldValue = this.ControlObj.ReplaceParentControlValue(model.DefaultValue); if (!string.IsNullOrEmpty(fieldValue)) { newRow[col.FieldName] = fieldValue; if (!string.IsNullOrEmpty(model.UnionFields)) { this.SetUnionValue(model, fieldValue + "", newRow); } SetCalcValue(model, fieldValue + "", newRow); //计算规则配置在结果字段上,所以无需验证当前操作控件 //this.gcMain.GridView.SetFocusedRowCellValue(col, fieldValue); } } else if (!string.IsNullOrEmpty(model.DefaultValue)) { newRow[col.FieldName] = fieldValue; if (!string.IsNullOrEmpty(model.UnionFields)) { this.SetUnionValue(model, fieldValue + "", newRow); } SetCalcValue(model, fieldValue + "", newRow); //this.gcMain.GridView.SetFocusedRowCellValue(col, fieldValue); } } } SetDisableColumn(model, newRow[col.FieldName] + "", newRow); } catch (Exception ex) { LogHelper.Instance.WriteError(ex); LogUtil.WriteError(col.FieldName + "添加出错!", ex); } } newRow.EndEdit(); if (!isLastRow) { // 插入数据行 gridTable.Rows.InsertAt(newRow, position); //this.gcMain.GridView.ClearSelection(); //this.gcMain.GridView.SelectRowHandler(position); } else { // 添加数据行 gridTable.Rows.Add(newRow); // this.gcMain.GridView.ClearSelection(); // this.gcMain.GridView.SelectRowHandler(gridTable.Rows.Count - 1); } position++; //if (isLastRow) //{ // this.gcMain.GridView.ClearSelection(); // this.gcMain.GridView.SelectRowHandler(position + 1); //} if (!string.IsNullOrEmpty(NumberMc) && gridTable.Columns.Contains(mRecordPrimaryField)) { DataRow[] rt = gridTable.Rows.Cast().Where(x => (newRow[BillModel.DetailPreFix + "ProductId"] + "").Equals(x[BillModel.DetailPreFix + "ProductId"] + "") && !string.IsNullOrEmpty(x[mRecordPrimaryField] + "")).ToArray(); foreach (DataRow item in rt) { if (newRow != null) { newRow[NumberMc] = Convert.ToDouble(newRow[NumberMc]) - Convert.ToDouble(item[NumberMc]); } this.gcMain.OnGridViewCellValueChanged(this.gcMain, new CellValueChangedEventArgs(position + 1, this.gcMain.GridView.Columns[NumberMc], newRow[NumberMc] + "")); this.gcMain.GridView.UpdateCurrentRow(); this.gcMain.GridView.ShowEditor(); if (Convert.ToDouble(newRow[NumberMc] + "") == 0.0) { gridTable.Rows.Remove(newRow); MessageUtil.Show("数量已分配完毕!无需再进行拖拽!"); } } } } } this.gcMain.GridControl.DataSource = gridTable; if (position >= 0) this.gcMain.GridView.SelectRowHandler(position); else this.gcMain.GridView.SelectRowHandler(gridTable.Rows.Count - 1); //this.gcMain.GridView.SelectRowHandler(position); gridTable.OrderBy(this.BillModel.DetailOrderField); this.gcMain.GridView.UpdateCurrentRow(); this.gcMain.GridView.ShowEditor(); WaitForm.HideForm(); } /// /// 说明:检查添加数据到表格中是否包含 /// /// 创建人:龚宇超 /// 创建日期:2018-04-20 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The row item. /// The union model. /// if set to true [only popup]. private void AddRowToGridViewByBom(DataRow rowItem, BillSourceUnionModel unionModel, ref bool onlyPopup) { if (!string.IsNullOrEmpty(unionModel.ModelObj.BomSql)) { string bomSql = unionModel.ModelObj.BomSql; // 检查是否有bom配置 if (unionModel.ModelObj.LoadBom == 1) { // 自动带出bom数据,不弹出选择 DataTable table = BaseImpl.GetDataTableResult(ReplaceHelper.ReplaceRowParam(rowItem, bomSql)); foreach (DataRow item in table.Rows) { this.AddRowToGridView(item); } } else if (unionModel.ModelObj.LoadBom == 2) { DataTable table = BaseImpl.GetDataTableResult(ReplaceHelper.ReplaceRowParam(rowItem, bomSql)); if (!onlyPopup && table.Rows.Count > 0) { // 自动带出bom数据,弹出选择 FrmBomSelect frmSelect = new FrmBomSelect(); frmSelect.Caption = unionModel.ModelObj.BomCaption; frmSelect.GridColumns = unionModel.GridDetailControlObj.GridView.Columns; frmSelect.BomDataTable = table; DialogResult result = frmSelect.ShowDialog(); onlyPopup = frmSelect.OnlyPopup; if (result == DialogResult.OK && frmSelect.SelectBomRows != null && frmSelect.SelectBomRows.Length > 0) { foreach (DataRow item in frmSelect.SelectBomRows) { this.AddRowToGridView(item); } } } else { foreach (DataRow item in table.Rows) { this.AddRowToGridView(item); } } } } } /// /// 说明:添加多条数据到单据明细 /// 创建人:龚宇超 /// 创建日期:2017-11-30 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void AddMultiRowToGridView(DataRow[] rowItems) { bool onlyPopup = false; this.isDragWrap = false;//用于设置拖拽时不允许扫码控件换行 XtraTabPage tabPage = this.xtc_left_container.SelectedTabPage; BillSourceUnionModel unionModel = tabPage.Tag as BillSourceUnionModel; if (unionModel != null) { bool onlyOne = true; DataTable dt = unionModel.GridDetailControlObj.GridControl.DataSourceTable(); for (int i = 0; i < rowItems.Length; i++) { DataRow dr = dt.NewRow(); DataRow rowItem = rowItems[i]; //unionModel.GridDetailControlObj.GridView.GetDataRow(selectedRows[i]); // 检查当前记录是否满足条件 if (ValidateDetailCond(rowItem, unionModel)) { this.AddRowToGridView(rowItem); this.AddRowToGridViewByBom(rowItem, unionModel, ref onlyPopup); if (unionModel.GridDetailControlObj != null) { dr.ItemArray= rowItem.ItemArray; unionModel.GridDetailControlObj.GridControl.DataSourceTable().Rows.Remove(rowItem); RemoveRowitem.Add(dr); } } else { if (onlyOne) { onlyOne = false; if (!string.IsNullOrEmpty(unionModel.ModelObj.DetailEnableMsg)) { if (unionModel.ModelObj.DetailEnableMsg.StartsWith("select", StringComparison.OrdinalIgnoreCase) || unionModel.ModelObj.DetailEnableMsg.StartsWith("exec", StringComparison.OrdinalIgnoreCase)) { MessageUtil.Show(BaseImpl.GetResult(unionModel.ModelObj.DetailEnableMsg) + ""); } else { MessageUtil.Show(unionModel.ModelObj.DetailEnableMsg); } } } } } this.isDragWrap = true;//用于设置拖拽时不允许扫码控件换行 } } /// /// 说明:添加多条数据到单据明细 /// 创建人:龚宇超 /// 创建日期:2018-05-30 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The table. private void AddMultiRowToGridView(DataTable table, BillSourceUnionModel unionModel = null) { if (table == null) return; this.AddRowsToGridView(table, unionModel); Application.DoEvents(); } /// /// 说明:是否允许添加明细 /// 创建人:龚宇超 /// 创建日期:2018-06-06 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// true if this instance [can add detail row]; otherwise, false. private bool CanAddDetailRow() { // 检测是否正在筛选数据 if (!string.IsNullOrEmpty(gcMain.GridView.FindFilterText.Trim()) || !string.IsNullOrEmpty(gcMain.GridView.FilterPanelText.Trim())) { if (MessageUtil.Show(ResourceKeys.GridViewSearching, MessageBoxButtons.YesNo) == DialogResult.Yes) { this.gcMain.GridView.FindFilterText = ""; return true; } return false; } // 检测是否点击了排序表格 if (this.gcMain.GridView.HasSortColumn()) { //if (MessageUtil.Show(ResourceKeys.GridViewColumnSorting, MessageBoxButtons.YesNo) == DialogResult.Yes) //{ this.gcMain.GridView.Columns.ClearAllSort(); // return true; //} //return false; } // 检测是否为提交或者终审模块 if (_waterMark.Text.Contains("已终审")) { MessageUtil.Show(ResourceKeys.AddBillDetailed); return false; } return true; } /// /// 说明:单据明细撤回操作 /// 创建人:曹屹峰 /// 创建日期:2021-11-09 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void OnToWithdraw(object sender, KeyEventArgs e) { if (e.Control && e.KeyCode == Keys.Z) { if (ToWithdrawRows.Count < 1) return; DataTable gridTable = (this.gcMain.GridControl.DataSource as DataTable).TrimDeleteRows(); foreach (int key in ToWithdrawRows.Keys) { DataRow dr = gridTable.NewRow(); dr.ItemArray = ToWithdrawRows[key].ItemArray; gridTable.Rows.InsertAt(dr, key); this.gcMain.GridView.ClearSelection(); this.gcMain.GridView.SelectRowHandler(key); } gridTable.OrderBy(this.BillModel.DetailOrderField); ToWithdrawRows.Clear(); } } /// /// 说明: /// 创建人:龚宇超 /// 创建日期:2017-11-30 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// true if XXXX, false otherwise. private bool ValidateDetailCond(DataRow rowItem, BillSourceUnionModel unionModel) { bool validate = false; try { string detailCond = ReplaceHelper.ReplaceRowParam(rowItem, unionModel.ModelObj.DetailEnableCond); if (detailCond.Contains("#")) { List condition = ReplaceHelper.GetParamFields(detailCond); foreach (string item in condition) { string fieldValue = this.ControlObj.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); } } catch (Exception ex) { LogHelper.Instance.WriteLog(ex.StackTrace); LogUtil.WriteError("验证多条添加条件出错!", ex); //MessageUtil.Show(ResourceKeys.CondtionError + "\r\n" + unionModel.ModelObj.DetailEnableCond); } return validate; } /// /// 说明:单据来源右键菜单执行完后刷新 /// 创建人:龚宇超 /// 创建日期:2017-12-11 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void OnGridControlRightCallback(object sender, EventArgs e) { this.RefreshSelectedSource(); // 执行右键菜单后刷新单据状态2020-03-23 XtraTabPage tabPage = this.xtc_left_container.SelectedTabPage; BillSourceUnionModel model = tabPage.Tag as BillSourceUnionModel; if (model.ModelObj.SourceType == 2 && this._isLoadRightControlValue) { DataRow rowItem = null; if (model.GridControlObj.DataRowCount() > 0) { DataRow selectRow = model.GridControlObj.GridView.GetFocusedDataRow(); rowItem = BillImpl.GetDataRowResult(ReplaceHelper.ReplaceRowParam(selectRow, BillModel.MasterSql)); } // 加载单据信息 this.SetBillStatus(rowItem); if (rowItem == null) { this.ControlObj.ResetControlValue(); } } } /// /// 说明:获取单据管理的单据来源标签 /// 创建人:龚宇超 /// 创建日期:2017-12-13 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private BillSourceUnionModel GetBillSourceManager() { foreach (XtraTabPage item in this.xtc_left_container.TabPages) { BillSourceUnionModel model = item.Tag as BillSourceUnionModel; if (model.ModelObj.SourceType == 2) return model; } return null; } /// /// 说明:初始化附加信息 /// 创建人:龚宇超 /// 创建日期:2018-04-26 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private List GetAttachTabs() { List details = new List(); if (ProcessExists) { DataTable table = Lskj.Data.Caches.CacheSYSConfig.Instance().GetBaseDetailPages(); foreach (DataRow item in table.Rows) { DataTable gridColumns = Lskj.Data.Caches.CacheSYSConfig.Instance().GetReportDetailColumns(item["formKey"] + "");//获取报表明细列 details.Add(new GridDetailModel(item, gridColumns, GridCustomColumnStruct.BillSourceDetailAttachGridView)); } } else { DataTable table = BaseAuditImpl.GetAttachTabs(this.SysModel.ModuleCode, "100", " and orderid < 0 "); foreach (DataRow item in table.Rows) { DataTable gridColumns = BaseAuditImpl.GetBottomBasicInformation(item["formKey"] + ""); details.Add(new GridDetailModel(item, gridColumns, GridCustomColumnStruct.BillSourceDetailAttachGridView)); } } return details; } #endregion #region 单据保存、提交 /// /// 说明:获取添加表头数据 /// 创建人:龚宇超 /// 创建日期:2017-12-07 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The parmary value. /// System.String. private string GetAddRecord(ref string parmaryValue) { if (BillModel.NewVer == 0) { // 检查当前的单据号是否已被占用. string newBillNo = BillImpl.GetBillNo(this.BillModel.BillSeq); if (!parmaryValue.Equals(newBillNo)) { if (MessageUtil.Show(ResourceKeys.BillRecordRepeat, MessageBoxButtons.YesNo) == DialogResult.No) { return string.Empty; } else { this.lblOrderNo.Text = newBillNo; parmaryValue = newBillNo; } } } StringBuilder fieldBuilder = new StringBuilder(); StringBuilder valueBuilder = new StringBuilder(); DataTable DetailedProperties = BaseImpl.GetDataTableResult(string.Format("select COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH from information_schema.columns where table_name = '{0}'", BillModel.MasterTable)); foreach (ControlModel model in this.ControlObj.ControlModels) { if (!model.IsSave || model.FieldName.Equals(BillModel.PrimaryKey, StringComparison.OrdinalIgnoreCase) || model.FieldName.Equals(BillModel.RtagidKey, StringComparison.OrdinalIgnoreCase) || model.FieldType == ControlType.LabPic || model.FieldType == ControlType.LabPicEx) continue; string fieldValue = this.ControlObj.GetControlValue(model); if (fieldValue == "****") continue; fieldBuilder.Append(model.FieldName + ","); valueBuilder.Append(string.IsNullOrEmpty(fieldValue) ? this.ControlObj.GetNullValue(model) : string.Format("'{0}',", fieldValue)); SaveErrorMessage = SaveErrorMessage + DatabaseFormatJudgment.SaveOrModifyBalidation(DetailedProperties, model, fieldValue); } // 增加主键 fieldBuilder.Append(BillModel.PrimaryKey); valueBuilder.Append("'" + parmaryValue + "'"); // 增加红蓝字单标记 fieldBuilder.Append("," + BillModel.RtagidKey); valueBuilder.Append(",'" + (rdRed.Checked ? 1 : 0) + "'"); return string.Format("insert into {0}({1}) values ({2})", BillModel.MasterTable, fieldBuilder.ToString().TrimEnd(','), valueBuilder.ToString().TrimEnd(',')); } /// /// 说明:获取修改表头数据 /// 创建人:龚宇超 /// 创建日期:2017-12-07 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// 单据值. /// System.String. private string GetUpdateRecord(string parmaryValue) { StringBuilder updateBuilder = new StringBuilder(); DataTable DetailedProperties = BaseImpl.GetDataTableResult(string.Format("select COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH from information_schema.columns where table_name = '{0}'", BillModel.MasterTable)); // 修改单据 foreach (ControlModel model in this.ControlObj.ControlModels) { if (!model.IsSave || model.FieldName.Equals(BillModel.RtagidKey, StringComparison.OrdinalIgnoreCase) || model.FieldType == ControlType.LabPic || model.FieldType == ControlType.LabPicEx) continue; BaseUserControl userControl = this.ControlObj.FindControl(model); if (userControl != null) { string fieldValue = this.ControlObj.GetControlValue(model); if (fieldValue == "****") continue; updateBuilder.Append(string.IsNullOrEmpty(fieldValue) ? string.Format("{0}={1}", model.FieldName, this.ControlObj.GetNullValue(model)) : string.Format("{0}='{1}',", model.FieldName, fieldValue.Contains("'") ? fieldValue.Replace("'", "''") : fieldValue)); SaveErrorMessage = SaveErrorMessage + DatabaseFormatJudgment.SaveOrModifyBalidation(DetailedProperties, model, fieldValue); } } return string.Format("update {0} set {1} where {2}='{3}'", BillModel.MasterTable, updateBuilder.ToString().TrimEnd(','), BillModel.PrimaryKey, parmaryValue); } /// /// 说明:获取保存明细数据 /// 创建人:龚宇超 /// 创建日期:2017-12-07 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// System.String. private StringBuilder GetDetailRecord(string guid, string billNo) { // 构造明细 StringBuilder detailBuilder = new StringBuilder(); DataTable detailTable = this.gcMain.GridControl.DataSourceTable().TrimDeleteRows(); DataTable DetailedProperties = BaseImpl.GetDataTableResult(string.Format("select COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH from information_schema.columns where table_name = '{0}'", BillModel.DetailTable + "_temp"));//单据明细性表 if (detailTable.Rows.Count > 0) { DataTable BillColumns = BaseImpl.GetDataTableResult(string.Format("select * from {0} where 1<>1", BillModel.DetailTable)); DataTable BillTempColumns = BaseImpl.GetDataTableResult(string.Format("select * from {0} where 1<>1", BillModel.DetailTable + "_temp")); foreach (DataRow dataRow in detailTable.Rows) { StringBuilder fields = new StringBuilder(); StringBuilder values = new StringBuilder(); string detailSql = @"insert into " + BillModel.DetailTable + "_temp" + "({0}) values({1})"; fields.Append("sysstr,"); values.Append("'" + guid + "',"); foreach (DataColumn item in BillColumns.Columns) { //GridColumn col = this.gcMain.GridView.VisibleColumns.OfType().FirstOrDefault(x => x.FieldName == item.ColumnName); //if (col == null) //{ // continue; //} if (item.ColumnName.Equals(guidField) || item.ColumnName.Equals(mRecordPrimaryField) || item.ColumnName.Equals(ERPInfo.Instance.isAddRows)) continue; if (!BillTempColumns.Columns.Contains(item.ColumnName)) { string type = "varchar(50)"; if (item.DataType == typeof(DateTime)) { type = "datetime"; } BaseImpl.ExecSqlValue(string.Format("alter table {0} add {1} {2}", BillModel.DetailTable + "_temp", item.ColumnName, type)); } fields.Append(item.ColumnName + ","); string fieldValue = dataRow.Table.Columns.Contains(item.ColumnName) ? dataRow[item.ColumnName] + "" : string.Empty; if (item.ColumnName.Equals(BillModel.PrimaryDetailKey, StringComparison.OrdinalIgnoreCase)) fieldValue = billNo; if (!string.IsNullOrWhiteSpace(fieldValue)) { values.Append(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)) values.Append("0,"); else if (item.DataType == typeof(DateTime)) values.Append("NULL,"); else values.Append("'',"); } SaveErrorMessage = SaveErrorMessage + DatabaseFormatJudgment.SaveOrModifyBalidation(_detailColumns,DetailedProperties, dataRow, item, fieldValue); } detailBuilder.AppendFormat(detailSql, fields.ToString().Trim(','), values.ToString().Trim(',')); } } return detailBuilder; } /// /// 说明:保存单据 /// 创建人:龚宇超 /// 创建日期:2018-04-20 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// 是否继续执行(0.1). /// 是否显示成功提示信息 /// true if XXXX, false otherwise. private bool BillSave(int comfirm = 0, bool canTipMsg = true) { bool saveResult = false; if (this.ControlObj.VerifyNull()) { // 保存之前先进行表格更新 this.gcMain.GridView.PostEditor(); this.gcMain.GridView.UpdateCurrentRow(); try { if (this.gcMain.VerifyNull()) { WaitForm.ShowForm(ResourceKeys.DataSaving); string billNo = this.lblOrderNo.Text.Trim(); string detailGuid = Guid.NewGuid().ToString(); string masterSql = BillModel.SaveState ? GetUpdateRecord(billNo) : GetAddRecord(ref billNo); string detailSql = GetDetailRecord(detailGuid, billNo).ToString(); // 检查单据头数据合法性 if (string.IsNullOrEmpty(masterSql)) return false; // 验证明细合法性 if (string.IsNullOrEmpty(detailSql) && !this.BillModel.SaveNullDetail) { MessageUtil.Show(ResourceKeys.BillDetailIsNotNull); return false; } string tipMsg = string.Empty; int result = BillImpl.BillSave(masterSql, detailSql, BillModel.DetailTable, ref billNo, detailGuid, BillModel.BillSeq, BillModel.SaveState ? 2 : 1, comfirm, out tipMsg, 0, this.BillModel.NewVer); switch (result) { case 1: // 保存成功 if (canTipMsg) MessageUtil.Show(BillModel.TypeName + ResourceKeys.SaveSuccess); #region 单据保存成功调用Api接口 if (ApiHelper.IsExecEventApi(Interface.Api.OperateEvent.AfterModuleDataChange, this.SysModel.ModuleCode, 0)) { ApiHelper apiHelper = new ApiHelper(this.SysModel.ModuleCode, billNo, BillModel.PrimaryKey, BillModel.MasterTable, 0); switch (BillModel.SaveState) { case false: apiHelper.OnEvent(Interface.Api.OperateEvent.AfterModuleDataChange, Interface.Api.ActionType.Add);//添加 break; case true: apiHelper.OnEvent(Interface.Api.OperateEvent.AfterModuleDataChange, Interface.Api.ActionType.Update);//更新 break; } if (!string.IsNullOrEmpty(apiHelper.apiResutMsg) && canTipMsg) MessageUtil.Show(apiHelper.apiResutMsg); } #endregion this.lblOrderNo.Text = billNo; this.SetBillStatus(BillImpl.GetDataRowResult(string.Format("select * from {0} where {1}='{2}'", BillModel.MasterTable, BillModel.PrimaryKey, billNo))); saveResult = true; SaveRefreshSource(); RefreshPrindMenu(); break; case 9: // 继续执行保存 if (string.IsNullOrWhiteSpace(tipMsg)) tipMsg = "保存单据临时表失败"; if (MessageUtil.Show(tipMsg, MessageBoxButtons.YesNo) == DialogResult.Yes) this.BillSave(1, canTipMsg); saveResult = true; break; default: // 保存失败 //MessageUtil.Show(BillModel.TypeName + ResourceKeys.SaveFault + "\r\n" + tipMsg); SaveErrorMessage = SaveErrorMessage + "\r\n" + "出错原因:\r\n" + tipMsg; MessageUtil.Show(BillModel.TypeName + ResourceKeys.SaveFault + "\r\n" + SaveErrorMessage); SaveErrorMessage = string.Empty; break; } } } catch (Exception ex) { if (string.IsNullOrWhiteSpace(SaveErrorMessage)) { MessageUtil.Show(ex.Message); } else { MessageUtil.Show("保存单据失败!\r\n" + SaveErrorMessage); } SaveErrorMessage = string.Empty; LogHelper.Instance.WriteError(ex); LogUtil.WriteError("保存单据失败!", ex); } finally { WaitForm.HideForm(); } } return saveResult; } /// /// 说明:通过配置条件刷新打印菜单 /// 创建人:王一帆 /// 创建日期:2020-04-10 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The hint MSG. /// true if XXXX, false otherwise. public void RefreshPrindMenu() { if (!string.IsNullOrWhiteSpace(BillModel.BillPrintTag)) { pMprint.ClearLinks(); // 打印模版 DataRow rowItem = this.gcMain.GridView.GetDataRow(this.gcMain.GridView.FocusedRowHandle); string BillPrintTag = this.ControlObj.ReplaceParentControlValue(BillModel.BillPrintTag); BillPrintTag = ReplaceHelper.ReplaceRowParam(rowItem, BillPrintTag); // BillPrintTag = ReplaceHelper.ReplaceParamToValue(BillPrintTag,this.lblOrderNo.Text.Trim()); string value = MainImpl.GetResult(ReplaceHelper.ReplaceRowParam(rowItem, BillPrintTag)) + ""; string[] files = value.Split('|'); for (int i = 0; i < files.Length; i++) { string fileName = files[i]; if (!string.IsNullOrWhiteSpace(fileName)) { BarButtonItem itemPrint = new BarButtonItem(); int index = i + 1; itemPrint.Caption = files[i].Replace(".rmf", "").Replace(".frx", ""); itemPrint.Tag = files[i]; itemPrint.ItemClick += new ItemClickEventHandler(OnPrintItemClick); pMprint.AddItem(itemPrint); } } } } /// /// 说明:单据提交 /// 创建人:龚宇超 /// 创建日期:2017-12-13 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The hint MSG. /// true if XXXX, false otherwise. private void BillApply(string hintMsg, int comfirm = 0) { try { WaitForm.ShowForm(ResourceKeys.Handing); string tipMsg = string.Empty; string billNo = this.lblOrderNo.Text.Trim(); int result = BillImpl.BillApply(this.SysModel.ModuleCode, billNo, "", 1, out tipMsg, comfirm); WaitForm.HideForm(); switch (result) { case 1: // 提交成功 MessageUtil.Show(BillModel.TypeName + ResourceKeys.ApplySuccess); this.SetBillStatus(BillImpl.GetDataRowResult(string.Format("select * from {0} where {1}='{2}'", BillModel.MasterTable, BillModel.PrimaryKey, billNo))); this.RefreshSource(GetBillSourceManager()); this.RefreshSelectedSource(); if (this.BillModel.ApplyRefresh) { this.SetBillStatus(null); this.ControlObj.ResetControlValue(); } #region 提交审核成功后调用API if (ApiHelper.IsExecEventApi(Interface.Api.OperateEvent.AfterModuleAuditStateChange, this.SysModel.ModuleCode, 0)) { ApiHelper apiHelper = new ApiHelper(this.SysModel.ModuleCode, billNo, this.BillModel.PrimaryKey, this.BillModel.MasterTable, 0); apiHelper.OnEvent(Interface.Api.OperateEvent.AfterModuleAuditStateChange, Interface.Api.ActionType.Audit);//审核 if (!string.IsNullOrEmpty(apiHelper.apiResutMsg)) MessageUtil.Show(apiHelper.apiResutMsg); } #endregion // 推送消息 PushHelper push = new PushHelper(billNo, "0", this.SysModel.ModuleCode, "", "", 0); push.Push_Bill_Oper_Message(); break; case 9: // 继续执行保存 if (string.IsNullOrWhiteSpace(tipMsg)) tipMsg = "提交单据失败"; if (MessageUtil.Show(tipMsg, MessageBoxButtons.YesNo) == DialogResult.Yes) this.BillApply("", 1); break; case 99: // 继续执行提交 if (MessageUtil.Show(tipMsg, MessageBoxButtons.YesNo) == DialogResult.Yes) { FrmPrompt prompt = new FrmPrompt(tipMsg); prompt.Size = new Size(300, 200); DialogResult dialog = prompt.ShowDialog(); if (dialog == DialogResult.OK) { this.BillApply(prompt.PromptMsg); } } break; default: // 提交失败 MessageUtil.Show(BillModel.TypeName + ResourceKeys.ApplyFault + "\r\n" + tipMsg); break; } } catch { throw; } finally { WaitForm.HideForm(); } } #endregion #region 事件相关 /// /// 说明:点击空白界面后需要获取焦点 /// 创建人:王一帆 /// 创建日期:2020-09-04 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void OnMainFocusAfter(object sender, EventArgs e) { this.pl_main_center_master.Focus(); } /// /// 说明:打印完成后回调 /// 创建人:龚宇超 /// 创建日期:2018-07-05 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. /// The e. private void OnReportPrintAfter(object sender, EventArgs e) { //打印完成后添加数据库 if (_printSaveParams != null && _printSaveParams.Count > 0) { int result = BaseModuleImpl.SavePrintRecord(_printSaveParams[0], _printSaveParams[1], _printSaveParams[2], _printSaveParams[3], _printSaveParams[4]); } } /// /// 说明: /// 创建人:龚宇超 /// 创建日期:2017-11-28 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void OnFrmMainKeyDown(object sender, KeyEventArgs e) { // 窗口获取按键则表格按键中断.有时间处理 if (e.Modifiers.CompareTo(Keys.Control) == 0) { if (e.KeyCode == Keys.Left) this.ssc_main_top.Collapsed = true; if (e.KeyCode == Keys.Right) this.ssc_main_top.Collapsed = false; if (e.KeyCode == Keys.Down) this.ssc_main.Collapsed = true; if (e.KeyCode == Keys.Up) this.ssc_main.Collapsed = false; } } /// /// 说明:树节点选中刷新明细 /// 创建人:龚宇超 /// 创建日期:2017-12-01 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void OnTreeNodeSelectAfter(object sender, TreeViewEventArgs e) { TreeView tree = (TreeView)sender; XtraTabPage tabPage = this.xtc_left_container.SelectedTabPage; BillSourceUnionModel unionModel = tabPage.Tag as BillSourceUnionModel; if (unionModel != null) { WaitForm.ShowForm(); try { string sqlValue = ReplaceHelper.ReplaceUserInfo(ReplaceHelper.ReplaceWhereCond(unionModel.ModelObj.DetailSql)); sqlValue = sqlValue.Replace("#", ""); sqlValue = this.ControlObj.ReplaceControlValue(sqlValue); sqlValue = ReplaceHelper.ReplaceParamToValue(sqlValue, e.Node.Name); unionModel.GridDetailControlObj.GridControl.DataSource = BillImpl.GetDataTableResult(sqlValue); //if (BillModel.drgFinishHide == "1") //{ // DataTable finishHideTb = unionModel.GridDetailControlObj.GridControl.DataSourceTable(); //foreach (DataRow drItem in RemoveRowitem) //{ // if (finishHideTb.Select().Contains(drItem)) finishHideTb.Rows.Remove(drItem); // //IEqualityComparer comparer = DataRowComparer.Default; // //foreach (DataRow dr in finishHideTb.Select()) // //{ // // if (comparer.Equals(drItem, dr)) finishHideTb.Rows.Remove(dr); // //} //} //并集 //IEnumerable QBJ = finishHideTb.Select().AsEnumerable().Union(RemoveRowitem.AsEnumerable(), DataRowComparer.Default); //交集 //IEnumerable QJJ = finishHideTb.Select().AsEnumerable().Intersect(RemoveRowitem.AsEnumerable(), DataRowComparer.Default); //差集 //IEnumerable QCJ = finishHideTb.Select().AsEnumerable().Except(RemoveRowitem.AsEnumerable(), DataRowComparer.Default); //try //{ // DataTable jg = QCJ.CopyToDataTable(); // unionModel.GridDetailControlObj.GridControl.DataSource = jg; //} //catch (System.InvalidOperationException ex) //如果差集为null,就回进当前报错 //{ // unionModel.GridDetailControlObj.GridControl.DataSource = null; //} //} } catch (Exception ex) { LogHelper.Instance.WriteError(ex); LogUtil.WriteError(BillModel.TypeName + "模块选中树节点" + tree.SelectedNode.Text + "刷新明细失败!", ex); } finally { WaitForm.HideForm(); } } } /// /// 说明:单据来源切换Tab标签 /// 创建人:龚宇超 /// 创建日期:2017-11-28 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void OnTabSelectedPageChanged(object sender, TabPageChangedEventArgs e) { try { if (_isInitFinish) { BillSourceUnionModel unionModel = e.Page.Tag as BillSourceUnionModel; if (unionModel != null) { this.RefreshSelectedSource(); this.tb_buttom.TabControlObj.TabPages[0].Controls.Clear(); this.tb_buttom.TabControlObj.TabPages[0].Controls.Add(unionModel.GridDetailControlObj); this.tb_buttom.TabControlObj.TabPages[0].Text = unionModel.ModelObj.UserName + "-明细"; if (unionModel.IsChange == false) { AutoSizeChange.ControllInitializeSize(this.tb_buttom.TabControlObj.TabPages[0]); unionModel.IsChange = true; } } } } catch (Exception ex) { LogHelper.Instance.WriteError(ex); LogUtil.WriteError("单据切换标签失败!", ex); } } /// /// 说明:单据来源树结构默认查询条件 /// 创建人:龚宇超 /// 创建日期:2017-11-28 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void OnTreeSearchClick(object sender, EventArgs e) { XtraTabPage tabPage = this.xtc_left_container.SelectedTabPage; this.RefreshSourceDetail(tabPage.Tag as BillSourceUnionModel); } /// /// 说明:第一个页签初始化完成刷新数据 /// 创建人:龚宇超 /// 创建日期: /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. /// The instance containing the event data. private void OnFirstPageDataSourceBindCallBack(object sender, EventArgs e) { try { if (IsBillMaster) { this.RefreshSelectedSource(); } } catch (Exception ex) { LogHelper.Instance.WriteError(ex); LogUtil.WriteError("单据切换标查询失败!", ex); } } /// /// 说明:第一个页签初始化完成刷新数据 /// 创建人:龚宇超 /// 创建日期: /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. /// The instance containing the event data. private void OnPageDataSourceBindCallBack(object sender, EventArgs e) { try { MyControl searchControl = sender as MyControl; XtraTabPage tabPage = pageNumKey[searchControl]; if (tabPage.TabIndex == 0) return; BillSourceUnionModel unionModel = tabPage.Tag as BillSourceUnionModel; string searchSql = unionModel.ModelObj.SourceSql; searchSql = ReplaceHelper.ReplaceUserInfo(searchSql); searchSql = ReplaceHelper.ReplaceWhereCond(searchSql); searchSql = unionModel.SearchObj.SetSearchSqlValue(searchSql, true, true); DataTable dt = MainImpl.GetDataTableResult(searchSql); if (dt.Rows.Count > 0) tabPage.Text += "(" + dt.Rows.Count + "条)"; } catch (Exception ex) { LogHelper.Instance.WriteError(ex); LogUtil.WriteError("单据条件绑定失败失败!", ex); } } /// /// 说明:单据来源选中行,加载明细 /// 创建人:龚宇超 /// 创建日期:2017-11-30 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void OnGridControlSelectionChanged(object sender, SelectionChangedEventArgs e) { XtraTabPage tabPage = this.xtc_left_container.SelectedTabPage; this.RefreshSourceDetail(tabPage.Tag as BillSourceUnionModel); } /// /// 说明:单据来源选中行,加载明细 /// 创建人:龚宇超 /// 创建日期:2017-11-30 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void OnGridViewRowCellClick(object sender, RowCellClickEventArgs e) { XtraTabPage tabPage = this.xtc_left_container.SelectedTabPage; BillSourceUnionModel unionModel = tabPage.Tag as BillSourceUnionModel; this.RefreshSourceDetail(unionModel); } /// /// 说明:单据明细选中刷新附件明细 /// 创建人:王一帆 /// 创建日期:2021-06-30 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void OngcMainRowCellClick(object sender, RowCellClickEventArgs e) { if (this.tb_buttom.TabControlObj.TabPages.Count > 1) { SetDetailGridDataSource(); } } /// /// 说明:获取底部多标签数据 /// 创建人:龚宇超 /// 创建日期:2017-12-19 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// public void SetDetailGridDataSource() { DataRow rowItem = this.gcMain.GridView.GetFocusedDataRow(); int i = 0; foreach (XtraTabPage page in this.tb_buttom.TabControlObj.TabPages) { if (i == 0) { i++; continue; } if (rowItem != null && page != null) { this.SetTabPageDataSource(page, rowItem); } } } /// /// 说明:设置表格数据 /// 创建人:龚宇超 /// 创建日期:2018-01-29 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The tab page. /// The grid control. public void SetTabPageDataSource(XtraTabPage tabPage, DataRow rowItem) { GridDetailModel model = this.tb_buttom.GetGridDetailModel(tabPage); if (rowItem != null && model != null) { if (tabPage.Tag is ModuleWebView) { // 加载网页 string url = model.DetailSql.StartsWith("http") ? model.DetailSql : SystemInfo.Instance.OAUrl + model.DetailSql; ModuleWebView webView = tabPage.Tag as ModuleWebView; webView.Dock = DockStyle.Fill; webView.Tag = model; webView.Navigate(ReplaceHelper.ReplaceRowParam(rowItem, ReplaceHelper.ReplaceUserInfo(url))); } else { string searchSql = this.GetSearchSql(model, rowItem); if (tabPage.Tag is GridControlEx) { (tabPage.Tag as GridControlEx).LastSearchSql = searchSql; } this.tb_buttom.SetGridDataSource(tabPage, MainImpl.GetDataTableResult(searchSql)); if (tabPage.Tag is GridControlEx && (tabPage.Tag as GridControlEx).ParentControl != null) (tabPage.Tag as GridControlEx).ParentControl.SetAllControlValue(rowItem); //配置明细直接根据条件加载 if (model.SystemModel != null && 1 == model.SystemModel.isFirstLoad) { (tabPage.Tag as GridControlEx).ParentControl.SearchGrid(); tabPage.Text = model.DetailName + "(" + (tabPage.Tag as GridControlEx).ParentControl.GridRowCount + "条)"; } } } else if (rowItem != null && tabPage.Tag is TabMultipledetails) { TabMultipledetails tabMultipledetails = tabPage.Tag as TabMultipledetails; GridControlEx grdExMain = (tabMultipledetails.SplitMain.Panel1.Tag as GridControlEx); GridControlEx grdExAdditional = (tabMultipledetails.SplitMain.Panel2.Tag as GridControlEx); GridDetailModel MainModel = grdExMain.Tag as GridDetailModel; GridDetailModel AdditionalModel = grdExAdditional.Tag as GridDetailModel; string searchMainSql = this.GetSearchSql(MainModel, rowItem); string searchAddSql = this.GetSearchSql(AdditionalModel, rowItem); DataTable firstTable = MainImpl.GetDataTableResult(searchMainSql); grdExMain.LastSearchSql = searchMainSql; grdExAdditional.LastSearchSql = searchAddSql; grdExMain.SetGridViewDataSource(firstTable); tabPage.Text = MainModel.DetailName + "(" + firstTable.Rows.Count + "条)"; grdExAdditional.SetGridViewDataSource(MainImpl.GetDataTableResult(searchAddSql)); } } /// /// 说明:获取查询条件 /// 创建人:龚宇超 /// 创建日期:2017-11-22 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The model. /// The row item. /// System.String. protected string GetSearchSql(GridDetailModel model, DataRow rowItem) { string fieldName = !string.IsNullOrEmpty(model.UnionParentField) && rowItem.Table.Columns.Contains(model.UnionParentField) ? model.UnionParentField : BillModel.PrimaryKey; string sqlValue = model.IsReadOnly || model.IsChart ? model.DetailSql : model.SystemModel.MenuSql; string unioValue = string.Empty; unioValue = rowItem.Table.Columns.Contains(fieldName) ? rowItem[fieldName] + "" : string.Empty; if (this.ControlObj != null && string.IsNullOrEmpty(unioValue)) { unioValue = !string.IsNullOrEmpty(model.UnionParentField) && this.ControlObj.FindControl(model.UnionParentField) != null ? this.ControlObj.GetControlValue(model.UnionParentField) : unioValue; } sqlValue = ReplaceHelper.ReplaceRowParam(rowItem, sqlValue); sqlValue = this.ControlObj.ReplaceControlValue(sqlValue);//后替换主表内容 if (ReplaceHelper.IsSelect(sqlValue) && !string.IsNullOrEmpty(model.UnionValue)) { sqlValue = ReplaceHelper.ReplaceWhereCond(sqlValue) + string.Format(" and {0}='{1}'", model.UnionValue, unioValue); } if (!string.IsNullOrEmpty(model.UnionCond)) { string UnionCond = ReplaceHelper.ReplaceRowParam(rowItem, model.UnionCond); sqlValue += UnionCond; } return sqlValue; } /// /// 说明:单据来源选中行,加载明细 /// 创建人:龚宇超 /// 创建日期:2019-07-25 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. /// The instance containing the event data. private void OnTreeListObjFocusedNodeChanged(object sender, DevExpress.XtraTreeList.FocusedNodeChangedEventArgs e) { XtraTabPage tabPage = this.xtc_left_container.SelectedTabPage; this.RefreshSourceDetail(tabPage.Tag as BillSourceUnionModel); } /// /// 说明:单据来源明细右键菜单执行后刷新数据 /// 创建人:龚宇超 /// 创建日期:2017-12-19 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void OnGridDetailRightMenuCallback(object sender, EventArgs e) { XtraTabPage tabPage = this.xtc_left_container.SelectedTabPage; this.RefreshSourceDetail(tabPage.Tag as BillSourceUnionModel); } /// /// 说明:来源双击加载明细 /// 创建人:龚宇超 /// 创建日期:2017-11-30 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void OnGridDetailDoubleClick(object sender, EventArgs e) { if (this.CanAddDetailRow()) { DataTable table = this.gcMain.GridControl.DataSource as DataTable; XtraTabPage tabPage = this.xtc_left_container.SelectedTabPage; BillSourceUnionModel unionModel = tabPage.Tag as BillSourceUnionModel; DataRow rowItem = unionModel.GridDetailControlObj.GridView.GetFocusedDataRow(); this.AddMultiRowToGridView(new DataRow[] { rowItem }); } } /// /// 说明:单据明细点击加载tab数据 /// 创建人:龚宇超 /// 创建日期:2018-04-26 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void OnGridViewDoubleClick(object sender, EventArgs e) { for (int i = 1; i < this.tb_buttom.TabControlObj.TabPages.Count; i++) { XtraTabPage tabPage = this.tb_buttom.TabControlObj.TabPages[i]; DataRow rowItem = this.gcMain.GridView.GetFocusedDataRow(); GridDetailModel model = this.tb_buttom.GetGridDetailModel(tabPage); if (rowItem != null && tabPage != null) { string searchSql = ReplaceHelper.ReplaceRowParam(rowItem, model.DetailSql); this.tb_buttom.SetGridDataSource(tabPage, MainImpl.GetDataTableResult(searchSql)); } } } /// /// 说明:单据空行新增时初始化默认值 /// 创建人:dl /// 创建日期:2019-01-29 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. private void OnGridViewInitNewRow(object sender, InitNewRowEventArgs e) { InitNewRowMethod(sender); } /// /// 说明:右键菜单执行后刷新数据,刷新规则按照上一次查询条件刷新 /// 创建人:龚宇超 /// 创建日期:2017-11-02 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. /// The instance containing the event data. private void OnGridViewRightCallBack(object sender, EventArgs e) { string billNo = this.lblOrderNo.Text.Trim(); this.SetBillStatus(BillImpl.GetDataRowResult(string.Format("select * from {0} where {1}='{2}'", BillModel.MasterTable, BillModel.PrimaryKey, billNo))); } /// /// 说明:重绘单据水印 /// 创建人:龚宇超 /// 创建日期:2017-12-04 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void OnLabelTitlePaint(object sender, PaintEventArgs e) { if (this._waterMark != null) { GraphicsText graphicsText = new GraphicsText(); graphicsText.Graphics = e.Graphics; // 绘制围绕点旋转的文本 StringFormat format = new StringFormat(); format.Alignment = StringAlignment.Center; format.LineAlignment = StringAlignment.Center; // 绘制单据状态文本 if (!string.IsNullOrEmpty(this._waterMark.Text)) { graphicsText.DrawString(this._waterMark.Text, new Font("宋体", 12, FontStyle.Bold), new SolidBrush(Color.Red), new PointF(50, 21), format, -15f); e.Graphics.TranslateTransform(0, 0); e.Graphics.RotateTransform(-15f); e.Graphics.DrawRectangle(new Pen(Color.Red, 2f), new Rectangle(14, 20, 55, 21)); } // 绘制打印次数文本 e.Graphics.ResetTransform(); if (!string.IsNullOrEmpty(this._waterMark.Print)) { graphicsText.DrawString(this._waterMark.Print, new Font("宋体", 11, FontStyle.Bold), new SolidBrush(Color.Red), new PointF((this.lbTitle.Width - 70), 21), format, -15f); e.Graphics.TranslateTransform(this.lbTitle.Width - 70, 21); e.Graphics.RotateTransform(-15f); e.Graphics.DrawRectangle(new Pen(Color.Red, 2f), new Rectangle(-35, -14, 70, 21)); } // 绘制收款文本 e.Graphics.ResetTransform(); if (!string.IsNullOrEmpty(this._waterMark.Collect)) { graphicsText.DrawString(this._waterMark.Collect, new Font("宋体", 12, FontStyle.Bold), new SolidBrush(Color.Red), new PointF((this.lbTitle.Width - 170), 21), format, -15f); e.Graphics.TranslateTransform(this.lbTitle.Width - 100, 21); e.Graphics.RotateTransform(-15f); e.Graphics.DrawRectangle(new Pen(Color.Red, 2f), new Rectangle(-100, -32, 55, 21)); } } } /// /// 说明:单据来源拖动数据到单据明细表格后 /// 创建人:龚宇超 /// 创建日期:2017-12-05 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. /// The e. private void OnDragDetailGridCompleted(object sender, GridDragGridArgs e) { DataRow[] dragRows = e.GridViewSelectRows; if (dragRows != null && dragRows.Length > 0) { this.AddMultiRowToGridView(dragRows); } } /// /// 说明:单据来源表格拖拽完成 /// 创建人:龚宇超 /// 创建日期:2018-03-21 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. /// The e. private void OnDragMainGridCompleted(object sender, GridDragGridArgs e) { if (e.GridViewSelectRows == null || e.GridViewSelectRows.Length == 0) return; try { if (this.CanAddDetailRow()) { if (MessageUtil.Show(ResourceKeys.DragSelectRow, MessageBoxButtons.YesNo) == DialogResult.Yes) { XtraTabPage tabPage = this.xtc_left_container.SelectedTabPage; BillSourceUnionModel unionModel = tabPage.Tag as BillSourceUnionModel; int FocuseIndex = e.SourceGridViewObj.FocusedRowHandle; int[] rows = e.SourceGridViewObj.GetSelectedRows(); foreach (int rowIndex in rows) { // 拖动多行,所以明细数据改为动态查询 DataRow rowItem = e.SourceGridViewObj.GetDataRow(rowIndex); this.RefreshSourceDetail(tabPage.Tag as BillSourceUnionModel); DataTable details = BillImpl.GetDataTableResult(ReplaceHelper.ReplaceRowParam(rowItem, unionModel.ModelObj.DetailSql)); if (unionModel.GridDetailControlObj.GridView != null && rowIndex == FocuseIndex) details = unionModel.GridDetailControlObj.GridView.GetGridViewFilteredAndSortedDataToDataTable(); //details = GetGridViewFilteredAndSortedDataToDataTable(unionModel.GridDetailControlObj.GridView); //DataTable details = unionModel.GridDetailControlObj.GridView.DataController.GetAllFilteredAndSortedRows().OfType().CopyToDataTable(); this.ControlObj.SetAllControlValue(rowItem, true); if (unionModel.ModelObj.CadDragDetail) { this.AddMultiRowToGridView(details, unionModel); } } } } } catch (Exception ex) { LogHelper.Instance.WriteError(ex); LogUtil.WriteError("单据来源表格拖拽完出错!", ex); MessageUtil.Show(ResourceKeys.OperFault); } } /// /// 说明:新增单据 /// 创建人:龚宇超 /// 创建日期:2017-12-14 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void OnBillAddClick(object sender, EventArgs e) { if (!this.BillModel.SaveState && this.gcMain.DataRowCount() > 0) { DialogResult result = MessageUtil.Show(("数据未保存,是否确定新建单据?"), MessageBoxButtons.YesNo); if (result == DialogResult.Yes) { this.SetBillStatus(null); this.ControlObj.ResetControlValue(); } } else { this.SetBillStatus(null); this.ControlObj.ResetControlValue(); } } /// /// 说明:删除明细记录 /// 创建人:龚宇超 /// 创建日期:2017-12-05 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void OnDeleteClick(object sender, EventArgs e) { try { int[] rows = this.gcMain.GridView.GetSelectedRows(); if (rows.Length < 1) return; DataTable dt = this.gcMain.GridView.GetGridViewFilteredAndSortedDataToDataTable(); if (string.IsNullOrEmpty(BillModel.DeleteDetailCond)) { DialogResult result = MessageUtil.Show(string.Format(ResourceKeys.DeleteRows, rows.Length), MessageBoxButtons.YesNo); if (result == DialogResult.Yes) { //保存删除的行和对应的行号 ToWithdrawRows.Clear(); for (int i = 0; i < rows.Length; i++) { DataRow rowItem = this.gcMain.GridView.GetDataRow(rows[i]); DataRow dr = dt.NewRow(); dr.ItemArray = rowItem.ItemArray; ToWithdrawRows.Add(rows[i], dr); } ////获得要删除RemoveRowitem中的内容的关联字段 //List deleteRowslist = new List(); //foreach (int rowIndex in rows) //{ // DataRow rowItem = this.gcMain.GridView.GetDataRow(rowIndex); // deleteRowslist.Add(rowItem[AssociatedField].ToString()); //} ////删除RemoveRowitem中的内容 //foreach (string key in deleteRowslist) { // //RemoveRowitem.Remove(); // //DataRow i = (DataRow)RemoveRowitem.Cast().Where(x => x[AssociatedField].ToString().Equals(key)); // for (int i=0;i< RemoveRowitem.Count;i++) { // string removeKey = RemoveRowitem[i][AssociatedField].ToString(); // if (removeKey.Equals(key)) { // RemoveRowitem.RemoveAt(i); // break; // } // } //} this.gcMain.GridView.Columns.ClearAllSort(); this.gcMain.GridView.DeleteSelectedRows(); this.gcMain.GridView.ClearSelection(); this.gcMain.GridView.SelectRow(this.gcMain.GridView.FocusedRowHandle); this.gcMain.GridControl.DataSourceTable().OrderBy(this.BillModel.DetailOrderField); } } else { string successMsg = string.Empty, faultMsg = string.Empty; string deleteCond = this.ControlObj.ReplaceParentControlValue(BillModel.DeleteDetailCond); List deleteRows = new List(); List faultInts = new List(); //删除RemoveRowitem中的内容的关联字段 //List deleteRowslist = new List(); ToWithdrawRows.Clear();//清空上一次记录的删除行 foreach (int rowIndex in rows) { DataRow rowItem = this.gcMain.GridView.GetDataRow(rowIndex); string deleteCond2 = ReplaceHelper.ReplaceRowParam(rowItem, deleteCond); if (ReplaceHelper.EvalCond(deleteCond2)) { deleteRows.Add(rowItem); //deleteRowslist.Add(rowItem[AssociatedField].ToString()); DataRow dr = dt.NewRow(); dr.ItemArray = rowItem.ItemArray; ToWithdrawRows.Add(rowIndex, dr); } else { faultInts.Add(rowIndex); } } DataTable table = this.gcMain.GridControl.DataSourceTable(); foreach (DataRow item in deleteRows) { table.Rows.Remove(item); } //删除RemoveRowitem中的内容 //foreach (string key in deleteRowslist) //{ // for (int i = 0; i < RemoveRowitem.Count; i++) // { // string removeKey = RemoveRowitem[i][AssociatedField].ToString(); // if (removeKey.Equals(key)) // { // RemoveRowitem.RemoveAt(i); // break; // } // } //} if (faultInts != null && faultInts.Count > 0) { MessageUtil.Show("发现如下:" + string.Join(",", faultInts.ToArray()) + "行不满足条件无法删除!"); } else { MessageUtil.Show("删除成功!"); } } return; } catch (Exception ex) { LogHelper.Instance.WriteError(ex); } } /// /// 说明:单据保存 /// 创建人:龚宇超 /// 创建日期:2017-12-07 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void OnBillSaveClick(object sender, EventArgs e) { try { if (this.BillSave()) { ToWithdrawRows.Clear(); this.RefreshSelectedSource(); } } catch (Exception ex) { MessageUtil.Show(ex); } } /// /// 说明:单据保存提交 /// 创建人:龚宇超 /// 创建日期:2017-12-07 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void OnBillApplyClick(object sender, EventArgs e) { try { DialogResult result = MessageUtil.Show(ResourceKeys.BillApply, MessageBoxButtons.YesNo); if (result == DialogResult.Yes) { if (this.BillSave(0, false)) { ToWithdrawRows.Clear(); this.BillApply(""); } } return; } catch (Exception ex) { MessageUtil.Show(ex); } } /// /// 说明:分割条移动保存位置 /// 创建人:龚宇超 /// 创建日期:2018-03-06 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void OnTopSplitterMoved(object sender, EventArgs e) { if (this._isInitFinish)// 是否为初始化创建 { IniHelper.Write(string.Format("bill_width_{0}", this.SysModel.ModuleCode), this.ssc_main_top.SplitterPosition + ""); } } /// /// 说明:分割条移动保存位置 /// 创建人:龚宇超 /// 创建日期:2018-03-06 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void OnMainSplitterMoved(object sender, EventArgs e) { if (this._isInitFinish) { IniHelper.Write(string.Format("bill_height_{0}", this.SysModel.ModuleCode), this.ssc_main.SplitterPosition + ""); } } /// /// 说明:单据来源查询之前处理 /// 创建人:龚宇超 /// 创建日期:2018-03-06 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. /// The e. private void OnSearchBefore(object sender, SearchArgs e) { // 用户搜索时不加载右侧控件值,只有点击、人为选中行在加载右侧控件值. this._isLoadRightControlValue = false; XtraTabPage tabPage = this.xtc_left_container.SelectedTabPage; BillSourceUnionModel unionModel = tabPage.Tag as BillSourceUnionModel; if (!unionModel.SearchObj.VerifyNull()) { e.Continue = false; } } /// /// 说明:单据来源查询完成 /// 创建人:龚宇超 /// 创建日期:2018-03-06 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. /// private void OnSearchAfterd(object sender, EventArgs e) { this._isLoadRightControlValue = true; XtraTabPage tabPage = this.xtc_left_container.SelectedTabPage; BillSourceUnionModel unionModel = tabPage.Tag as BillSourceUnionModel; if (unionModel.ModelObj.SourceType == 1) { if (unionModel.TreeViewObj != null && unionModel.SearchObj.MainGridEx != null) { string sql = ReplaceHelper.ReplaceUserInfo(unionModel.SearchObj.MainGridEx.LastSearchSql); sql = this.ControlObj.ReplaceControlValue(sql); unionModel.SearchObj.MainGridEx.SetGridViewDataSource(BaseImpl.GetDataTableResult(sql)); } } else { if (unionModel.GridControlObj != null) { string sql = ReplaceHelper.ReplaceUserInfo(unionModel.GridControlObj.LastSearchSql); if (SubstringCount(sql, "#") > 1) { string fixedSql = sql.Substring(sql.IndexOf('#'), sql.LastIndexOf('#') + 1 - sql.IndexOf('#')); string billMainCode = sql.Substring(sql.IndexOf('#'), sql.LastIndexOf('#') + 1 - sql.IndexOf('#')).Replace("#", ""); var paramList = ReplaceHelper.GetParamFields(billMainCode); bool isCondReplace = true; foreach (string item in paramList) { string field = item.Replace("{", "").Replace("}", ""); if (ControlObj.FindControl(field) != null) { string value = ControlObj.GetControlValue(field); if (string.IsNullOrEmpty(value)) isCondReplace = false; billMainCode = billMainCode.Replace(item, value); } } if (!isCondReplace) { sql = sql.Replace(fixedSql, "1=1"); } else { sql = sql.Replace(fixedSql, billMainCode); } } sql = this.ControlObj.ReplaceControlValue(sql); unionModel.GridControlObj.gridControl.DataSource = BaseImpl.GetDataTableResult(sql); if (unionModel.ModelObj.SourceType == 0 && unionModel.SearchObj.GridRowCount > 0) tabPage.Text = unionModel.ModelObj.UserName + "(" + unionModel.SearchObj.GridRowCount + "条)"; RefreshSourceDetail(unionModel); } } } /// /// 说明:判断字符串出现次数 /// 创建人:龚宇超 /// 创建日期: /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The string. /// The substring. /// System.Int32. private static int SubstringCount(string str, string substring) { if (str.Contains(substring)) { string strReplaced = str.Replace(substring, ""); return (str.Length - strReplaced.Length) / substring.Length; } return 0; } /// /// 说明:帮助文档 /// 创建人:龚宇超 /// 创建日期:2020-01-15 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. /// The instance containing the event data. private void OnHelpClick(object sender, EventArgs e) { WebBrowserUtil.StartWebBrowser(this.SysModel.ModuleCode, this.BillModel.TypeName); } FrmBaseSelect frmSelect = new FrmBaseSelect(); /// /// 说明:分配明细 /// 创建人:龚宇超 /// 创建日期:2020-01-15 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void OnBtnFPClick(object sender, EventArgs e) { try { DataRow rowItem = this.gcMain.GridView.GetFocusedDataRow(); if (rowItem == null) { MessageUtil.Show("请先选择一条明细在进行分配!"); return; } DataTable table = this.gcMain.GridControl.DataSource as DataTable; if (!table.Columns.Contains(guidField)) { table.Columns.Add(guidField, typeof(String)); } rowItem[guidField] = Guid.NewGuid().ToString(); ; if (!string.IsNullOrEmpty(mRecordPrimaryField) && table.Columns.Contains(this.mRecordPrimaryField)) { // 检查数据是否为分配后的行 if (!string.IsNullOrEmpty(rowItem[this.mRecordPrimaryField] + "")) { MessageUtil.Show("该行数据为已分配后的数据,无需分配!"); return; } } string[] args = { this.SysModel.FormText, this.SysModel.UserId, this.SysModel.UserName, this.SysModel.Privilege, this.SysModel.ModuleCode, this.SysModel.ModuleId + "", this.BillModel.PopupUnionCode, "1000" }; DynamicBaseSelectModel baseModel = new DynamicBaseSelectModel(args); frmSelect = new FrmBaseSelect(baseModel, this.ControlObj, this.gcMain); //if (frmSelect.SelectRowItem == null) //{ // frmSelect = new FrmBaseSelect(baseModel, this.ControlObj, this.gcMain); //} frmSelect.Text = this.BillModel.TypeName; frmSelect.SelectRowItem = rowItem; bool isNextOne = false; if (!string.IsNullOrEmpty(mRecordPrimaryField)) { frmSelect.FpRows = table.Rows.Cast().Where(x => (rowItem[guidField] + "").Equals(x[guidField] + "")).ToArray(); if (frmSelect.FpRows != null && frmSelect.FpRows.Length > 0) { List rows = frmSelect.FpRows.ToList(); rows.Remove(rowItem); frmSelect.FpRows = rows.ToArray(); } if (table.Columns.Contains(mRecordPrimaryField)) { frmSelect.FpOtherRows = table.Rows.Cast().Where(x => !(rowItem[guidField] + "").Equals(x[guidField] + "") && !string.IsNullOrEmpty(x[mRecordPrimaryField] + "")).ToArray(); } } if (frmSelect.ShowDialog() == DialogResult.OK && frmSelect.SelectedRows != null && frmSelect.SelectedRows.Length > 0) { //if (frmSelect.isNextOne) //{ // isNextOne = true; //} //else //{ // isNextOne = false; //} // 增加标识列 if (!table.Columns.Contains(frmSelect.RecordPrimaryField)) { this.mRecordPrimaryField = frmSelect.RecordPrimaryField; table.Columns.Add(this.mRecordPrimaryField, typeof(String)); } foreach (DataRow item in frmSelect.SelectedRows) { DataRow newRow = table.NewRow(); newRow.ItemArray = rowItem.ItemArray; newRow[guidField] = rowItem[guidField]; foreach (DataColumn col in item.Table.Columns) { if (table.Columns.Contains(col.ColumnName)) { newRow[col.ColumnName] = item[col.ColumnName]; } } newRow[frmSelect.AmountField] = item[frmSelect.AmountField]; newRow[frmSelect.RecordPrimaryField] = item[frmSelect.RecordPrimaryField]; table.Rows.Add(newRow); } NumberMc = frmSelect.AmountField; //double syAmount = frmSelect.GetSyAmount(); //if (syAmount > 0) //{ // rowItem[frmSelect.AmountField] = frmSelect.GetSyAmount(); //} //else //{ // table.Rows.Remove(rowItem); //} table.Rows.Remove(rowItem); // 重排顺序 table.OrderBy(this.BillModel.DetailOrderField); this.gcMain.GridView.UpdateCurrentRow(); this.gcMain.GridView.ShowEditor(); } if (frmSelect.isNextOne) { int SourceRowIndex = this.gcMain.GridView.GetFocusedDataSourceRowIndex(); DataRow[] a = table.Rows.Cast().Where(x => string.IsNullOrEmpty(x[guidField].ToString())).ToArray(); if (a.Length != 0) { this.gcMain.GridView.FocusedRowHandle = SourceRowIndex; OnBtnFPClick(sender, e); } else { MessageUtil.Show("全部分配完毕"); // frmSelect.SelectRowItem = null; } } } catch (Exception ex) { MessageUtil.Show(ex); } } private void cb_templete_QueryCloseUp(object sender, CancelEventArgs e) { this.SetTempSelect(true); } #endregion #region 单据快速录入相关 /// /// 说明:快速录入明细 /// 创建人:龚宇超 /// 创建日期:2019-08-05 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void InputGridView() { try { WaitForm.ShowForm(); string inputText = txt_input.Text.Trim(); ComboBoxEditModel editObj = cb_input.SelectedItem as ComboBoxEditModel; if (string.IsNullOrWhiteSpace(inputText)) { MessageUtil.Show(ResourceKeys.KeyWordNotNull); return; } if (editObj != null) { DataTable table = BaseImpl.GetDataTableResult(ReplaceHelper.ReplaceSearchControlCond(editObj.SourceModel.CodeInputSql, inputText)); if (table.Rows.Count == 0) { MessageUtil.Show(ResourceKeys.NotFoundKeyWord); return; } else { bool onlyPopup = false; foreach (DataRow rowItem in table.Rows) { this.AddRowToGridView(rowItem); this.AddRowToGridViewByBom(rowItem, editObj.UnionModel, ref onlyPopup); } } } } catch (Exception ex) { MessageUtil.Show(ex); LogUtil.WriteError("单据快速录入明细出错!", ex); } finally { WaitForm.HideForm(); } } /// /// 说明:单据快速录入 /// 创建人:龚宇超 /// 创建日期:2018-04-19 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void OnInputClick(object sender, EventArgs e) { this.InputGridView(); } /// /// 说明: /// 创建人:龚宇超 /// 创建日期:2019-08-05 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. /// The instance containing the event data. private void OnInputKeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { this.InputGridView(); this.txt_input.EditValue = ""; this.txt_input.Focus(); } } #endregion #region 单据模版录入相关 private void SetTempSelect(bool isTip) { ComboBoxEditModel model = this.cb_templete.SelectedItem as ComboBoxEditModel; if (model != null) { bool isExec = true; DataTable detailTable = gcMain.GridControl.DataSourceTable(); if (detailTable != null && detailTable.Rows.Count > 0 && isTip) { DialogResult result = XtraMessageBox.Show("确定要切换模版?\r\n注:切换模版会清空明细数据.", "系统提示", MessageBoxButtons.YesNo); isExec = result == DialogResult.Yes; } if (isExec) { if (isExec) { string title = model.RowItem["rpname"] + ""; string brpId = model.RowItem["id"] + ""; // 设置标题 this.Parent.Text = title; // 清空明细 detailTable.Clear(); // 设置主表固定字段 LabelTextEdit textEdit = this.ControlObj.FindControl("brpid") as LabelTextEdit; if (textEdit == null) { MessageUtil.Show(ResourceKeys.NotFountBrpID); return; } textEdit.EditText = brpId; // 重新设置明细列 DataTable columns = BillImpl.GetBillDetailBrpColumns(brpId); if (columns != null && columns.Rows.Count > 0) gcMain.SetEditColumns(columns); else gcMain.GridView.Columns.Clear(); } } } } /// /// 说明:初始化Brp模版 /// 创建人:龚宇超 /// 创建日期:2018-04-20 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void InitializeTemplete() { DataTable table = BillImpl.GetBillBrp(this.SysModel.ModuleCode); List tempModels = new List(); foreach (DataRow item in table.Rows) { ComboBoxEditModel editModel = new ComboBoxEditModel() { ValuemMeber = "id", TextMember = "RpName", RowItem = item }; this.cb_templete.Properties.Items.Add(editModel); tempModels.Add(editModel); } this.cb_templete.Tag = tempModels; } /// /// 说明:设置Brp模版 /// 创建人:龚宇超 /// 创建日期:2018-04-23 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void SetTempleteSelectedValue(string id) { List tempModels = this.cb_templete.Tag as List; if (tempModels != null) { ComboBoxEditModel model = tempModels.Find(x => id.Equals(x.RowItem[x.ValuemMeber] + "")); if (model == null) gcMain.GridView.Columns.Clear(); else { this.cb_templete.SelectedItem = model; this.SetTempSelect(false); } } } /// /// 说明:手动选择模版 /// 创建人:龚宇超 /// 创建日期:2018-04-23 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void OnTempleteClick(object sender, EventArgs e) { this._isSelectedTemplete = true; } /// /// 说明:单据选中/取消选中数据 /// 创建人:龚宇超 /// 创建日期:2020-05-12 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. /// The instance containing the event data. private void OnGridViewIsCheckClick(object sender, RowCellClickEventArgs e) { try { DataRow rowItem = (sender as GridView).GetFocusedDataRow(); if (rowItem != null && e.Column.FieldName == "_check") { rowItem["_check"] = "True".Equals(rowItem["_check"] + "") ? 0 : 1; rowItem.AcceptChanges(); } } catch (Exception) { } } #endregion } }