SVN-Revision: r418
This commit is contained in:
tdx
2025-03-27 07:53:25 +00:00
parent 8303017811
commit 94bb881ae6
+40 -121
View File
@@ -137,7 +137,7 @@ namespace Lskj.Control
/// <summary> /// <summary>
/// 页签控件集合 /// 页签控件集合
/// </summary> /// </summary>
public Dictionary<GridDetailModel, Task<object>> PageControlsDic = new Dictionary<GridDetailModel, Task<object>>(); public Dictionary<GridDetailModel, object> PageControlsDic = new Dictionary<GridDetailModel, object>();
public TabControlEx() public TabControlEx()
{ {
InitializeComponent(); InitializeComponent();
@@ -161,14 +161,12 @@ namespace Lskj.Control
} }
string DetaiName = string.Empty; string DetaiName = string.Empty;
Dictionary<object, Hashtable> dataCaches = Model != null ? Model.DataCaches : null; Dictionary<object, Hashtable> dataCaches = Model != null ? Model.DataCaches : null;
dataCaches.GetValue(this, "DataCaches", out bool _);//等待缓存数据加载完成
foreach (GridDetailModel model in this._gridDetail) foreach (GridDetailModel model in this._gridDetail)
{ {
Task<object> controlTask = PageControlsDic.ContainsKey(model) ? PageControlsDic[model] : null; object control = PageControlsDic.ContainsKey(model) ? PageControlsDic[model] : null;
bool hasControl = controlTask != null && controlTask.Result != null; bool hasControl = control != null;
if (DetaiName.Equals(model.DetailName) && isGridmerge) continue; if (DetaiName.Equals(model.DetailName) && isGridmerge) continue;
GridDetailModel[] isMeage = gridDetail.Cast<GridDetailModel>().Where(x => x.DetailName.Equals(model.DetailName)).ToArray(); GridDetailModel[] isMeage = gridDetail.Cast<GridDetailModel>().Where(x => x.DetailName.Equals(model.DetailName)).ToArray();
XtraTabPage page = new XtraTabPage(); XtraTabPage page = new XtraTabPage();
@@ -184,7 +182,7 @@ namespace Lskj.Control
if (model.IsChart) if (model.IsChart)
{ {
ChartControlEx chartEx = new ChartControlEx(); ChartControlEx chartEx = hasControl && control is ChartControlEx ? (ChartControlEx)control : new ChartControlEx();
chartEx.Dock = DockStyle.Fill; chartEx.Dock = DockStyle.Fill;
chartEx.transverseHistogram = model.transverseHistogram; chartEx.transverseHistogram = model.transverseHistogram;
//chartEx.SetCharts(BaseModuleImpl.GetChartParams(model.FormKey)); //chartEx.SetCharts(BaseModuleImpl.GetChartParams(model.FormKey));
@@ -205,7 +203,7 @@ namespace Lskj.Control
} }
else if (model.IsExcel) else if (model.IsExcel)
{ {
ExcelControlEx excelEx = new ExcelControlEx(); ExcelControlEx excelEx = hasControl && control is ExcelControlEx ? (ExcelControlEx)control : new ExcelControlEx();
excelEx.Dock = DockStyle.Fill; excelEx.Dock = DockStyle.Fill;
excelEx.Tag = model; excelEx.Tag = model;
page.Tag = excelEx; page.Tag = excelEx;
@@ -218,7 +216,7 @@ namespace Lskj.Control
//url= System.Web.HttpUtility.UrlEncode(url); //url= System.Web.HttpUtility.UrlEncode(url);
if (SystemInfo.Instance.PrimitiveBrowser) if (SystemInfo.Instance.PrimitiveBrowser)
{ {
FrmMiniBlink webView = new FrmMiniBlink(); FrmMiniBlink webView = hasControl && control is FrmMiniBlink ? (FrmMiniBlink)control : new FrmMiniBlink();
webView.IsDownVerify = true; webView.IsDownVerify = true;
webView.Dock = DockStyle.Fill; webView.Dock = DockStyle.Fill;
webView.Tag = model; webView.Tag = model;
@@ -228,7 +226,7 @@ namespace Lskj.Control
} }
else else
{ {
FrmWebBrowser webView = new FrmWebBrowser(); FrmWebBrowser webView = hasControl && control is FrmWebBrowser ? (FrmWebBrowser)control : new FrmWebBrowser();
webView.Dock = DockStyle.Fill; webView.Dock = DockStyle.Fill;
webView.Tag = model; webView.Tag = model;
page.Tag = webView; page.Tag = webView;
@@ -243,7 +241,7 @@ namespace Lskj.Control
//url= System.Web.HttpUtility.UrlEncode(url); //url= System.Web.HttpUtility.UrlEncode(url);
if (SystemInfo.Instance.PrimitiveBrowser) if (SystemInfo.Instance.PrimitiveBrowser)
{ {
FrmMiniBlink webView = new FrmMiniBlink(); FrmMiniBlink webView = hasControl && control is FrmMiniBlink ? (FrmMiniBlink)control : new FrmMiniBlink();
webView.Dock = DockStyle.Fill; webView.Dock = DockStyle.Fill;
webView.Tag = model; webView.Tag = model;
page.Tag = webView; page.Tag = webView;
@@ -252,7 +250,7 @@ namespace Lskj.Control
} }
else else
{ {
FrmWebBrowser2 webView = new FrmWebBrowser2(); FrmWebBrowser2 webView = hasControl && control is FrmWebBrowser2 ? (FrmWebBrowser2)control : new FrmWebBrowser2();
webView.Dock = DockStyle.Fill; webView.Dock = DockStyle.Fill;
webView.Tag = model; webView.Tag = model;
page.Tag = webView; page.Tag = webView;
@@ -267,7 +265,7 @@ namespace Lskj.Control
//url= System.Web.HttpUtility.UrlEncode(url); //url= System.Web.HttpUtility.UrlEncode(url);
if (SystemInfo.Instance.PrimitiveBrowser) if (SystemInfo.Instance.PrimitiveBrowser)
{ {
FrmMiniBlink webView = new FrmMiniBlink(); FrmMiniBlink webView = hasControl && control is FrmMiniBlink ? (FrmMiniBlink)control : new FrmMiniBlink();
webView.AllowDownload = false; webView.AllowDownload = false;
webView.Dock = DockStyle.Fill; webView.Dock = DockStyle.Fill;
webView.Tag = model; webView.Tag = model;
@@ -277,7 +275,7 @@ namespace Lskj.Control
} }
else else
{ {
FrmWebBrowser2 webView = new FrmWebBrowser2(); FrmWebBrowser2 webView = hasControl && control is FrmWebBrowser2 ? (FrmWebBrowser2)control : new FrmWebBrowser2();
webView.Dock = DockStyle.Fill; webView.Dock = DockStyle.Fill;
webView.Tag = model; webView.Tag = model;
webView.AllowDownload = false; webView.AllowDownload = false;
@@ -289,7 +287,7 @@ namespace Lskj.Control
else if (model.IsAddPanel && isGridmerge) else if (model.IsAddPanel && isGridmerge)
{ {
// 加载添加界面 // 加载添加界面
ModulePanelEx modulePanel = new ModulePanelEx(); ModulePanelEx modulePanel = hasControl && control is ModulePanelEx ? (ModulePanelEx)control : new ModulePanelEx();
modulePanel.Dock = DockStyle.Fill; modulePanel.Dock = DockStyle.Fill;
if (!dataCaches.GetValue(modulePanel, "BasePrimaryKey", out string primaryKey)) if (!dataCaches.GetValue(modulePanel, "BasePrimaryKey", out string primaryKey))
@@ -312,7 +310,7 @@ namespace Lskj.Control
} }
else if (model.IsDetailView) else if (model.IsDetailView)
{ {
ModuleGridDetailEx DetailEx = new ModuleGridDetailEx(); ModuleGridDetailEx DetailEx = hasControl && control is ModuleGridDetailEx ? (ModuleGridDetailEx)control : new ModuleGridDetailEx();
DetailEx.Dock = DockStyle.Fill; DetailEx.Dock = DockStyle.Fill;
if (!dataCaches.GetValue(DetailEx, "DynamicModel", out DynamicModel dyncModel)) if (!dataCaches.GetValue(DetailEx, "DynamicModel", out DynamicModel dyncModel))
{ {
@@ -322,7 +320,6 @@ namespace Lskj.Control
{ {
moduleInformation = MainImpl.GetSystemdllTab(model.UnionModule); moduleInformation = MainImpl.GetSystemdllTab(model.UnionModule);
} }
if (moduleInformation == null) if (moduleInformation == null)
{ {
MessageUtil.Show("没有找到编号为" + model.UnionModule + "的模块信息"); MessageUtil.Show("没有找到编号为" + model.UnionModule + "的模块信息");
@@ -385,7 +382,15 @@ namespace Lskj.Control
plBottom.Visible = false; plBottom.Visible = false;
PanelControl plMain = new PanelControl(); PanelControl plMain = new PanelControl();
plMain.Dock = DockStyle.Fill; plMain.Dock = DockStyle.Fill;
GridControlEx gridEx = model.AutoMultiHeader == 1 ? new BandedGridControlEx() : new GridControlEx(); GridControlEx gridEx = null;
if (model.AutoMultiHeader == 1)
{
gridEx = hasControl && control is BandedGridControlEx ? (BandedGridControlEx)control : new BandedGridControlEx();
}
else
{
gridEx = hasControl && control is GridControlEx ? (GridControlEx)control : new GridControlEx();
}
gridEx.Dock = DockStyle.Fill; gridEx.Dock = DockStyle.Fill;
gridEx.Tag = model; gridEx.Tag = model;
gridEx.Parent = plMain; gridEx.Parent = plMain;
@@ -449,7 +454,7 @@ namespace Lskj.Control
else if (isMeage.Count() > 1 && isGridmerge) else if (isMeage.Count() > 1 && isGridmerge)
{ {
DetaiName = model.DetailName; DetaiName = model.DetailName;
TabMultipledetails tabMultipledetails = new TabMultipledetails(); TabMultipledetails tabMultipledetails = hasControl && control is TabMultipledetails ? (TabMultipledetails)control : new TabMultipledetails();
tabMultipledetails.Model = this.Model; tabMultipledetails.Model = this.Model;
tabMultipledetails.ParentGridEx = this.ParentGridEx; tabMultipledetails.ParentGridEx = this.ParentGridEx;
tabMultipledetails.ParentControlEx = this.ParentControlEx; tabMultipledetails.ParentControlEx = this.ParentControlEx;
@@ -464,7 +469,7 @@ namespace Lskj.Control
} }
else else
{ {
ModuleGridEx gridEx = hasControl && controlTask.Result is ModuleGridEx ? (ModuleGridEx)controlTask.Result : new ModuleGridEx(); ModuleGridEx gridEx = hasControl && control is ModuleGridEx ? (ModuleGridEx)control : new ModuleGridEx();
if (!dataCaches.GetValue(gridEx, "DynamicModel", out DynamicModel dyncModel)) if (!dataCaches.GetValue(gridEx, "DynamicModel", out DynamicModel dyncModel))
{ {
dyncModel = new DynamicModuleModel(new string[] { model.DetailName, ERPInfo.Instance.UserId, ERPInfo.Instance.UserName, this.Model.Privilege, model.UnionModule, "0" }); dyncModel = new DynamicModuleModel(new string[] { model.DetailName, ERPInfo.Instance.UserId, ERPInfo.Instance.UserName, this.Model.Privilege, model.UnionModule, "0" });
@@ -591,8 +596,6 @@ namespace Lskj.Control
//获取通用数据 //获取通用数据
Task<DynamicModel> dynamicModelTask = cachesDic.GetTask<DynamicModel>(this, "DynamicModel"); Task<DynamicModel> dynamicModelTask = cachesDic.GetTask<DynamicModel>(this, "DynamicModel");
Task<List<GridDetailModel>> detailsTask = cachesDic.GetTask<List<GridDetailModel>>(this, "Details"); Task<List<GridDetailModel>> detailsTask = cachesDic.GetTask<List<GridDetailModel>>(this, "Details");
Task<bool> getDataCachesTask = cachesDic.AddTask(this, "DataCaches", new Task<bool>(() =>
{
DynamicModel dynamicModel = dynamicModelTask.Result; DynamicModel dynamicModel = dynamicModelTask.Result;
List<GridDetailModel> details = detailsTask.Result; List<GridDetailModel> details = detailsTask.Result;
string DetaiName = string.Empty; string DetaiName = string.Empty;
@@ -605,8 +608,6 @@ namespace Lskj.Control
} }
List<GridDetailModel> isMeage = details.Cast<GridDetailModel>().Where(x => x.DetailName.Equals(model.DetailName)).ToList(); List<GridDetailModel> isMeage = details.Cast<GridDetailModel>().Where(x => x.DetailName.Equals(model.DetailName)).ToList();
if (model.IsChart) if (model.IsChart)
{
Task<object> chartControlExTask = cachesDic.AddTask(model, "ChartControlEx", new Task<object>(() =>
{ {
ChartControlEx chartEx = new ChartControlEx(); ChartControlEx chartEx = new ChartControlEx();
Task<DataTable> chartParamsTask = cachesDic.AddTask(chartEx, "ChartParams", new Task<DataTable>(() => Task<DataTable> chartParamsTask = cachesDic.AddTask(chartEx, "ChartParams", new Task<DataTable>(() =>
@@ -617,85 +618,53 @@ namespace Lskj.Control
{ {
return BaseModuleImpl.GetBaseGridRightMenus(model.FormKey); return BaseModuleImpl.GetBaseGridRightMenus(model.FormKey);
})); }));
return chartEx; PageControlsDic.Add(model, chartEx);
}));
PageControlsDic.Add(model, chartControlExTask);
} }
else if (model.IsExcel) else if (model.IsExcel)
{
Task<object> excelControlExTask = cachesDic.AddTask(model, "ExcelControlEx", new Task<object>(() =>
{ {
ExcelControlEx excelEx = new ExcelControlEx(); ExcelControlEx excelEx = new ExcelControlEx();
return excelEx; PageControlsDic.Add(model, excelEx);
}));
PageControlsDic.Add(model, excelControlExTask);
} }
else if (model.IsWebView) else if (model.IsWebView)
{ {
if (SystemInfo.Instance.PrimitiveBrowser) if (SystemInfo.Instance.PrimitiveBrowser)
{
Task<object> frmMiniBlinkTask = cachesDic.AddTask(model, "FrmMiniBlink", new Task<object>(() =>
{ {
FrmMiniBlink webView = new FrmMiniBlink(); FrmMiniBlink webView = new FrmMiniBlink();
return webView; PageControlsDic.Add(model, webView);
}));
PageControlsDic.Add(model, frmMiniBlinkTask);
} }
else else
{
Task<object> frmWebBrowserTask = cachesDic.AddTask(model, "FrmWebBrowser", new Task<object>(() =>
{ {
FrmWebBrowser webView = new FrmWebBrowser(); FrmWebBrowser webView = new FrmWebBrowser();
return webView; PageControlsDic.Add(model, webView);
}));
PageControlsDic.Add(model, frmWebBrowserTask);
} }
} }
else if (model.IsWebView2) else if (model.IsWebView2)
{ {
if (SystemInfo.Instance.PrimitiveBrowser) if (SystemInfo.Instance.PrimitiveBrowser)
{
Task<object> frmMiniBlinkTask = cachesDic.AddTask(model, "FrmMiniBlink", new Task<object>(() =>
{ {
FrmMiniBlink webView = new FrmMiniBlink(); FrmMiniBlink webView = new FrmMiniBlink();
return webView; PageControlsDic.Add(model, webView);
}));
PageControlsDic.Add(model, frmMiniBlinkTask);
} }
else else
{
Task<object> frmWebBrowser2Task = cachesDic.AddTask(model, "FrmWebBrowser2", new Task<object>(() =>
{ {
FrmWebBrowser2 webView = new FrmWebBrowser2(); FrmWebBrowser2 webView = new FrmWebBrowser2();
return webView; PageControlsDic.Add(model, webView);
}));
PageControlsDic.Add(model, frmWebBrowser2Task);
} }
} }
else if (model.IsWebView3) else if (model.IsWebView3)
{ {
if (SystemInfo.Instance.PrimitiveBrowser) if (SystemInfo.Instance.PrimitiveBrowser)
{
Task<object> frmMiniBlinkTask = cachesDic.AddTask(model, "FrmMiniBlink", new Task<object>(() =>
{ {
FrmMiniBlink webView = new FrmMiniBlink(); FrmMiniBlink webView = new FrmMiniBlink();
return webView; PageControlsDic.Add(model, webView);
}));
PageControlsDic.Add(model, frmMiniBlinkTask);
} }
else else
{
Task<object> frmWebBrowser2Task = cachesDic.AddTask(model, "FrmWebBrowser2", new Task<object>(() =>
{ {
FrmWebBrowser2 webView = new FrmWebBrowser2(); FrmWebBrowser2 webView = new FrmWebBrowser2();
return webView; PageControlsDic.Add(model, webView);
}));
PageControlsDic.Add(model, frmWebBrowser2Task);
} }
} }
else if (model.IsAddPanel && isGridmerge) else if (model.IsAddPanel && isGridmerge)
{
Task<object> modulePanelExTask = cachesDic.AddTask(model, "ModulePanelEx", new Task<object>(() =>
{ {
ModulePanelEx modulePanel = new ModulePanelEx(); ModulePanelEx modulePanel = new ModulePanelEx();
Task<string> basePrimaryKeyTask = cachesDic.AddTask(modulePanel, "BasePrimaryKey", new Task<string>(() => Task<string> basePrimaryKeyTask = cachesDic.AddTask(modulePanel, "BasePrimaryKey", new Task<string>(() =>
@@ -707,13 +676,9 @@ namespace Lskj.Control
return MainImpl.GetSystemdllTab(dynamicModel.ModuleCode); return MainImpl.GetSystemdllTab(dynamicModel.ModuleCode);
})); }));
modulePanel.GetDataCaches(cachesDic, new ModuleModel(systemdllTabTask.Result), dynamicModel); modulePanel.GetDataCaches(cachesDic, new ModuleModel(systemdllTabTask.Result), dynamicModel);
return modulePanel; PageControlsDic.Add(model, modulePanel);
}));
PageControlsDic.Add(model, modulePanelExTask);
} }
else if (model.IsDetailView) else if (model.IsDetailView)
{
Task<object> moduleGridDetailExTask = cachesDic.AddTask(model, "ModuleGridDetailEx", new Task<object>(() =>
{ {
ModuleGridDetailEx DetailEx = new ModuleGridDetailEx(); ModuleGridDetailEx DetailEx = new ModuleGridDetailEx();
Task<DynamicModel> detailViewDynamicModelTask = cachesDic.AddTask(DetailEx, "DynamicModel", new Task<DynamicModel>(() => Task<DynamicModel> detailViewDynamicModelTask = cachesDic.AddTask(DetailEx, "DynamicModel", new Task<DynamicModel>(() =>
@@ -732,7 +697,7 @@ namespace Lskj.Control
})); }));
if (detailViewSystemDllRowTask.Result == null) if (detailViewSystemDllRowTask.Result == null)
{ {
return DetailEx; return;
} }
Task<ModuleModel> detailViewSystemModelTask = cachesDic.AddTask(DetailEx, "SysModel", new Task<ModuleModel>(() => Task<ModuleModel> detailViewSystemModelTask = cachesDic.AddTask(DetailEx, "SysModel", new Task<ModuleModel>(() =>
{ {
@@ -747,15 +712,11 @@ namespace Lskj.Control
return BaseModuleImpl.GetBaseGridRightMenus(model.UnionModule, ModuleType.MrpClickBtn); return BaseModuleImpl.GetBaseGridRightMenus(model.UnionModule, ModuleType.MrpClickBtn);
})); }));
DetailEx.GetDataCaches(cachesDic); DetailEx.GetDataCaches(cachesDic);
return DetailEx; PageControlsDic.Add(model, DetailEx);
}));
PageControlsDic.Add(model, moduleGridDetailExTask);
} }
else else
{ {
if (model.IsReadOnly && isMeage.Count() == 1) if (model.IsReadOnly && isMeage.Count() == 1)
{
Task<object> gridControlExTask = cachesDic.AddTask(model, "GridControlEx", new Task<object>(() =>
{ {
GridControlEx gridEx = model.AutoMultiHeader == 1 ? new BandedGridControlEx() : new GridControlEx(); GridControlEx gridEx = model.AutoMultiHeader == 1 ? new BandedGridControlEx() : new GridControlEx();
Task<bool> hasExistsSettingTableTask = cachesDic.AddTask(gridEx, "HasExistsSettingTable", new Task<bool>(() => Task<bool> hasExistsSettingTableTask = cachesDic.AddTask(gridEx, "HasExistsSettingTable", new Task<bool>(() =>
@@ -787,24 +748,16 @@ namespace Lskj.Control
return BaseModuleImpl.GetCustomQueryFields(model.FormKey); return BaseModuleImpl.GetCustomQueryFields(model.FormKey);
})); }));
} }
return gridEx; PageControlsDic.Add(model, gridEx);
}));
PageControlsDic.Add(model, gridControlExTask);
} }
else if (isMeage.Count() > 1 && isGridmerge) else if (isMeage.Count() > 1 && isGridmerge)
{ {
DetaiName = model.DetailName; DetaiName = model.DetailName;
Task<object> tabMultipledetailsTask = cachesDic.AddTask(model, "TabMultipledetails", new Task<object>(() =>
{
TabMultipledetails tabMultipledetails = new TabMultipledetails(); TabMultipledetails tabMultipledetails = new TabMultipledetails();
return tabMultipledetails; PageControlsDic.Add(model, tabMultipledetails);
}));
PageControlsDic.Add(model, tabMultipledetailsTask);
//tabMultipledetails.InitTabPages(isMeage); //tabMultipledetails.InitTabPages(isMeage);
} }
else else
{
Task<object> moduleGridExTask = cachesDic.AddTask(model, "ModuleGridEx", new Task<object>(() =>
{ {
ModuleGridEx gridEx = new ModuleGridEx(); ModuleGridEx gridEx = new ModuleGridEx();
Task<DynamicModel> gridExDynamicModelTask = cachesDic.AddTask(gridEx, "DynamicModel", new Task<DynamicModel>(() => Task<DynamicModel> gridExDynamicModelTask = cachesDic.AddTask(gridEx, "DynamicModel", new Task<DynamicModel>(() =>
@@ -838,17 +791,12 @@ namespace Lskj.Control
{ {
//gridEx.SearchObj.SearchGrid(); //gridEx.SearchObj.SearchGrid();
} }
return gridEx; PageControlsDic.Add(model, gridEx);
}));
PageControlsDic.Add(model, moduleGridExTask);
} }
} }
} }
return true;
}));
} }
/// <summary> /// <summary>
/// 页签大小改变时 /// 页签大小改变时
/// </summary> /// </summary>
@@ -1278,7 +1226,7 @@ namespace Lskj.Control
{ {
gridControl.GridView.DoubleClick += new EventHandler(OnGridCompleted); gridControl.GridView.DoubleClick += new EventHandler(OnGridCompleted);
} }
tabPage.Text = model.DetailName + "(" + dataRowCount + ")"; tabPage.Text = gridControl.CustomGroupBandEx != null ? model.DetailName + "(" + gridControl.CustomGroupBandEx.DataRowCount() + "条)" : model.DetailName + "(" + dataRowCount + ")";
tabPage.Appearance.Header.ForeColor = dataRowCount > 0 ? Color.Red : Color.FromArgb(0, 0, 0); tabPage.Appearance.Header.ForeColor = dataRowCount > 0 ? Color.Red : Color.FromArgb(0, 0, 0);
} }
@@ -1644,33 +1592,4 @@ namespace Lskj.Control
{ {
Object moduleObject = tabPage.Controls.Cast<Object>().FirstOrDefault(); Object moduleObject = tabPage.Controls.Cast<Object>().FirstOrDefault();
if (moduleObject is ModuleGridEx) if (moduleObject is ModuleGridEx)
{
ModuleGridEx moduleGridEx = moduleObject as ModuleGridEx;
bool SaveResults = moduleGridEx.SaveWhenSwitching();
if (!SaveResults) return false;
}
}
}
}
}
catch (Exception ex)
{
string Message = ErrorMessage.PromptErrorMessage(ex);
MessageUtil.Show(Message, ex.Message);
LogHelper.Instance.WriteError(ex);
return false;
}
return true;
}
/// <summary>
/// 控件注销时
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnTabControlExDisposed(object sender, EventArgs e)
{
PageControlsDic?.Clear();
DetailTabPagesDic?.Clear();
}
}
}