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.Control.Model; using Lskj.Util; using Lskj.Model; using Lskj.Business.Impl; using DevExpress.XtraEditors; using Lskj.Business; namespace Lskj.PubMultipleDetail { public partial class FrmMain : BaseForm { public FrmMain() { InitializeComponent(); } #region 公共变量 /// /// 入口参数 /// public DynamicReportModel Model; /// /// 自定义查询条件 /// public MyControl SearchObj { get; private set; } /// /// 底部多标签表格数据 /// public List _gridDetail; /// /// 右键菜单执行后调用 /// /// The sender. public event EventHandler OnRightCallback; #endregion #region 私有变量 /// /// 明细模块所有表集合 /// /// The system model. public List gcExList = new List(); /// /// 系统模块实体对象 /// /// The system model. private ModuleModel SysModel; /// /// 搜索条件表 /// private DataTable _queryTable; #endregion /// /// 说明:窗口加载 /// 创建人:王一帆 /// 创建日期:2021-01-25 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The instance containing the event data. protected override void OnLoad(EventArgs e) { WaitForm.ShowForm(); try { this.InitializeControl(); this.InitializeSearch(); this.InitializeDeatil(); } catch (Exception ex) { LogHelper.Instance.WriteError(ex); //MessageUtil.Show(ex.StackTrace); string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message,ex.Message); } finally { Lskj.Control.Model.AutoSizeChange.ControllInitializeSize(this); WaitForm.HideForm(); } } #region 方法 #region 初始化绑定控件 /// /// 说明:初始化控件 /// 创建人:王一帆 /// 创建日期:2021-01-25 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The instance containing the event data. public void InitializeControl() { DataRow modelRow = MainImpl.GetSystemdllTab(this.Model.ModuleCode); if (modelRow == null) { MessageUtil.Show("模块编号[" + this.Model.ModuleCode + "],配置错误!\r\n该模块信息未找到!"); return; } this.SysModel = new ModuleModel(modelRow); this._queryTable = BaseModuleImpl.GetCustomQueryFields(this.SysModel.CondKey); } #endregion #region 初始化查询控件 /// /// 说明:初始化查询控件 /// 创建人:王一帆 /// 创建日期:2021-01-25 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The instance containing the event data. public void InitializeSearch() { bool fixedQuery = _queryTable == null || _queryTable.Rows.Count == 0; this.SearchObj = new MyControl(this.SysModel.MenuSql, null); this.SearchObj.OnSearchAfterCallBack += new EventHandler(OnSearchAfterCallBack); //this.SearchObj.ModuleId = Model.ModuleId; //this.SearchObj.ParentKeyField = this.ParentKeyField; //this.SearchObj.ParentUnionField = this.ParentUnionField; //// 明细表格默认不查询 //this.SearchObj.OnDataSourceBindCallBack += new EventHandler(OnMainSearchDataSourceBindCallBack); //if (!string.IsNullOrEmpty(ParentKeyValue) && !string.IsNullOrEmpty(DetailKeyField)) // this.SearchObj.WhereCond = string.Format(" and {0}='{1}'", DetailKeyField, ParentKeyValue); if (fixedQuery) { this.pl_top_fix_search.Visible = true; // 加载固定查询条件 DataTable table = BaseModuleImpl.GetFixedQueryFields(this.Model.ModuleCode); this.cbField.DisplayMember = "fieldText"; this.cbField.ValueMember = "fieldName"; this.cbField.DataSource = table; this.SearchObj.InitDefaultSearchControl(table, this.pl_top_master); } else { this.pl_top_fix_search.Visible = false; // 加载配置查询条件 this.SearchObj.OtherParams = Model.OtherParams(); this.pl_top_master.Height = this.SearchObj.InitSearchControl(_queryTable, this.pl_top_master, null); } } #endregion #region 获取明细 /// /// 说明:获取明细 /// 创建人:王一帆 /// 创建日期:2021-01-25 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// List<GridDetailModel>. private List GetDetails() { List details = new List(); DataTable table = BaseModuleImpl.GetBaseDetailPages(Model.ModuleCode); foreach (DataRow item in table.Rows) { DataTable gridColumns = ReportImpl.GetReportDetailColumns(Model.ModuleCode, item["id"] + ""); details.Add(new GridDetailModel(item, gridColumns, GridCustomColumnStruct.BaseDetailGridView)); } return details; } #endregion #region 加载明细列表 /// /// 说明:加载明细列表 /// 创建人:王一帆 /// 创建日期:2021-01-25 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. /// The e. public void InitializeDeatil() { this.gcExList.Clear(); this._gridDetail = GetDetails(); string DetaiName = string.Empty; int index = 1; int splitCount = 1; int detailCount = _gridDetail.Count; int width = this.Width / detailCount; SplitContainerControl splitMain = new SplitContainerControl(); SplitContainerControl SeletsplitMain = splitMain;//当前操作的分割框 splitMain.Dock = DockStyle.Fill; this.pl_Main.Controls.Add(splitMain); foreach (GridDetailModel model in this._gridDetail) { MultiplePage pl = new MultiplePage(); //page.Text = model.DetailName; pl.TitleLabelObj.Text = model.DetailName; if (model.IsChart) { ChartControlEx chartEx = new ChartControlEx(); chartEx.Dock = DockStyle.Fill; chartEx.SetCharts(BaseModuleImpl.GetChartParams(model.FormKey)); chartEx.SetChartRightMenus(BaseModuleImpl.GetBaseGridRightMenus(model.FormKey), this.Model, OnGridViewRightCallBack); chartEx.Tag = model; pl.Tag = chartEx; pl.CenterPabelObj.Controls.Add(chartEx); } else if (model.IsExcel) { ExcelControlEx excelEx = new ExcelControlEx(); excelEx.Dock = DockStyle.Fill; excelEx.Tag = model; pl.Tag = excelEx; pl.CenterPabelObj.Controls.Add(excelEx); } else if (model.IsWebView) { // 加载网页 string url = model.DetailSql.StartsWith("http") ? model.DetailSql : SystemInfo.Instance.OAUrl + model.DetailSql; ModuleWebView webView = new ModuleWebView(); webView.Dock = DockStyle.Fill; webView.Tag = model; webView.Navigate(ReplaceHelper.ReplaceUserInfo(url)); pl.Tag = webView; pl.CenterPabelObj.Controls.Add(webView); } else if (model.IsAddPanel) { // 加载添加界面 ModulePanelEx modulePanel = new ModulePanelEx(); modulePanel.Dock = DockStyle.Fill; modulePanel.PrimaryKey = BaseImpl.GetBasePrimaryKey(this.Model.ModuleCode); modulePanel.InitializeControl(new ModuleModel(MainImpl.GetSystemdllTab(this.Model.ModuleCode)), this.Model); //modulePanel.OnAddRecordCallBack += new EventHandler(OnAddRecordCallBack); //modulePanel.OnCloseCallback += new EventHandler(OnAddRecordCallBack); modulePanel.OperatePanelControlObj.Visible = false; modulePanel.SpeciesPanelControlObj.Visible = false; modulePanel.Tag = model; pl.Tag = modulePanel; pl.CenterPabelObj.Controls.Add(modulePanel); } else { if (model.IsReadOnly) { PanelControl plBottom = new PanelControl(); plBottom.Dock = DockStyle.Bottom; plBottom.Visible = false; PanelControl plMain = new PanelControl(); plMain.Dock = DockStyle.Fill; GridControlEx gridEx = new GridControlEx(); gridEx.Dock = DockStyle.Fill; gridEx.Tag = model; gridEx.Parent = plMain; gridEx.Model = this.Model; gridEx.SetReadOnlyColumns(model.GridColumns, model.GridCustomColumnKey); gridEx.SetGridRightMenus(BaseModuleImpl.GetBaseGridRightMenus(model.FormKey), this.Model, OnGridViewRightCallBack); gridEx.SetGridRowColors(BaseModuleImpl.GetBaseGridRowColors(model.FormKey)); // 加载配置查询条件 if (Model.IsDetailSearch) { plBottom.Visible = true; MyControl searchObj = new MyControl(model.DetailSql, gridEx); plBottom.Height = searchObj.InitSearchControl(BaseModuleImpl.GetCustomQueryFields(model.FormKey), plBottom); } pl.Tag = gridEx; pl.CenterPabelObj.Controls.AddRange(new PanelControl[] { plBottom, plMain }); } else { DynamicModel dyncModel = new DynamicModuleModel(new string[] { model.DetailName, ERPInfo.Instance.UserId, ERPInfo.Instance.UserName, this.Model.Privilege, model.UnionModule, "0" }); model.SystemModel = new ModuleModel(MainImpl.GetSystemdllTab(model.UnionModule)); if (Model != null) model.SystemModel.ParmaryKey = BaseImpl.GetBasePrimaryKey(Model.ModuleCode); ModuleGridEx gridEx = new ModuleGridEx(); gridEx.Name = "gridEx"; gridEx.IsDetail = true; gridEx.Dock = DockStyle.Fill; gridEx.OperShortMode = Model.IsDetailSearch; // 不显示简短模式 gridEx.VisibleSearchPanel = Model.IsDetailSearch; gridEx.VisibleOperPanel = !model.IsReadOnly; gridEx.InitializeControl(model.SystemModel, dyncModel); gridEx.GridControlObj.Tag = model; gridEx.ParentKeyField = string.IsNullOrEmpty(model.UnionParentField) ? model.SystemModel.ParmaryKey : model.UnionParentField; gridEx.DetailKeyField = model.UnionValue; gridEx.GridControlObj.ParentControl = gridEx.SearchObj; if (model.AutoRefresh) gridEx.SearchObj.SearchGrid(); pl.Tag = gridEx.GridControlObj; pl.CenterPabelObj.Controls.Add(gridEx); } pl.Dock = DockStyle.Fill; if (index - splitCount == 1) { SeletsplitMain.Panel2.Controls.Add(pl); } else { SeletsplitMain.Panel1.Controls.Add(pl); } SeletsplitMain.SplitterPosition = width; gcExList.Add(pl.Tag as GridControlEx); if (detailCount - splitCount > 1) { SplitContainerControl newSplitMain = new SplitContainerControl();//新建分隔框 newSplitMain.Dock = DockStyle.Fill; SeletsplitMain.Panel2.Controls.Add(newSplitMain); SeletsplitMain = newSplitMain; splitCount++; } index++; } } } #endregion #endregion #region /// /// 说明: /// 创建人:王一帆 /// 创建日期:2021-01-25 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. /// The instance containing the event data. protected void OnGridViewRightCallBack(object sender, EventArgs e) { if (this.OnRightCallback != null) this.OnRightCallback(sender, e); } #endregion #region 事件 #region 搜索之前 /// /// 说明:搜索之前 /// 创建人:王一帆 /// 创建日期:2021-01-25 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. /// The e. protected void OnSearchAfterCallBack(object sender, EventArgs e) { try { foreach (GridControlEx gcMain in gcExList) { GridDetailModel model = gcMain.Tag as GridDetailModel; string sqlValue = model.IsReadOnly || model.IsChart ? model.DetailSql : model.SystemModel.MenuSql; sqlValue = this.SearchObj.ReplaceControlValue(sqlValue); // 左侧gridView时,需要替换sql参数(包含查询条件、表格选中行). DataTable dt = MainImpl.GetDataTableResult(sqlValue); gcMain.LastSearchSql = sqlValue; gcMain.SetGridViewDataSource(dt); } } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message,ex.Message); } } #endregion private void btnFixSearch_Click(object sender, EventArgs e) { } #endregion } }