Files
lserp_cs_6.0/插件库/Lskj.PubModuleDetail5/ProductionMain.cs
T
2026-07-02 10:11:39 +00:00

1289 lines
58 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Lskj.Control.Model;
using Lskj.Model;
using Lskj.Util;
using Lskj.Data;
using DevExpress.XtraTab;
using Lskj.Control;
using DevExpress.XtraGrid.Views.Grid;
using Lskj.Business.Impl;
using DevExpress.Utils;
using DevExpress.XtraEditors;
using Lskj.Core;
using DevExpress.XtraGrid.Views.Base;
using Lskj.Business;
using System.Collections;
using System.Threading.Tasks;
namespace Lskj.PubModuleDetail5
{
public partial class ProductionMain : UserControl
{
/// <summary>
/// 左侧树数据
/// </summary>
public DataRow LeftRowObj;
/// <summary>
/// 表格明细集合
/// </summary>
public List<GridDetailModel> GridDetailModelObjs;
/// <summary>
/// 基础模型
/// </summary>
public DynamicModuleDetailModel Model;
/// <summary>
/// 表格列
/// </summary>
private DataTable _gridColumns = new DataTable();
/// <summary>
/// 系统模块实体对象
/// </summary>
/// <value>The system model.</value>
public ModuleModel SysModel;
/// <summary>
/// 主键名
/// </summary>
private string _primaryLeftKey;
/// <summary>
/// 顶部表格控件
/// </summary>
public ModuleGridEx ModuleGridObj;
/// <summary>
/// 底部多标签控件
/// </summary>
//public XtraTabControl TabObj;
/// <summary>
/// 底部多标签控件
/// </summary>
public TabControlEx TabIntoObj;
/// <summary>
/// 初始化完成
/// </summary>
private bool _isInitFinish;
public List<DataRow> DataItem = new List<DataRow>();
/// <summary>
/// 主键值
/// </summary>
private string _keyValue;
private string LeftBoottomModel;
/// <summary>
/// 上方刷新
/// </summary>
private bool istop = false;
/// <summary>
/// 拖拽模式
/// </summary>
private string dragModel = "0";
public ProductionMain()
{
InitializeComponent();
}
/// <summary>
/// <para>说明:窗口加载</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2019-06-28 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="sender">The sender.</param>
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
public void OnLoad(DynamicModuleDetailModel Model)
{
WaitForm.ShowForm();
try
{
this._isInitFinish = false;
this.Model = Model;
Dictionary<object, Hashtable> dataCaches = Model != null ? Model.DataCaches : null;
if (!dataCaches.GetValue(this, "MainInfo", out DataRow modelRow))
{
modelRow = MainImpl.GetSystemdllTab(this.Model.ModuleCode);
}
if (modelRow == null)
{
MessageUtil.Show("模块编号[" + this.Model.ModuleCode + "],配置错误!\r\n该模块信息未找到!");
return;
}
if (!dataCaches.GetValue(this, "ProductionMainModel", out this.SysModel))
{
this.SysModel = new ModuleModel(modelRow);
}
this.ModuleGridObj = this.mg_control;
this.TabIntoObj = this.tcButtom;
if (!dataCaches.GetValue(this, "Details", out this.GridDetailModelObjs))
{
this.GridDetailModelObjs = GetDetails(Model.ModuleCode);
}
if (!dataCaches.GetValue(this, "GetMenuConfigTab", out DataRow menuCondRow))
{
menuCondRow = BaseImpl.GetMenuConfigTab(this.Model.ModuleId);
}
if (menuCondRow["DllFileName"].Equals("Lskj.PubModuleDetailSearch5.dll")) Model.IsDetailSearch = true;
//初始化主表
this.mg_control.RightGridCallBack += Mg_control_RightGridCallBack;
this.mg_control.InitializeControl(SysModel, Model);
this.mg_control.SearchObj.SearchGrid();
this.InitilizeGridViewEvent();
//初始化左下角数据
this.InitializeLeft();
//初始化底部多标签
this.InitializePages(this.mg_control);
//初始化主表附件模块
this.GetBaseAttachPage();//获取附加模块
if (Model.HasOperPrivilege() && Model.IsBaseModule)
{
// 有权限则允许拖拽
GridDragGrid dragGrid = new GridDragGrid(this.ModuleGridObj.GridControlObj.GridView, this.gridLeftButtom.GridView);
dragGrid.isDropColorVisble = true;
//dragGrid.sequentialReturn = true;
dragGrid.TargetTableMultiSelect = false;
dragGrid.OnDragComplete += new GridFragGridCompleteEventHandler(OnDragGridCompleted);
// 有权限则上下结构允许拖拽
foreach (XtraTabPage tabPage in this.tcButtom.TabControlObj.TabPages)
{
if (tabPage.Tag is GridControlEx)
{
GridDragGrid dragGridToptoBottom = new GridDragGrid(this.ModuleGridObj.GridControlObj.GridView, (tabPage.Tag as GridControlEx).GridView);
dragGridToptoBottom.isDropColorVisble = true;
//dragGridToptoBottom.sequentialReturn = true;
dragGridToptoBottom.TargetTableMultiSelect = false;
dragGridToptoBottom.OnDragComplete += new GridFragGridCompleteEventHandler(OnDragGridCompleted);
}
}
XtraTabPage page = Tab_additional.TabPages[0];
page.Tag = this.mg_control;
this.SetTabPageStyle();
}
this.InitSpliterPosition();
}
catch (Exception ex)
{
LogHelper.Instance.WriteError(ex, ResourceKeys.BaseModule);
string Message = ErrorMessage.PromptErrorMessage(ex);
MessageUtil.Show(Message, ex.Message);
}
finally
{
this._isInitFinish = true;
}
WaitForm.HideForm();
}
private void Mg_control_RightGridCallBack(object sender, EventArgs e)
{
XtraTabPage tabPage = this.Tab_additional.SelectedTabPage;
foreach (System.Windows.Forms.Control control in tabPage.Controls)
{
if (control.GetType().Name == "ModuleGridEx")
{
ModuleGridEx moduleGridEx = control as ModuleGridEx;
try
{
this.GridView_DoubleClick(moduleGridEx.GridControlObj.GridView, null);//刷新上方明细
}
catch (Exception ex)
{
LogHelper.Instance.WriteError(ex);
//MessageUtil.Show(ResourceKeys.OperFault);
string Message = ErrorMessage.PromptErrorMessage(ex);
MessageUtil.Show(Message, ex.Message);
}
}
}
}
/// <summary>
/// 获取数据源缓存
/// </summary>
/// <param name="cachesDic"></param>
public void GetDataCaches(Dictionary<object, Hashtable> cachesDic)
{
Task<DynamicModel> dynamicModelTask = cachesDic.GetTask<DynamicModel>(this, "DynamicModel");
DynamicModuleDetailModel dynamicModel = (DynamicModuleDetailModel)dynamicModelTask.Result;
Task<DataRow> MainInfoTask = cachesDic.AddTask(this, "MainInfo", new Task<DataRow>(() =>
{
return MainImpl.GetSystemdllTab(dynamicModel.ModuleCode);//获取单个模块信息
}));
Task<ModuleModel> ProductionMainModelTask = cachesDic.AddTask(this, "ProductionMainModel", new Task<ModuleModel>(() =>
{
return new ModuleModel(MainInfoTask.Result); ;
}));
Task<List<GridDetailModel>> detailTask = cachesDic.AddTask(this, "Details", new Task<List<GridDetailModel>>(() =>
{
DataTable detailPages = BaseModuleImpl.GetBaseDetailPages(dynamicModel.ModuleCode);//根据传入的模块编号获得基础档案底部标签的数据
List<GridDetailModel> details = new List<GridDetailModel>();//表格明细对象的集合
foreach (DataRow item in detailPages.Rows)
{
GridDetailModel gridDetailModel = new GridDetailModel(item, null, GridCustomColumnStruct.BaseDetailGridView);
details.Add(gridDetailModel);
Task<DataTable> addGridColumnsTask = cachesDic.AddTask(gridDetailModel, "GridColumns", new Task<DataTable>(() =>
{
DataTable gridColumns = ReportImpl.GetReportDetailColumns(dynamicModel.ModuleCode, item["id"] + "");//获取报表明细列
gridDetailModel.GridColumns = gridColumns;
return gridColumns;
}));
}
return details;
}));
Task<DataRow> GetMenuConfigTabTask = cachesDic.AddTask(this, "GetMenuConfigTab", new Task<DataRow>(() =>
{
return BaseImpl.GetMenuConfigTab(dynamicModel.ModuleId);
}));
//右上方主表
cachesDic.AddTask(mg_control, "DynamicModel", dynamicModelTask);
cachesDic.AddTask(mg_control, "SysModel", ProductionMainModelTask);
mg_control.GetDataCaches(cachesDic);
}
#region 初始化分割条位置
/// <summary>
/// <para>说明:初始化分割条位置</para>
/// <para>创建人:王一帆</para>
/// <para>创建日期:2020-06-19</para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
private void InitSpliterPosition()
{
string spliterPosition = IniHelper.Read(string.Format("Production_SplitterPositionMain_{0}", this.Model.ModuleCode));
if (!string.IsNullOrEmpty(spliterPosition)) this.splitContainerControl1.SplitterPosition = Convert.ToInt32(spliterPosition);
string splitterBottonPosition = IniHelper.Read(string.Format("Production_spliterPositionBotton_{0}", this.Model.ModuleCode));
if (!string.IsNullOrEmpty(splitterBottonPosition)) this.splitBottomControl.SplitterPosition = Convert.ToInt32(splitterBottonPosition);
}
#endregion
#region 分割条位置改变
/// <summary>
/// <para>说明:分割条位置改变事件</para>
/// <para>创建人:王一帆</para>
/// <para>创建日期:2020-06-19 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
private void splitContainer_SplitterPositionChanged(object sender, EventArgs e)
{
try
{
if (_isInitFinish)
{
IniHelper.Write(string.Format("Production_SplitterPositionMain_{0}", this.Model.ModuleCode), this.splitContainerControl1.SplitterPosition + "");
}
}
catch (Exception ex)
{
string Message = ErrorMessage.PromptErrorMessage(ex);
MessageUtil.Show(Message, ex.Message);
}
}
private void splitContainerBotton_SplitterPositionChanged(object sender, EventArgs e)
{
try
{
if (this._isInitFinish)
{
IniHelper.Write(string.Format("Production_spliterPositionBotton_{0}", this.Model.ModuleCode), this.splitBottomControl.SplitterPosition + "");
}
}
catch (Exception ex)
{
string Message = ErrorMessage.PromptErrorMessage(ex);
MessageUtil.Show(Message, ex.Message);
}
}
#endregion
#region 设置动态TabPage的样式
/// <summary>
/// 刷新所有表格
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void RefreshAllGrid(object sender, EventArgs e)
{
try
{
XtraTabPage tabPage = Tab_additional.SelectedTabPage;
if (tabPage != null && tabPage.Tag != null && tabPage.Tag is ModuleGridEx)
{
ModuleGridEx moduleGridEx = tabPage.Tag as ModuleGridEx;
this.GridView_DoubleClick(moduleGridEx.GridControlObj.GridView, null);
}
}
catch (Exception ex)
{
string Message = ErrorMessage.PromptErrorMessage(ex);
MessageUtil.Show(Message, ex.Message);
}
}
/// <summary>
/// <para>说明:设置动态的TabPage的样式隐藏页签标题</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2018-02-27</para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
private void SetTabPageStyle()
{
if (this.SysModel.isHideHomeTAB)
{
Tab_additional.ShowTabHeader = Tab_additional.TabPages.Count == 2 ? DefaultBoolean.False : DefaultBoolean.Default;
}
else
{
Tab_additional.ShowTabHeader = Tab_additional.TabPages.Count == 1 ? DefaultBoolean.False : DefaultBoolean.Default;
}
//this.tcButtom.TabControlObj.ShowTabHeader = DefaultBoolean.False;
}
#endregion
private void InitializeLeft()
{
DataTable moduleDetailBottomTable = BaseModuleImpl.GetBaseDetailPages(this.Model.ModuleCode);
foreach (DataRow item in moduleDetailBottomTable.Rows)
{
if (int.Parse(item["orderId"] + "") == -1)
{
DataTable gridColumns = ReportImpl.GetReportDetailColumns(Model.ModuleCode, item["id"] + "");
ModuleModel MoudleLeftObj = new ModuleModel(MainImpl.GetSystemdllTab(item["UnionModule"] + ""));
this._gridColumns = BaseModuleImpl.GetBaseGridColumns(item["UnionModule"] + "");
this.gridLeftButtom.SetReadOnlyColumns(this._gridColumns, GridCustomColumnStruct.BaseMainGridView + MoudleLeftObj.FormKey);
GridDetailModel detailModel = new GridDetailModel(item, gridColumns, GridCustomColumnStruct.BaseDetailGridView);
detailModel.SystemModel = MoudleLeftObj;
gridLeftButtom.Tag = detailModel;
this.LeftBoottomModel = item["UnionModule"] + "";
this._primaryLeftKey = BaseImpl.GetBasePrimaryKey(item["UnionModule"] + "");
this.gridLeftButtom.SetGridRowColors(BaseModuleImpl.GetBaseGridRowColors(item["UnionModule"] + ""));
//this.gridLeftButtom.SetGridRightMenus(BaseModuleImpl.GetBaseGridRightMenus(item["UnionModule"] + ""), this.Model, OnGridLeftRightCallBack, null, null);//右键
this.gridLeftButtom.GridView.BestFitColumns();
if (this.SysModel.ModuleDetailClickMode)
{
this.gridLeftButtom.GridView.RowClick += GridViewLeftBottom_DoubleClick;
}
else
{
this.gridLeftButtom.GridView.DoubleClick += new EventHandler(GridViewLeftBottom_DoubleClick);
}
}
}
}
/// <summary>
/// <para>说明:初始化底部多标签数据</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2017-11-21 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
protected void InitializePages(ModuleGridEx gridEx)
{
this.tcButtom.Model = gridEx.Model;
DataRow modelRow = MainImpl.GetSystemdllTab(gridEx.Model.ModuleCode);
ModuleModel SysModel1 = new ModuleModel(modelRow);
if (this.SysModel.RefreshDetails)
{
tcButtom.OnDetailRightCallback += RefreshAllGrid;
}
//主表和左侧表会刷新同一个右侧表时,刷新所有表格方法会导致右侧表执行的可能不是上一次的sql
//tcButtom.OnDetailRightCallback += RefreshAllGrid;//刷新所有表格
this.tcButtom.DrgaParentPrimaryKey = SysModel1.ParmaryKey;
this.tcButtom.ParentGridEx = gridEx.GridControlObj;
this.tcButtom.InitTabPages(this.GridDetailModelObjs.Where(o => o.Orderid != -1).ToList());
//this.tcButtom.OnRightCallback += new EventHandler(OnGridViewRightCallBack);
}
/// <summary>
/// <para>说明:右键菜单执行后刷新数据,刷新规则按照上一次查询条件刷新</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2017-11-02 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="sender">The sender.</param>
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
protected void OnGridViewRightCallBack(object sender, EventArgs e)
{
try
{
DataRow item = this.ModuleGridObj.GridControlObj.GridView.GetFocusedDataRow();
this.SetDetailGridDataSource(this.tcButtom.TabControlObj.SelectedTabPage, item);
}
catch (Exception ex)
{
string Message = ErrorMessage.PromptErrorMessage(ex);
MessageUtil.Show(Message, ex.Message);
}
}
/// <summary>
/// 左下方右键刷新
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void OnGridLeftRightCallBack(object sender, EventArgs e)
{
try
{
this.RefreshAllGrid(null, null);
}
catch (Exception ex)
{
string Message = ErrorMessage.PromptErrorMessage(ex);
MessageUtil.Show(Message, ex.Message);
}
}
/// <summary>
/// <para>说明:绑定事件</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2017-11-22 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
protected void InitilizeGridViewEvent()
{
if (this.SysModel.ModuleDetailClickMode)
{
this.ModuleGridObj.GridControlObj.GridView.RowClick += GridView_DoubleClick;
}
else
{
this.ModuleGridObj.GridControlObj.GridView.DoubleClick += new EventHandler(GridView_DoubleClick);
}
}
/// <summary>
/// <para>说明:左下方点击</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2018-09-28 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="RowCellClickEventArgs"/> instance containing the event data.</param>
protected void GridViewLeftBottom_DoubleClick(object sender, EventArgs e)
{
try
{
WaitForm.ShowForm();
GridView grid = sender as GridView;
DataRow rowItem = grid.GetFocusedDataRow();
GridDetailModel detailModel = gridLeftButtom.Tag as GridDetailModel;
if (string.IsNullOrWhiteSpace(detailModel.PlanLetfControl))
{
//刷新全部
this.SetDetailGridDataSource(null, rowItem);
}
else
{
List<DetailTabPageModel> details = new List<DetailTabPageModel>();
if (!string.IsNullOrWhiteSpace(this.Model.ModuleCode) && this.tcButtom.DetailTabPagesDic.ContainsKey(this.Model.ModuleCode.ToLower()))
{
details = this.tcButtom.DetailTabPagesDic[this.Model.ModuleCode.ToLower()].OrderBy(n => n.TabPageIndex).ToList();
}
//刷新指定页签
foreach (string item in detailModel.PlanLetfControl.Split(','))
{
if (string.IsNullOrWhiteSpace(item)) continue;
DetailTabPageModel detail = details.Find(o => o.DetailModel.Orderid == int.Parse(item));
if (detail != null)
{
XtraTabPage xtraTab = this.tcButtom.TabControlObj.TabPages[detail.TabPageIndex];
this.SetDetailGridDataSource(xtraTab, rowItem);
}
}
}
istop = false;
}
catch (Exception ex)
{
LogHelper.Instance.WriteError(ex);
//MessageUtil.Show("加载明细数据失败!" + ex);
string Message = ErrorMessage.PromptErrorMessage(ex);
MessageUtil.Show(Message, ex.Message);
}
finally
{
WaitForm.HideForm();
}
}
/// <summary>
/// <para>说明:加载明细数据</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2018-09-28 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="RowCellClickEventArgs"/> instance containing the event data.</param>
protected void GridView_DoubleClick(object sender, EventArgs e)
{
try
{
WaitForm.ShowForm();
GridView grid = sender as GridView;
DataRow rowItem = grid.GetFocusedDataRow();
if (string.IsNullOrWhiteSpace(this.SysModel.DetaiTabControl))
{
//刷新全部
this.SetDetailGridDataSource(null, rowItem);
}
else
{
List<DetailTabPageModel> details = new List<DetailTabPageModel>();
if (!string.IsNullOrWhiteSpace(this.Model.ModuleCode) && this.tcButtom.DetailTabPagesDic.ContainsKey(this.Model.ModuleCode.ToLower()))
{
details = this.tcButtom.DetailTabPagesDic[this.Model.ModuleCode.ToLower()].OrderBy(n => n.TabPageIndex).ToList();
}
//刷新指定页签
foreach (string item in this.SysModel.DetaiTabControl.Split(','))
{
if (string.IsNullOrWhiteSpace(item)) continue;
DetailTabPageModel detail = details.Find(o => o.DetailModel.Orderid == int.Parse(item));
if (detail != null)
{
XtraTabPage xtraTab = this.tcButtom.TabControlObj.TabPages[detail.TabPageIndex];
this.SetDetailGridDataSource(xtraTab, rowItem);
}
else if (item.Equals("-1") && detail == null)
{
//刷新左侧表格
int oldRowHandle = gridLeftButtom.GridView.FocusedRowHandle;
GridDetailModel model = gridLeftButtom.Tag as GridDetailModel;
string searchSql = this.GetSearchSql(model, rowItem);
this.gridLeftButtom.LastSearchSql = searchSql;
gridLeftButtom.SetGridViewDataSource(MainImpl.GetDataTableResult(gridLeftButtom.LastSearchSql));
gridLeftButtom.GridView.SelectRowHandler(oldRowHandle);
if (!string.IsNullOrEmpty(model.SystemModel.SelectHandleCond))
{
string selectHandleCond = model.SystemModel.SelectHandleCond;
List<string> parmars = Util.ReplaceHelper.GetParamFields(selectHandleCond);
foreach (string parmar in parmars)
{
string field = parmar.Replace("{", "").Replace("}", "");
string value = BaseImpl.GetDefaultValue(field);
selectHandleCond = selectHandleCond.Replace(parmar, value);
}
DataRow selectRow = null;
DataTable filterTable = gridLeftButtom.GridView.GetGridViewFilteredAndSortedDataToDataTable();
try
{
selectRow = filterTable.Select(selectHandleCond).FirstOrDefault();
}
catch (Exception)
{
}
if (selectRow != null)
{
int selectHandle = filterTable.Rows.IndexOf(selectRow);
gridLeftButtom.GridView.FocusedRowHandle = selectHandle;
}
}
this.GridViewLeftBottom_DoubleClick(this.gridLeftButtom.GridView, null);//刷新右侧明细
}
}
}
istop = true;
}
catch (Exception ex)
{
LogHelper.Instance.WriteError(ex);
//MessageUtil.Show("加载明细数据失败!" + ex);
string Message = ErrorMessage.PromptErrorMessage(ex);
MessageUtil.Show(Message, ex.Message);
}
finally
{
WaitForm.HideForm();
}
}
/// <summary>
/// <para>说明:获取底部多标签数据</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2017-12-19 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
public void SetDetailGridDataSource(XtraTabPage tabPage = null, DataRow rowItem = null)
{
if (tabPage != null)
{
this.SetTabPageDataSource(tabPage, rowItem);
}
else
{
foreach (XtraTabPage page in this.tcButtom.TabControlObj.TabPages)
{
if (rowItem != null && page != null)
{
this.SetTabPageDataSource(page, rowItem);
}
else
{
SetTabPageDataSource(page, rowItem, true);
}
}
}
}
/// <summary>
/// <para>说明:设置表格数据</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2018-01-29 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="tabPage">The tab page.</param>
/// <param name="gridControl">The grid control.</param>
protected void SetTabPageDataSource(XtraTabPage tabPage, DataRow rowItem = null, bool isNull = false)
{
if (isNull)
{
this.TabIntoObj.SetGridDataSource(tabPage, new DataTable());
return;
}
GridDetailModel model = this.TabIntoObj.GetGridDetailModel(tabPage);
if (rowItem != null && model != null)
{
if (!string.IsNullOrEmpty(model.UnionModule) && (string.IsNullOrEmpty(model.UnionValue) && string.IsNullOrEmpty(model.UnionCond))) return;
if (tabPage.Tag is FrmWebBrowser)
{
// 加载网页
FrmWebBrowser webView = tabPage.Tag as FrmWebBrowser;
string url = ReplaceHelper.ReplaceRowParam(rowItem, ReplaceHelper.ReplaceUserInfo(model.DetailSql));
url = url.StartsWith("http") ? url : SystemInfo.Instance.OAUrl + url;
//webView.FrmLoad(url);
webView.LoadUrl(url);
webView.Dock = DockStyle.Fill;
webView.Tag = model;
}
else if (tabPage.Tag is FrmWebBrowser2)
{
// 加载网页
FrmWebBrowser2 webView = tabPage.Tag as FrmWebBrowser2;
string url = ReplaceHelper.ReplaceRowParam(rowItem, ReplaceHelper.ReplaceUserInfo(model.DetailSql));
url = url.StartsWith("http") ? url : SystemInfo.Instance.OAUrl + url;
webView.LoadUrl(url);
webView.Dock = DockStyle.Fill;
webView.Tag = model;
}
else if (tabPage.Tag is FrmMiniBlink)
{
// 加载网页
FrmMiniBlink webView = tabPage.Tag as FrmMiniBlink;
string url = ReplaceHelper.ReplaceRowParam(rowItem, ReplaceHelper.ReplaceUserInfo(model.DetailSql));
url = url.StartsWith("http") ? url : SystemInfo.Instance.OAUrl + url;
webView.LoadUrl(url);
webView.Dock = DockStyle.Fill;
webView.Tag = model;
}
else if (tabPage.Tag is TabMultipledetails)
{
TabMultipledetails tabMultipledetails = tabPage.Tag as TabMultipledetails;
tabMultipledetails.SetConditionValues(rowItem);
GridControlEx grdExMain = (tabMultipledetails.SplitMain.Panel1.Tag as GridControlEx);
GridDetailModel MainModel = grdExMain.Tag as GridDetailModel;
string searchMainSql = this.GetSearchSql(MainModel, rowItem);
DataTable firstTable = MainImpl.GetDataTableResult(searchMainSql);
grdExMain.LastSearchSql = searchMainSql;
grdExMain.SetGridViewDataSource(firstTable);
if (tabMultipledetails.SplitMain.Panel2.Tag is GridControlEx)
{
GridControlEx grdExAdditional = (tabMultipledetails.SplitMain.Panel2.Tag as GridControlEx);
GridDetailModel AdditionalModel = grdExAdditional.Tag as GridDetailModel;
string searchAddSql = this.GetSearchSql(AdditionalModel, rowItem);
if (!MainModel.IsUnioDetail)
{
grdExAdditional.LastSearchSql = searchAddSql;
grdExAdditional.SetGridViewDataSource(MainImpl.GetDataTableResult(searchAddSql));
}
//右侧是左侧的明细,左侧没有数据时。右侧赋空值(因为无法触发左侧行改变事件)
if (MainModel.IsUnioDetail && firstTable.Rows.Count == 0)
{
grdExAdditional.LastSearchSql = "";
grdExAdditional.SetGridViewDataSource(new DataTable());
}
}
else if (tabMultipledetails.SplitMain.Panel2.Tag is ChartControlEx)
{
ChartControlEx grdExAdditional = (tabMultipledetails.SplitMain.Panel2.Tag as ChartControlEx);
GridDetailModel AdditionalModel = grdExAdditional.Tag as GridDetailModel;
string searchAddSql = this.GetSearchSql(AdditionalModel, rowItem);
DataTable table = MainImpl.GetDataTableResult(searchAddSql);
grdExAdditional.CreateChart(table);
}
tabPage.Text = MainModel.DetailName + "(" + firstTable.Rows.Count + "条)";
tabPage.Appearance.Header.ForeColor = firstTable.Rows.Count > 0 ? Color.Red : Color.FromArgb(0, 0, 0);
}
else if (tabPage.Tag is FrmProductSched)
{
string searchSql = this.GetSearchSql(model, rowItem);
FrmProductSched frmProductSched = tabPage.Tag as FrmProductSched;
DataTable table = MainImpl.GetDataTableResult(searchSql);
frmProductSched.setDataSource(table);
tabPage.Text = model.DetailName + "(" + table.Rows.Count + "条)";
tabPage.Appearance.Header.ForeColor = table.Rows.Count > 0 ? Color.Red : Color.FromArgb(0, 0, 0);
}
else
{
if (model.IsDrag)
{
return;
}
string searchSql = this.GetSearchSql(model, rowItem);
if (tabPage.Tag is GridControlEx)
{
(tabPage.Tag as GridControlEx).LastSearchSql = searchSql;
}
GridView view = this.ModuleGridObj.GridControlObj.GridView;
if (model.DynamicDetails && rowItem.Table.Columns.Contains("DisplayColumns")) //
{
this.tcButtom.SetGridDisplayColumns(tabPage, rowItem["DisplayColumns"] + "");
}
this.tcButtom.SetGridDataSource(tabPage, MainImpl.GetDataTableResult(searchSql), view);
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 + "条)";
}
}
//string searchSql = this.GetSearchSql(model, rowItem);
//if (tabPage.Tag is GridControlEx)
//{
// (tabPage.Tag as GridControlEx).LastSearchSql = searchSql;
//}
//this.TabIntoObj.SetGridDataSource(tabPage, MainImpl.GetDataTableResult(searchSql));
}
}
/// <summary>
/// <para>说明:设置表格数据</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2018-01-29 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="tabPage">The tab page.</param>
/// <param name="gridControl">The grid control.</param>
protected void SetRightDataSource(XtraTabPage tabPage)
{
GridDetailModel model = this.tcButtom.GetGridDetailModel(tabPage);
this.tcButtom.SetGridDataSource(tabPage, MainImpl.GetDataTableResult((tabPage.Tag as GridControlEx).LastSearchSql));
}
/// <summary>
/// <para>说明:获取查询条件</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2017-11-22 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="model">The model.</param>
/// <param name="rowItem">The row item.</param>
/// <returns>System.String.</returns>
protected string GetSearchSql(GridDetailModel model, DataRow rowItem)
{
string fieldName = !string.IsNullOrEmpty(model.UnionParentField) && rowItem.Table.Columns.Contains(model.UnionParentField) ? model.UnionParentField : ModuleGridObj.ParmaryKey;
string sqlValue = model.IsReadOnly || model.IsChart ? model.DetailSql : model.SystemModel.MenuSql;
sqlValue = ReplaceHelper.ReplaceRowParam(rowItem, sqlValue);
if (ReplaceHelper.IsSelect(sqlValue) && !string.IsNullOrEmpty(model.UnionValue))
{
string WhereConnect = rowItem.Table.Columns.Contains(fieldName) ? string.Format(" and {0}='{1}'", model.UnionValue, rowItem[fieldName] + "") : "and 1<>1";
sqlValue = ReplaceHelper.ReplaceWhereCond(sqlValue) + WhereConnect;
}
return sqlValue;
}
/// <summary>
/// <para>说明:</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2017-11-21 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <returns>List&lt;GridDetailModel&gt;.</returns>
private List<GridDetailModel> GetDetails(string ModuleCode)
{
List<GridDetailModel> details = new List<GridDetailModel>();
DataTable table = BaseModuleImpl.GetBaseDetailPages(ModuleCode);
foreach (DataRow item in table.Rows)
{
DataTable gridColumns = ReportImpl.GetReportDetailColumns(ModuleCode, item["id"] + "");
details.Add(new GridDetailModel(item, gridColumns, GridCustomColumnStruct.BaseDetailGridView));
}
return details;
}
/// <summary>
/// 获取附加模块
/// </summary>
private void GetBaseAttachPage()
{
DataTable table = BaseModuleImpl.GetBaseAttach(this.Model.ModuleCode);//查看是否有附加模块
if (table.Rows.Count > 0)
{
this.xtraTabPage1.Text = this.SysModel.MenuText;
if (this.SysModel.isHideHomeTAB) this.xtraTabPage1.PageVisible = false;
foreach (DataRow item in table.Rows)
{
string DragType = "0";//0默认(上下),1上左,2上下和上左
string DragConditions = string.Empty;
if (table.Columns.Contains("DragType") && !string.IsNullOrWhiteSpace(item["DragType"] + ""))
{
dragModel = DragType = item["DragType"] + "";
}
if (table.Columns.Contains("DragConditions") && !string.IsNullOrWhiteSpace(item["DragConditions"] + ""))
{
DragConditions = item["DragConditions"] + "";
}
DataRow modelRow = MainImpl.GetSystemdllTab(item["unionModule"] + "");
ModuleModel addModel = new ModuleModel(modelRow);
if (addModel == null) continue;
XtraTabPage page = new XtraTabPage();
page.Text = item["AttachName"] + "";
ModuleGridEx modegridEx = new ModuleGridEx();
modegridEx.Name = "modegridEx";
modegridEx.Dock = DockStyle.Fill;
DynamicModel dyncModel = new DynamicModuleModel(new string[] { "0", ERPInfo.Instance.UserId, ERPInfo.Instance.UserName, "1", item["unionModule"] + "", "0" });
modegridEx.RightGridCallBack += Mg_control_RightGridCallBack;
modegridEx.InitializeControl(addModel, dyncModel);
modegridEx.SearchObj.OnDataSourceBindCallBack += OnDataSourceBindCallBack;
//加载复选框
if (table.Columns.Contains("gridObjCheck") && "1".Equals(item["gridObjCheck"] + ""))
{
GridDragGrid.GridAddCheckBox(modegridEx.GridControlObj.GridView);
}
if (dyncModel.HasOperPrivilege() && dyncModel.IsBaseModule)
{
// 有权限则允许拖拽
if (DragType.Equals("1") || DragType.Equals("2"))
{
GridDragGrid dragGrid = new GridDragGrid(modegridEx.GridControlObj.GridView, this.gridLeftButtom.GridView);
dragGrid.isDropColorVisble = true;
dragGrid.TargetTableMultiSelect = false;
//dragGrid.sequentialReturn = true;
dragGrid.OnDragComplete += new GridFragGridCompleteEventHandler(OnDragGridCompleted);
dragGrid.DragConditions = DragConditions;
}
// 有权限则上下结构允许拖拽
foreach (XtraTabPage tabPage in this.tcButtom.TabControlObj.TabPages)
{
if (tabPage.Tag is GridControlEx)
{
if (DragType.Equals("0") || DragType.Equals("2"))
{
GridDragGrid dragGridToptoBottom = new GridDragGrid(modegridEx.GridControlObj.GridView, (tabPage.Tag as GridControlEx).GridView);
dragGridToptoBottom.isDropColorVisble = true;
dragGridToptoBottom.TargetTableMultiSelect = false;
//dragGridToptoBottom.sequentialReturn = true;
dragGridToptoBottom.OnDragComplete += new GridFragGridCompleteEventHandler(OnDragGridCompleted);
dragGridToptoBottom.DragConditions = DragConditions;
}
}
}
}
page.Controls.Add(modegridEx);
page.Tag = modegridEx;
this.Tab_additional.TabPages.Add(page);
if (this.SysModel.ModuleDetailClickMode)
{
modegridEx.GridControlObj.GridView.RowClick += GridView_DoubleClick;
}
else
{
modegridEx.GridControlObj.GridView.DoubleClick += new EventHandler(GridView_DoubleClick);
}
}
}
}
/// <summary>
/// 数据源绑定完成后触发
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnDataSourceBindCallBack(object sender, EventArgs e)
{
MyControl searchControl = (MyControl)sender;
searchControl.SearchGrid();
}
#region 表格拖拽完成
/// <summary>
/// <para>说明:表格拖拽完成</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2017-11-14 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="sender">The sender.</param>
/// <param name="e">The e.</param>
protected void OnDragGridCompleted(object sender, GridDragGridArgs e)
{
//e.TargetGridViewObj.OptionsSelection.MultiSelect = true;
string sql = string.Empty;
string msgs = string.Empty;
int refreshTypes;
DataRow GridLeftItem = this.gridLeftButtom.GridView.GetFocusedDataRow();
if (e.GridViewSelectRows == null || e.GridViewSelectRows.Length == 0 || GridLeftItem == null) return;
XtraTabPage tabPage = this.Tab_additional.SelectedTabPage;
foreach (System.Windows.Forms.Control control in tabPage.Controls)
{
if (control.GetType().Name == "ModuleGridEx")
{
ModuleGridEx moduleGridEx = control as ModuleGridEx;
try
{
int[] records = new int[e.GridViewSelectRows.Length];
string ParmaryKey = moduleGridEx.ParmaryKey;
List<ApiHelper> apiHelpers = new List<ApiHelper>();//拖拽前缓存接口调用数据
if (SystemInfo.Instance.ProductionSchedulingVerification)
{
//拖动行全部主键
string ParmaryValues = string.Empty;
DataRow firstLine = null;
for (int i = 0; i < e.GridViewSelectRows.Length; i++)
{
if (i == 0) firstLine = e.GridViewSelectRows[i];
ParmaryValues += e.GridViewSelectRows[i][ParmaryKey] + ",";
}
int result = ProduceImpl.DragRefresh(moduleGridEx.Model.ModuleCode, ParmaryKey, firstLine[ParmaryKey] + "", LeftBoottomModel, _primaryLeftKey, GridLeftItem[_primaryLeftKey] + "", out refreshTypes, out msgs, ParmaryValues, "0");
switch (result)
{
case 1:
// 继续执行保存
break;
case 9:
// 根据选择判断是否继续执行保存
if (MessageUtil.Show(msgs, MessageBoxButtons.YesNo) == DialogResult.No)
{
return;
}
break;
default:
// 保存失败
MessageUtil.Show("数据错误" + "\r\n" + msgs);
return;
}
}
for (int i = 0; i < e.GridViewSelectRows.Length; i++)
{
DataRow item = e.GridViewSelectRows[i];
try
{
records[i] = ProduceImpl.DragRefresh(moduleGridEx.Model.ModuleCode, ParmaryKey, item[ParmaryKey] + "", LeftBoottomModel, _primaryLeftKey, GridLeftItem[_primaryLeftKey] + "", out refreshTypes, out msgs, "", "1");
if (records[i] == 1 && ApiHelper.IsExecEventApi(Interface.Api.OperateEvent.AfterGridDragComplete, moduleGridEx.Model.ModuleCode, 0))
{
ApiHelper apiHelper = new ApiHelper(moduleGridEx.Model.ModuleCode, item[ParmaryKey] + "", ParmaryKey, this.SysModel.MenuTable, 0);
Interface.Api.ActionType actionType = Interface.Api.ActionType.None;
apiHelper.OnEvent(Interface.Api.OperateEvent.AfterGridDragComplete, actionType, false);
apiHelpers.Add(apiHelper);
}
}
catch (Exception ex)
{
LogHelper.Instance.WriteError(ex);
//MessageUtil.Show("表格拖拽出错!" + ex);
string Message = ErrorMessage.PromptErrorMessage(ex);
MessageUtil.Show(Message, ex.Message);
}
}
#region 拖拽后调用api接口
string apiMsg = "";
foreach (ApiHelper apiHelper in apiHelpers)
{
apiHelper.OnEvent();
apiMsg = apiMsg + apiHelper.apiResutMsg;
}
if (!string.IsNullOrEmpty(apiMsg))
MessageUtil.Show(apiMsg);
#endregion
int successCount = records.Contains(1) ? records.Where(x => x == 1).Count() : 0;
int faultCount = records.Contains(0) ? records.Where(x => x == 0).Count() : 0;
string tipMsg = string.Empty;
string filepath = string.Empty;
string paramstr = string.Empty;
if (successCount > 0) tipMsg = string.Format(ResourceKeys.DragSuccessCount, successCount);
if (faultCount > 0) tipMsg += successCount > 0 ? "\r\n" : "" + string.Format(ResourceKeys.DragFaultCount, faultCount);
//tipMsg = string.IsNullOrWhiteSpace(tipMsg) ? msgs : tipMsg;
//MessageUtil.Show(tipMsg);
if (!string.IsNullOrEmpty(msgs))
{
// 返回Msg值:tipmsg=我是提示信息;filepath=ccc.lsp;params=daskd
string[] msgItem = msgs.Split(';');
if (msgItem != null && msgItem.Length > 2)
{
msgs = msgItem[0].Replace("tipmsg=", "");
filepath = msgItem[1].Replace("filepath=", "");
paramstr = msgItem[2].Replace("params=", "");
}
if (!string.IsNullOrEmpty(msgs))
MessageUtil.Show(msgs);
if (filepath.Contains(".dll"))
{
GetMsgParamters(paramstr);
}
if (filepath.Contains(".lsp"))
{
DelphiHelper.LoadDelphiDll(PubUtil.AbsolutelyLibPath + filepath, "", "", paramstr, "", 0, "");
}
}
int rowHandle = this.gridLeftButtom.GridView.FocusedRowHandle;
gridLeftButtom.SetGridViewDataSource(MainImpl.GetDataTableResult(gridLeftButtom.LastSearchSql));
this.gridLeftButtom.GridView.SelectRowHandler(rowHandle);
//this.GridView_RowCellClick(this.gridLeftButtom.GridView, null);
if (!this.SysModel.DisableDragRefresh)
{
moduleGridEx.SearchObj.SearchLastGrid();//刷新上方表
}
if (istop)
{
this.GridView_DoubleClick(moduleGridEx.GridControlObj.GridView, null);//刷新上方明细
}
else
{
this.GridViewLeftBottom_DoubleClick(this.gridLeftButtom.GridView, null);//刷新右侧明细
}
}
catch (Exception ex)
{
LogHelper.Instance.WriteError(ex);
//MessageUtil.Show(ResourceKeys.OperFault);
string Message = ErrorMessage.PromptErrorMessage(ex);
MessageUtil.Show(Message, ex.Message);
}
}
}
}
#endregion
/// <summary>
/// <para>说明:调用弹出dll</para>
/// <para>创建人:王一帆</para>
/// <para>创建日期:2020-04-14 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
private void GetMsgParamters(string msgs)
{
if (msgs.Contains("module="))
{
string[] paramters = msgs.Split('=');
if (paramters.Length != 2)
{
MessageUtil.Show(ResourceKeys.ProcNameSettingFault);
return;
}
string[] defaultParams = paramters[1].Split('^');
if (defaultParams.Length < 4)
{
MessageUtil.Show(ResourceKeys.ExcuteMoudleFail);
return;
}
string dllName = defaultParams[1];
string moduleTitle = defaultParams[2];
string saveState = defaultParams[3];
if ("lskj.pubadd3.dll".Equals(dllName) || "lskj.pubadd2.dll".Equals(dllName) || "lskj.pubadd4.dll".Equals(dllName))
dllName = "Lskj.PubAdd.dll";
List<string> paramList = new List<string>();
for (int i = 4; i < 14; i++)
{
paramList.Add(defaultParams.Length > i ? defaultParams[i] : "");
}
//执行dll
string[] str = {
moduleTitle,
ERPInfo.Instance.UserId,
ERPInfo.Instance.UserName,
"1",
ERPInfo.Instance.WorkModid,
paramList[0],
paramList[1],
paramList[2],
paramList[3],
paramList[4],
paramList[5],
paramList[6],
paramList[7],
paramList[8],
paramList[9],
"",
"",
saveState
};
IForm form = FormHelper.LoadDllForm(dllName, str);
if (form == null)
{
MessageUtil.Show(ResourceKeys.DyncmicDllNotFount);
return;
}
if (form.SubForm == null)
{
MessageUtil.Show(ResourceKeys.DyncmicDllInitFault);
return;
}
form.SubForm.WindowState = FormWindowState.Normal;
form.SubForm.StartPosition = FormStartPosition.CenterScreen;
form.SubForm.Text = moduleTitle;
DialogResult dr = form.SubForm.ShowDialog();
}
}
#region 切换页签
/// <summary>
/// 切换附加模块页签
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Tab_additional_SelectedPageChanged(object sender, DevExpress.XtraTab.TabPageChangedEventArgs e)
{
try
{
//XtraTabPage item = Tab_Bottom.TabPages[Tab_additional.SelectedTabPageIndex];
XtraTabPage tabPage = this.Tab_additional.SelectedTabPage;
//Tab_Bottom.SelectedTabPage= item;
if (tabPage != null)
{
this.ModuleGridObj = tabPage.Tag as ModuleGridEx;
}
//this.TabIntoObj=item.Tag as TabIntoControl;
//this.TabObj = TabIntoObj.TabControlObj;}
//如果是默认页签,则隐藏左侧
//if (this.SearchLeftObj != null && Tab_additional.SelectedTabPage == xtraTabPage1)//进行tabpage位置判断
//{
// // this.splitLeftControl.Panel1.Visible = false;
// //splitLeftControl.SplitterPosition = 0;
// this.splitLeftControl.PanelVisibility = SplitPanelVisibility.Panel2;
// this.splitContainerControl1.PanelVisibility = SplitPanelVisibility.Panel1;
//}
//else
//{
// //string splitterTopPosition = IniHelper.Read(string.Format("Production_spliterPositionTop_{0}", this.Model.ModuleCode));
// //if (!string.IsNullOrEmpty(splitterTopPosition)) this.splitLeftControl.SplitterPosition = Convert.ToInt32(splitterTopPosition);
// this.splitLeftControl.PanelVisibility = SplitPanelVisibility.Both;
// this.splitContainerControl1.PanelVisibility = SplitPanelVisibility.Both;
//}
}
catch (Exception ex)
{
string Message = ErrorMessage.PromptErrorMessage(ex);
MessageUtil.Show(Message, ex.Message);
}
}
#endregion
}
}