using DevExpress.Utils;
using DevExpress.XtraEditors;
using DevExpress.XtraGrid.Columns;
using DevExpress.XtraGrid.Views.Grid;
using DevExpress.XtraTab;
using Lskj.Business;
using Lskj.Business.Impl;
using Lskj.Control;
using Lskj.Control.Model;
using Lskj.Data;
using Lskj.Model;
using Lskj.PubMrpAnalyze.Model;
using Lskj.Util;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Lskj.PubMrpAnalyze
{
public partial class MrpAnalyzeMain : UserControl
{
#region 公共变量
///
/// 主程序的基础模型
///
public ModuleModel MoudleMainObj;
///
/// 主程序明细的基础模型
///
public ModuleModel MoudleDetailObj;
public GridDetailModel GridDetailModel;
///
/// 主程序明细的明细基础模型
///
public ModuleModel MoudleDetailBottomObj;
public GridDetailModel GridDetailBottomModel;
///
/// mrp动态链接库
///
public DynamicMrpAnalyzeModel Model;
#endregion
#region 私有变量
#region 主表控件私有变量
///
/// 主表明细key值
///
private string _primaryMainKey;
///
/// 主表明细keyvalue值
///
private string _keyMainValue;
///
///主表条件控件
///
public MyControl SearchMainObj;
#endregion
#region 主表明细私有变量
///
/// 主表明细key值
///
private string _primaryDetailKey;
///
/// 主表明细keyvalue值
///
private string _keyDetailValue;
///
///主表明细条件控件
///
public MyControl SearchDetailObj;
#endregion
#region 主表明细的明细私有变量
///
/// 主表明细key值
///
private string _primaryDetailBottomKey;
///
/// 主表明细keyvalue值
///
private string _keyDetailBottomValue;
///
///主表条件控件
///
public MyControl SearchDetailBottomObj;
#endregion
///
/// 主表明细
///
private List gridDetailModels;
///
/// 明细拖拽行
///
private Dictionary> gridDragRows = new Dictionary>();
///
/// 明细不包含对象
///
private List mainNotInRows = new List();
///
/// 是否已经执行行改变事件并刷新明细数据
///
private bool isFocusedRowChanged = true;
private HashSet mrpDragCopyViews = new HashSet();
#endregion
public MrpAnalyzeMain()
{
InitializeComponent();
}
#region 方法
///
/// 说明:窗口加载
/// 创建人:王一帆
/// 创建日期:2022-12-08
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The sender.
/// The instance containing the event data.
public void OnLoad(DynamicMrpAnalyzeModel _model)
{
WaitForm.ShowForm();
try
{
this.Model = _model;
if (this.Model != null)
{
this.Model.IsDetailSearch = true;
}
if (SystemInfo.Instance.MrpTabPageType.Equals("1"))
{
this.Tab_Left_main.TabPages.Clear();
this.Tab_Left_main.TabPages.Add(this.xtraTabpageDeatil);
this.Tab_Left_main.TabPages.Add(this.xtraTabpageMain);
ERPInfo.Instance.MrpTag = "1";
}
else
{
ERPInfo.Instance.MrpTag = "0";
}
InitlizeTabControlEvent();
InitilizeSplitEvent();
InitilizeSplitPostion();
//初始化主表数据
this.InitilizeGridViewEvent();
this.InitializeMain();
//this.InitializeGridDragGrid();
//this.InitializeDeleteRightMenu();
}
catch (Exception ex)
{
LogHelper.Instance.WriteError(ex, ResourceKeys.BaseModule);
//MessageUtil.Show(ex.Message + "\r\n" + ex.StackTrace);
string Message = ErrorMessage.PromptErrorMessage(ex);
MessageUtil.Show(Message, ex.Message);
}
finally
{
}
WaitForm.HideForm();
}
///
/// 说明:主界面模块构造
/// 创建人:王一帆
/// 创建日期:2022-12-08
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
public void InitializeMain()
{
this.MoudleMainObj = new ModuleModel(MainImpl.GetSystemdllTab(Model.ModuleCode));//获取主模块构建类
if (!string.IsNullOrEmpty(this.MoudleMainObj.MenuText)) this.xtraTabpageMain.Text = this.MoudleMainObj.MenuText;
DataTable moduleDetailTable = BaseModuleImpl.GetBaseDetailPages(this.Model.ModuleCode);//获取所有主表配置明细
string queryTableCacheKey = this.MoudleMainObj.CondKey + "_queryTable";
DataTable queryTable = Manager.cacheDic.ContainsKey(queryTableCacheKey) ? Manager.cacheDic[queryTableCacheKey] : BaseModuleImpl.GetCustomQueryFields(this.MoudleMainObj.CondKey);//获取主模块构建的条件
DataTable gridColumns = BaseModuleImpl.GetBaseGridColumns(this.Model.ModuleCode);
this.gm_Control.SetReadOnlyColumns(gridColumns, GridCustomColumnStruct.BaseMainGridView + this.MoudleMainObj.FormKey);
this.MoudleMainObj.ParmaryKey = _primaryMainKey = BaseImpl.GetBasePrimaryKey(Model.ModuleCode);
this.SearchMainObj = new MyControl(this.MoudleMainObj.MenuSql, gm_Control, null, null, null);//替换sql语句中的bmp字段
this.SearchMainObj.OnDataSourceBindCallBack += OnSearchMainObjDataSourceBindCallBack;
this.gm_Control.SetGridRightMenus(BaseModuleImpl.GetBaseGridRightMenus(MoudleMainObj.ModeCode), this.Model, OnRefreshMainData, this.SearchMainObj);
this.SearchMainObj.OnSearchAfterCallBack += new EventHandler(OnSearchAfterRefreshDetail);
//this.SearchMainObj.OnSearchBeforeCallBack += new SearchEventHandler(OnSearchMainBefore);
//配置设置模块自动搜索
this.SearchMainObj.OnDataSourceBindCallBack += new EventHandler(OnControlObjOnDataSourceBindCallBack);
if (queryTable != null && queryTable.Rows.Count > 0)
{
// 加载自定义查询条件
this.plm_top_cond.Controls.Clear();
this.SearchMainObj.InitSearchControl(queryTable, this.plm_top_cond, null);
}
else
{
// 加载固定查询条件
DataTable table = BaseModuleImpl.GetFixedQueryFields(this.Model.ModuleCode);//加载固定查询条件
this.plm_top_cbField.DisplayMember = "fieldText";
this.plm_top_cbField.ValueMember = "fieldName";
this.plm_top_cbField.DataSource = table;
this.SearchMainObj.InitDefaultSearchControl(table, this.plm_top_cond, this.plm_top_cbField.Name, this.plm_top_txtFixKey.Name, this.plm_top_btnFixSearch.Name);
}
InitializeDeatil(moduleDetailTable);
}
///
/// 主条件
///
///
///
private void OnSearchMainObjDataSourceBindCallBack(object sender, EventArgs e)
{
this.SearchMainObj.SearchGrid();
}
///
/// 说明:明细模块构造
/// 创建人:王一帆
/// 创建日期:2022-12-08
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
public void InitializeDeatil(DataTable dataTable)
{
if (dataTable == null) return;
gridDetailModels = new List();//表格明细对象的集合
foreach (DataRow item in dataTable.Rows)
{
GridDetailModel gridDetailModel = new GridDetailModel(item);
this.GridDetailModel = gridDetailModel;
if (int.Parse(item["orderId"] + "") == 0)//任务一:加载明细应用池(检查是否有明细并绑定事件)
{
string moduleCode = gridDetailModel.UnionModule;
this.MoudleDetailObj = new ModuleModel(MainImpl.GetSystemdllTab(moduleCode));//获取模块构建类
if (!string.IsNullOrEmpty(this.MoudleDetailObj.MenuText)) this.xtraTabpageDeatil.Text = this.MoudleDetailObj.MenuText;
this.tcMain.MrpParentGridEx = this.gd_LeftTop;
this.tcMain.MrpParentGridEx.GridView.Tag = this.MoudleDetailObj;
DataTable moduleDetailTable = BaseModuleImpl.GetBaseDetailPages(moduleCode);//获取配置明细
string queryTableCacheKey = this.MoudleDetailObj.CondKey + "_queryTable";
DataTable queryTable = Manager.cacheDic.ContainsKey(queryTableCacheKey) ? Manager.cacheDic[queryTableCacheKey] : BaseModuleImpl.GetCustomQueryFields(this.MoudleDetailObj.CondKey);//获取模块构建的条件
DataTable detailGridColumns = BaseModuleImpl.GetBaseGridColumns(moduleCode);
this.gd_LeftTop.SetReadOnlyColumns(detailGridColumns, gridDetailModel.GridCustomColumnKey);
this.MoudleDetailObj.ParmaryKey = _primaryDetailKey = BaseImpl.GetBasePrimaryKey(moduleCode);
this.SearchDetailObj = new MyControl(this.MoudleDetailObj.MenuSql, gd_LeftTop, null, null, null);//替换sql语句中的bmp字段
this.SearchDetailObj.OnDataSourceBindCallBack += OnSearchDetailObjDataSourceBindCallBack;
this.gd_LeftTop.SetGridRightMenus(BaseModuleImpl.GetBaseGridRightMenus(MoudleDetailObj.ModeCode), this.Model, OnRefreshDetailData, this.SearchDetailObj);
this.gd_LeftTop.GridView.FocusedRowObjectChanged += GridView_FocusedRowObjectChanged;
this.SearchDetailObj.OnDataSourceBindCallBack += new EventHandler(OnControlObjOnDataSourceBindCallBack);
//this.SearchDetailObj.OnSearchBeforeCallBack += new SearchEventHandler(OnSearchDetailBefore);
if (queryTable != null && queryTable.Rows.Count > 0)
{
// 加载自定义查询条件
this.pld_top_cond.Controls.Clear();
this.SearchDetailObj.InitSearchControl(queryTable, this.pld_top_cond, null);
}
else
{
// 加载固定查询条件
DataTable table = BaseModuleImpl.GetFixedQueryFields(gridDetailModel.UnionModule);//加载固定查询条件
this.pld_top_cbField.DisplayMember = "fieldText";
this.pld_top_cbField.ValueMember = "fieldName";
this.pld_top_cbField.DataSource = table;
this.SearchDetailObj.InitDefaultSearchControl(table, this.pld_top_cond, this.pld_top_cbField.Name, this.pld_top_txtFixKey.Name, this.pld_top_btnFixSearch.Name);
}
InitializeDetailBottom(moduleDetailTable, moduleCode);
}
else
{
gridDetailModels.Add(gridDetailModel);
}
}
InitializePages(gridDetailModels);//构建右边的明细数据
this.SetDetailGridDataSource();
}
private void OnSearchDetailObjDataSourceBindCallBack(object sender, EventArgs e)
{
this.SearchDetailObj.SearchGrid();
}
///
/// 说明:明细的明细模块构造
/// 创建人:王一帆
/// 创建日期:2022-12-08
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
public void InitializeDetailBottom(DataTable dataTable, string _moduleCode)
{
if (dataTable == null || dataTable.Rows.Count == 0)
{
this.pld_Bottom.Visible = false;
this.splitLeftTopControl.PanelVisibility = SplitPanelVisibility.Panel1;
return;
}
if (dataTable.Rows.Count > 0)
{
DataRow item = dataTable.Rows[0];
GridDetailModel gridDetailModel = new GridDetailModel(item);
DynamicModel dyncModel = new DynamicModuleModel(new string[] { gridDetailModel.DetailName, ERPInfo.Instance.UserId, ERPInfo.Instance.UserName, this.Model.Privilege, gridDetailModel.UnionModule, "0" });
DataRow moduleInformation = MainImpl.GetSystemdllTab(gridDetailModel.UnionModule);
if (moduleInformation == null)
{
MessageUtil.Show("没有找到编号为" + gridDetailModel.UnionModule + "的模块信息");
return;
}
gridDetailModel.SystemModel = new ModuleModel(moduleInformation);
this.GridDetailBottomModel = gridDetailModel;
string moduleCode = gridDetailModel.UnionModule;
this.MoudleDetailBottomObj = new ModuleModel(MainImpl.GetSystemdllTab(moduleCode));//获取模块构建类
this.tcMain.MrpDetailGridEx = this.gd_LeftBottom;
this.tcMain.MrpDetailGridEx.GridView.Tag = MoudleDetailBottomObj;
string queryTableCacheKey = this.MoudleDetailBottomObj.CondKey + "_queryTable";
DataTable queryTable = Manager.cacheDic.ContainsKey(queryTableCacheKey) ? Manager.cacheDic[queryTableCacheKey] : BaseModuleImpl.GetCustomQueryFields(this.MoudleDetailBottomObj.CondKey);//获取模块构建的条件
DataTable detailGridColumns = BaseModuleImpl.GetBaseGridColumns(moduleCode);
this.gd_LeftBottom.SetReadOnlyColumns(detailGridColumns, gridDetailModel.GridCustomColumnKey);
this.MoudleDetailBottomObj.ParmaryKey = _keyDetailBottomValue = BaseImpl.GetBasePrimaryKey(moduleCode);
this.SearchDetailBottomObj = new MyControl(this.MoudleDetailBottomObj.MenuSql, this.gd_LeftBottom, null, null, null);
this.gd_LeftBottom.SetGridRightMenus(BaseModuleImpl.GetBaseGridRightMenus(MoudleDetailBottomObj.ModeCode), this.Model, OnRefreshDetailBottomData, this.SearchDetailBottomObj);
//this.SearchDetailBottomObj.OnSearchBeforeCallBack += new SearchEventHandler(OnSearchDetailBottomBefore);
if (queryTable != null && queryTable.Rows.Count > 0)
{
// 加载自定义查询条件
this.pld_top_detail_cond.Controls.Clear();
this.SearchDetailBottomObj.InitSearchControl(queryTable, this.pld_top_detail_cond, null);
}
else
{
// 加载固定查询条件
DataTable table = BaseModuleImpl.GetFixedQueryFields(gridDetailModel.UnionModule);//加载固定查询条件
this.pld_top_detail_cbField.DisplayMember = "fieldText";
this.pld_top_detail_cbField.ValueMember = "fieldName";
this.pld_top_detail_cbField.DataSource = table;
this.SearchDetailBottomObj.InitDefaultSearchControl(table, this.pld_top_detail_cond, this.pld_top_detail_cbField.Name, this.pld_top_detail_txtFixKey.Name, this.pld_top_detail_btnFixSearch.Name);
}
}
}
///
/// 说明:初始化底部多标签数据
/// 创建人:王一帆
/// 创建日期:2022-12-06
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
protected void InitializePages(List details)
{
if (details == null || details.Count == 0)
{
this.splitLeftControl.PanelVisibility = SplitPanelVisibility.Panel1;
}
else
{
//this.InitlizeSpiltLocation();
this.tcMain.Model = this.Model;
this.tcMain.DrgaParentPrimaryKey = this.MoudleMainObj.ParmaryKey;
this.tcMain.IsDragDetail = false;
this.tcMain.ParentGridEx = this.gm_Control;
this.tcMain.OnMrpBtnClickCallback += new EventHandler(OnGridEx_RightGridCallBack);
this.tcMain.InitTabPages(details);
this.tcMain.OnRightCallback += new EventHandler(OnGridViewRightCallBack);
this.tcMain.OnMrpDragCallback += new EventHandler(OnTcMain_OnMrpDragCallBack);
//明细只有一个选项卡时是否隐藏
if (SystemInfo.Instance.HidingIndividualDetails)
{
this.tcMain.TabControlObj.ShowTabHeader = this.tcMain.TabControlObj.TabPages.Count == 1 ? DefaultBoolean.False : DefaultBoolean.Default;
}
}
}
///
/// 说明:获取底部多标签数据
/// 创建人:王一帆
/// 创建日期:2022-12-06
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
public void SetDetailGridDataSource(XtraTabPage tabPage = null, DataRow rowItem = null, bool isNull = false)
{
//任务二:获取明细数据源刷新(仿照ModuleGridDetailEx)
try
{
WaitForm.ShowForm();
for (int i = 0; i < this.gridDetailModels.Count; i++)
{
XtraTabPage page = this.tcMain.TabControlObj.TabPages[i];
SetTabPageDataSource(page, isNull);
}
}
catch (Exception ex)
{
LogHelper.Instance.WriteError(ex);
string Message = ErrorMessage.PromptErrorMessage(ex);
MessageUtil.Show("加载明细数据失败!" + Message);
}
finally
{
WaitForm.HideForm();
}
}
///
/// 说明:设置表格数据
/// 创建人:龚宇超
/// 创建日期:2018-01-29
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The tab page.
/// The grid control.
private void SetTabPageDataSource(XtraTabPage tabPage, bool isNull = false)
{
if (isNull)
{
this.tcMain.SetGridDataSource(tabPage, new DataTable());
return;
}
GridDetailModel model = this.tcMain.GetGridDetailModel(tabPage);
DataRow rowItem = this.gm_Control.GetViewFocusedDataRow();
Object moduleObject = tabPage.Controls.Cast