From 1a2bcaa7bec4f0bc681e55d1ccc61b14427c98ce Mon Sep 17 00:00:00 2001 From: lixiaojun <1287241240@qq.com> Date: 星期六, 25 一月 2025 12:45:20 +0800 Subject: [PATCH] 增加构件自定义参数 --- WinFrmUI/Yw.WinFrmUI.Core/04-property/DictionaryPropertyAdapter.cs | 128 ++++++ WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/00-core/ImportXhsProjectHelper.cs | 8 WinFrmUI/Yw.WinFrmUI.Core/09-common/08-paras/SetParasDlg.resx | 120 ++++++ WinFrmUI/Yw.WinFrmUI.Core/09-common/08-paras/SetParasGridCtrl.cs | 148 +++++++ Desktop/HStation.Desktop.Xhs.Core/Properties/PublishProfiles/FolderProfile.pubxml.user | 2 WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/01-parter/HydroParterViewModel.cs | 17 Entry/HStation.Entry.Xhs.Core/Properties/PublishProfiles/FolderProfile.pubxml.user | 2 WinFrmUI/Yw.WinFrmUI.Core/09-common/08-paras/ParasItemViewModel.cs | 26 + WinFrmUI/Yw.WinFrmUI.Core/09-common/08-paras/SetParasDlg.cs | 46 ++ WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj | 2 Hydro/HStation.Hydro.Core/HStation.Hydro.Core.csproj | 2 WinFrmUI/Yw.WinFrmUI.Core/09-common/08-paras/SetParasGridCtrl.Designer.cs | 150 +++++++ Hydro/Yw.Hydro.Core/Yw.Hydro.Core.csproj | 2 WinFrmUI/Yw.WinFrmUI.Core/Yw.WinFrmUI.Core.csproj | 6 WinFrmUI/Yw.WinFrmUI.Core/04-property/DictionaryPropertyDescriptor.cs | 94 ++++ WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/00-core/03-calcu/02-label/SimulationCalcuResultLabelHelper.cs | 64 ++ WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/05-attribute/HydroParasProAttribute.cs | 18 WinFrmUI/Yw.WinFrmUI.Hydro.Core/05-property/HydroVisualPropertyCtrl.cs | 38 + WinFrmUI/Yw.WinFrmUI.Core/09-common/08-paras/SetParasDlg.Designer.cs | 131 ++++++ Entry/HStation.Entry.Xhs.Core/HStation.Entry.Xhs.Core.csproj | 2 WinFrmUI/Yw.WinFrmUI.Core/09-common/08-paras/SetParasGridCtrl.resx | 145 +++++++ 21 files changed, 1,123 insertions(+), 28 deletions(-) diff --git a/Desktop/HStation.Desktop.Xhs.Core/Properties/PublishProfiles/FolderProfile.pubxml.user b/Desktop/HStation.Desktop.Xhs.Core/Properties/PublishProfiles/FolderProfile.pubxml.user index 3e9889c..a49b31f 100644 --- a/Desktop/HStation.Desktop.Xhs.Core/Properties/PublishProfiles/FolderProfile.pubxml.user +++ b/Desktop/HStation.Desktop.Xhs.Core/Properties/PublishProfiles/FolderProfile.pubxml.user @@ -4,7 +4,7 @@ --> <Project> <PropertyGroup> - <History>True|2025-01-23T06:29:01.1814366Z;True|2025-01-23T14:28:18.0513868+08:00;True|2025-01-23T13:53:07.5061161+08:00;True|2025-01-23T12:58:32.3093753+08:00;True|2025-01-23T12:58:02.8169460+08:00;True|2025-01-23T12:57:05.6740839+08:00;True|2025-01-23T11:07:51.4564403+08:00;True|2025-01-13T11:03:21.1732352+08:00;True|2024-10-21T12:02:00.7754536+08:00;False|2024-10-21T11:51:29.4414327+08:00;False|2024-10-21T11:50:51.8640100+08:00;False|2024-10-21T11:49:14.9169777+08:00;</History> + <History>True|2025-01-25T04:27:20.2443551Z;True|2025-01-24T09:16:09.4525881+08:00;True|2025-01-23T14:29:01.1814366+08:00;True|2025-01-23T14:28:18.0513868+08:00;True|2025-01-23T13:53:07.5061161+08:00;True|2025-01-23T12:58:32.3093753+08:00;True|2025-01-23T12:58:02.8169460+08:00;True|2025-01-23T12:57:05.6740839+08:00;True|2025-01-23T11:07:51.4564403+08:00;True|2025-01-13T11:03:21.1732352+08:00;True|2024-10-21T12:02:00.7754536+08:00;False|2024-10-21T11:51:29.4414327+08:00;False|2024-10-21T11:50:51.8640100+08:00;False|2024-10-21T11:49:14.9169777+08:00;</History> <LastFailureDetails /> </PropertyGroup> </Project> \ No newline at end of file diff --git a/Entry/HStation.Entry.Xhs.Core/HStation.Entry.Xhs.Core.csproj b/Entry/HStation.Entry.Xhs.Core/HStation.Entry.Xhs.Core.csproj index 8c71ca7..0156368 100644 --- a/Entry/HStation.Entry.Xhs.Core/HStation.Entry.Xhs.Core.csproj +++ b/Entry/HStation.Entry.Xhs.Core/HStation.Entry.Xhs.Core.csproj @@ -20,7 +20,7 @@ <PackageReference Include="Yw.Application.Basic.Core" Version="3.3.2" /> <PackageReference Include="Yw.Application.Bimface.Core" Version="3.2.0" /> <PackageReference Include="Yw.Application.Dict.Core" Version="3.1.3" /> - <PackageReference Include="Yw.Application.Hydro.Core" Version="3.8.0" /> + <PackageReference Include="Yw.Application.Hydro.Core" Version="3.8.1" /> <PackageReference Include="Yw.Application.Map.Core" Version="3.2.2" /> <PackageReference Include="Yw.Application.Phart.Core" Version="3.3.1" /> <PackageReference Include="Yw.Application.Unit.Core" Version="3.1.8" /> diff --git a/Entry/HStation.Entry.Xhs.Core/Properties/PublishProfiles/FolderProfile.pubxml.user b/Entry/HStation.Entry.Xhs.Core/Properties/PublishProfiles/FolderProfile.pubxml.user index e948a76..ba9f489 100644 --- a/Entry/HStation.Entry.Xhs.Core/Properties/PublishProfiles/FolderProfile.pubxml.user +++ b/Entry/HStation.Entry.Xhs.Core/Properties/PublishProfiles/FolderProfile.pubxml.user @@ -5,7 +5,7 @@ <Project> <PropertyGroup> <_PublishTargetUrl>D:\WorkData\git\HStation\XHS\Entry\HStation.Entry.Xhs.Core\bin\Release\net6.0\publish\</_PublishTargetUrl> - <History>True|2025-01-24T01:10:22.0248945Z;True|2025-01-23T10:54:42.2796686+08:00;True|2025-01-22T07:53:29.9931150+08:00;True|2025-01-21T11:37:36.9296374+08:00;True|2025-01-20T10:42:21.8992153+08:00;True|2025-01-20T10:41:30.8562468+08:00;True|2025-01-20T10:36:54.9849821+08:00;True|2025-01-20T10:31:16.0442319+08:00;True|2025-01-13T15:07:40.9182715+08:00;True|2025-01-13T12:08:58.0115763+08:00;True|2025-01-13T12:08:44.3187386+08:00;True|2025-01-13T12:07:41.4659157+08:00;True|2025-01-13T11:53:47.1828627+08:00;True|2025-01-13T11:38:53.6150404+08:00;True|2025-01-13T11:37:14.9075336+08:00;True|2025-01-13T11:35:23.3939940+08:00;True|2025-01-13T11:33:41.6199459+08:00;True|2025-01-13T11:32:15.2734783+08:00;True|2025-01-13T11:30:39.9296756+08:00;True|2025-01-13T11:25:02.3605923+08:00;True|2025-01-13T11:21:03.0110309+08:00;True|2025-01-13T11:17:46.3662069+08:00;True|2025-01-08T09:44:09.5132234+08:00;True|2024-09-03T11:22:43.3813050+08:00;True|2024-09-03T11:06:18.0799295+08:00;True|2024-09-03T10:52:25.3198740+08:00;True|2024-09-02T09:16:17.5197059+08:00;False|2024-09-02T09:08:02.4504522+08:00;True|2024-06-20T12:16:07.3854116+08:00;True|2024-06-18T09:13:21.8960491+08:00;True|2024-06-12T18:55:43.2697624+08:00;True|2024-06-12T18:54:42.2191664+08:00;True|2024-06-12T18:37:39.2735086+08:00;True|2024-06-12T18:32:59.2340941+08:00;True|2024-06-12T18:18:57.9018714+08:00;True|2024-06-12T18:13:13.4471521+08:00;True|2024-06-12T18:11:38.4803257+08:00;True|2024-06-12T18:10:00.3753638+08:00;True|2024-06-12T18:03:08.9521607+08:00;True|2024-06-12T17:59:46.2755740+08:00;True|2024-06-12T17:58:01.8017051+08:00;True|2024-06-12T17:56:20.6946001+08:00;True|2024-06-12T17:32:53.8291604+08:00;True|2024-06-12T17:32:38.6492118+08:00;False|2024-06-12T17:32:17.0260105+08:00;True|2024-06-12T17:08:59.9367775+08:00;True|2024-06-12T16:32:42.3320305+08:00;True|2024-06-07T13:34:17.3014803+08:00;True|2024-06-07T13:20:33.5124438+08:00;True|2024-06-07T10:24:47.0351087+08:00;True|2024-06-05T17:04:55.4017239+08:00;True|2024-06-05T16:05:35.1432805+08:00;True|2024-06-05T15:18:06.1797165+08:00;True|2024-06-05T13:53:59.9366676+08:00;True|2024-06-05T13:43:45.7009774+08:00;True|2024-06-05T13:38:18.1415782+08:00;True|2024-06-05T12:14:05.4745826+08:00;True|2024-06-05T12:10:02.8443283+08:00;True|2024-06-02T18:41:28.5233205+08:00;True|2024-06-02T18:21:27.5679625+08:00;True|2024-06-02T17:34:02.6234679+08:00;True|2024-06-02T16:58:23.9422671+08:00;True|2024-06-02T16:16:43.6949096+08:00;True|2024-06-02T14:44:06.8963915+08:00;True|2024-06-02T11:10:51.5587482+08:00;True|2024-06-01T11:30:39.5033584+08:00;True|2024-05-30T16:29:38.0730664+08:00;True|2024-05-30T15:16:14.5429969+08:00;True|2024-05-29T17:31:27.5349115+08:00;True|2024-05-29T16:49:44.3085849+08:00;True|2024-05-29T10:46:15.3071701+08:00;True|2024-05-28T16:21:22.2987178+08:00;True|2024-05-28T11:55:02.0680294+08:00;True|2024-05-24T09:27:50.0479340+08:00;True|2024-05-23T14:16:32.3824342+08:00;True|2024-05-23T10:51:43.4383910+08:00;True|2024-05-22T11:19:10.1709647+08:00;True|2024-05-22T11:12:47.8835237+08:00;True|2024-05-22T10:43:34.7720709+08:00;True|2024-05-21T17:25:46.9831973+08:00;True|2024-05-21T12:11:55.2774332+08:00;True|2024-05-13T10:32:18.9951394+08:00;True|2024-05-09T09:53:09.1673089+08:00;True|2024-05-08T17:18:58.3017566+08:00;True|2024-05-08T11:15:08.3734126+08:00;True|2024-05-07T10:59:04.2016283+08:00;True|2024-05-07T10:58:56.6254107+08:00;True|2024-05-07T10:56:03.7274034+08:00;True|2024-05-07T10:55:53.5496684+08:00;True|2024-05-07T10:55:41.1246352+08:00;True|2024-05-07T09:57:18.3908307+08:00;True|2024-05-06T18:17:15.0427456+08:00;True|2024-05-06T17:38:00.0855585+08:00;True|2024-05-06T14:04:15.4665470+08:00;True|2024-05-06T09:38:06.9447096+08:00;False|2024-05-06T09:37:21.4257032+08:00;True|2024-04-30T10:27:11.6268274+08:00;True|2024-04-29T17:32:47.8657162+08:00;True|2024-04-29T17:26:03.4222331+08:00;True|2024-04-29T15:01:02.7501034+08:00;</History> + <History>True|2025-01-25T04:24:10.7702918Z;True|2025-01-24T09:10:22.0248945+08:00;True|2025-01-23T10:54:42.2796686+08:00;True|2025-01-22T07:53:29.9931150+08:00;True|2025-01-21T11:37:36.9296374+08:00;True|2025-01-20T10:42:21.8992153+08:00;True|2025-01-20T10:41:30.8562468+08:00;True|2025-01-20T10:36:54.9849821+08:00;True|2025-01-20T10:31:16.0442319+08:00;True|2025-01-13T15:07:40.9182715+08:00;True|2025-01-13T12:08:58.0115763+08:00;True|2025-01-13T12:08:44.3187386+08:00;True|2025-01-13T12:07:41.4659157+08:00;True|2025-01-13T11:53:47.1828627+08:00;True|2025-01-13T11:38:53.6150404+08:00;True|2025-01-13T11:37:14.9075336+08:00;True|2025-01-13T11:35:23.3939940+08:00;True|2025-01-13T11:33:41.6199459+08:00;True|2025-01-13T11:32:15.2734783+08:00;True|2025-01-13T11:30:39.9296756+08:00;True|2025-01-13T11:25:02.3605923+08:00;True|2025-01-13T11:21:03.0110309+08:00;True|2025-01-13T11:17:46.3662069+08:00;True|2025-01-08T09:44:09.5132234+08:00;True|2024-09-03T11:22:43.3813050+08:00;True|2024-09-03T11:06:18.0799295+08:00;True|2024-09-03T10:52:25.3198740+08:00;True|2024-09-02T09:16:17.5197059+08:00;False|2024-09-02T09:08:02.4504522+08:00;True|2024-06-20T12:16:07.3854116+08:00;True|2024-06-18T09:13:21.8960491+08:00;True|2024-06-12T18:55:43.2697624+08:00;True|2024-06-12T18:54:42.2191664+08:00;True|2024-06-12T18:37:39.2735086+08:00;True|2024-06-12T18:32:59.2340941+08:00;True|2024-06-12T18:18:57.9018714+08:00;True|2024-06-12T18:13:13.4471521+08:00;True|2024-06-12T18:11:38.4803257+08:00;True|2024-06-12T18:10:00.3753638+08:00;True|2024-06-12T18:03:08.9521607+08:00;True|2024-06-12T17:59:46.2755740+08:00;True|2024-06-12T17:58:01.8017051+08:00;True|2024-06-12T17:56:20.6946001+08:00;True|2024-06-12T17:32:53.8291604+08:00;True|2024-06-12T17:32:38.6492118+08:00;False|2024-06-12T17:32:17.0260105+08:00;True|2024-06-12T17:08:59.9367775+08:00;True|2024-06-12T16:32:42.3320305+08:00;True|2024-06-07T13:34:17.3014803+08:00;True|2024-06-07T13:20:33.5124438+08:00;True|2024-06-07T10:24:47.0351087+08:00;True|2024-06-05T17:04:55.4017239+08:00;True|2024-06-05T16:05:35.1432805+08:00;True|2024-06-05T15:18:06.1797165+08:00;True|2024-06-05T13:53:59.9366676+08:00;True|2024-06-05T13:43:45.7009774+08:00;True|2024-06-05T13:38:18.1415782+08:00;True|2024-06-05T12:14:05.4745826+08:00;True|2024-06-05T12:10:02.8443283+08:00;True|2024-06-02T18:41:28.5233205+08:00;True|2024-06-02T18:21:27.5679625+08:00;True|2024-06-02T17:34:02.6234679+08:00;True|2024-06-02T16:58:23.9422671+08:00;True|2024-06-02T16:16:43.6949096+08:00;True|2024-06-02T14:44:06.8963915+08:00;True|2024-06-02T11:10:51.5587482+08:00;True|2024-06-01T11:30:39.5033584+08:00;True|2024-05-30T16:29:38.0730664+08:00;True|2024-05-30T15:16:14.5429969+08:00;True|2024-05-29T17:31:27.5349115+08:00;True|2024-05-29T16:49:44.3085849+08:00;True|2024-05-29T10:46:15.3071701+08:00;True|2024-05-28T16:21:22.2987178+08:00;True|2024-05-28T11:55:02.0680294+08:00;True|2024-05-24T09:27:50.0479340+08:00;True|2024-05-23T14:16:32.3824342+08:00;True|2024-05-23T10:51:43.4383910+08:00;True|2024-05-22T11:19:10.1709647+08:00;True|2024-05-22T11:12:47.8835237+08:00;True|2024-05-22T10:43:34.7720709+08:00;True|2024-05-21T17:25:46.9831973+08:00;True|2024-05-21T12:11:55.2774332+08:00;True|2024-05-13T10:32:18.9951394+08:00;True|2024-05-09T09:53:09.1673089+08:00;True|2024-05-08T17:18:58.3017566+08:00;True|2024-05-08T11:15:08.3734126+08:00;True|2024-05-07T10:59:04.2016283+08:00;True|2024-05-07T10:58:56.6254107+08:00;True|2024-05-07T10:56:03.7274034+08:00;True|2024-05-07T10:55:53.5496684+08:00;True|2024-05-07T10:55:41.1246352+08:00;True|2024-05-07T09:57:18.3908307+08:00;True|2024-05-06T18:17:15.0427456+08:00;True|2024-05-06T17:38:00.0855585+08:00;True|2024-05-06T14:04:15.4665470+08:00;True|2024-05-06T09:38:06.9447096+08:00;False|2024-05-06T09:37:21.4257032+08:00;True|2024-04-30T10:27:11.6268274+08:00;True|2024-04-29T17:32:47.8657162+08:00;True|2024-04-29T17:26:03.4222331+08:00;</History> <LastFailureDetails /> </PropertyGroup> </Project> \ No newline at end of file diff --git a/Hydro/HStation.Hydro.Core/HStation.Hydro.Core.csproj b/Hydro/HStation.Hydro.Core/HStation.Hydro.Core.csproj index 8cf6007..6496326 100644 --- a/Hydro/HStation.Hydro.Core/HStation.Hydro.Core.csproj +++ b/Hydro/HStation.Hydro.Core/HStation.Hydro.Core.csproj @@ -7,7 +7,7 @@ </PropertyGroup> <ItemGroup> - <PackageReference Include="Yw.Service.Hydro.Core" Version="5.0.8" /> + <PackageReference Include="Yw.Service.Hydro.Core" Version="5.0.9" /> </ItemGroup> <ItemGroup> diff --git a/Hydro/Yw.Hydro.Core/Yw.Hydro.Core.csproj b/Hydro/Yw.Hydro.Core/Yw.Hydro.Core.csproj index 857575b..422ca54 100644 --- a/Hydro/Yw.Hydro.Core/Yw.Hydro.Core.csproj +++ b/Hydro/Yw.Hydro.Core/Yw.Hydro.Core.csproj @@ -8,7 +8,7 @@ <ItemGroup> <PackageReference Include="Yw.Geometry.Core" Version="3.3.2" /> - <PackageReference Include="Yw.Service.Hydro.Core" Version="5.0.8" /> + <PackageReference Include="Yw.Service.Hydro.Core" Version="5.0.9" /> </ItemGroup> <ItemGroup> diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/00-core/ImportXhsProjectHelper.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/00-core/ImportXhsProjectHelper.cs index 2e564da..77f9dda 100644 --- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/00-core/ImportXhsProjectHelper.cs +++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/00-core/ImportXhsProjectHelper.cs @@ -333,8 +333,8 @@ return true; } - //var bimfaceId = await Yw.WinFrmUI.BimfaceHelper.UploadFile(rvtFileInfo.FullName);//姝e紡浠g爜 - var bimfaceId = 10000884893369;//娴嬭瘯鐢ㄤ緥 鍒舵爱寰幆:10000884893369 10000894297457 10000895957527 10000896316958 10000896755736 10000899666805 + var bimfaceId = await Yw.WinFrmUI.BimfaceHelper.UploadFile(rvtFileInfo.FullName);//姝e紡浠g爜 + //var bimfaceId = 10000884893369;//娴嬭瘯鐢ㄤ緥 鍒舵爱寰幆:10000884893369 10000896755736 10000899666805 if (bimfaceId < 1) { feedBackMsg?.Invoke("Revit妯″瀷鏂囦欢涓婁紶澶辫触锛侊紒锛�", Color.Red); @@ -404,8 +404,8 @@ feedBackProgress?.Invoke(100, 60); feedBackMsg?.Invoke("姝e湪杩涜妯″瀷杞婚噺鍖�...", Color.Black); - //var bimfaceTranslateStatus = await Yw.WinFrmUI.BimfaceHelper.TranslateRvtFile(bimfaceId);//鍙戣捣杞崲 - var bimfaceTranslateStatus = Yw.BIMFace.eTranslateStatus.Processing;//娴嬭瘯浠g爜 + var bimfaceTranslateStatus = await Yw.WinFrmUI.BimfaceHelper.TranslateRvtFile(bimfaceId);//鍙戣捣杞崲 + //var bimfaceTranslateStatus = Yw.BIMFace.eTranslateStatus.Processing;//娴嬭瘯浠g爜 if (bimfaceTranslateStatus != Yw.BIMFace.eTranslateStatus.Success) { diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/00-core/03-calcu/02-label/SimulationCalcuResultLabelHelper.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/00-core/03-calcu/02-label/SimulationCalcuResultLabelHelper.cs index 6a2765e..e549194 100644 --- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/00-core/03-calcu/02-label/SimulationCalcuResultLabelHelper.cs +++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/00-core/03-calcu/02-label/SimulationCalcuResultLabelHelper.cs @@ -97,6 +97,18 @@ new LogicCalcuCustomLabelItem(){ Name="杩涘彛鍘嬪姏",Value=Math.Round(calcuPumpResult.CalcuPr1.Value,2).ToString(),Unit="m"}, new LogicCalcuCustomLabelItem(){ Name="鍑哄彛鍘嬪姏",Value=Math.Round(calcuPumpResult.CalcuPr2.Value,2).ToString(),Unit="m"}, }; + if (x.Paras != null && x.Paras.Count > 0) + { + foreach (var item in x.Paras) + { + pumpCustomLabel.Data.Add(new LogicCalcuCustomLabelItem() + { + Name = item.Key, + Value = item.Value, + Unit = string.Empty + }); + } + } allCalcuLabels.Add(pumpCustomLabel); } }); @@ -136,6 +148,18 @@ new LogicCalcuCustomLabelItem(){ Name="娴侀噺",Value=Math.Round(calcuEmitter.CalcuQ.Value,1).ToString(),Unit="m鲁/h"}, new LogicCalcuCustomLabelItem(){ Name="鍘嬪姏",Value=Math.Round(calcuEmitter.CalcuPr.Value,2).ToString(),Unit="m"} }; + if (x.Paras != null && x.Paras.Count > 0) + { + foreach (var item in x.Paras) + { + emitterCustomLabel.Data.Add(new LogicCalcuCustomLabelItem() + { + Name = item.Key, + Value = item.Value, + Unit = string.Empty + }); + } + } allCalcuLabels.Add(emitterCustomLabel); }); @@ -143,20 +167,32 @@ #region 姘村姏闃讳欢 - //_calcuResultHelper.HydroInfo.GetAllResistances()?.ForEach(x => - //{ - // var calcuResistanceResult = allCalcuResultVisualDict.GetValue(x.Code) as HydroCalcuResistanceResult; - // var resistanceCustomLabel = new LogicCalcuCustomLabel(); - // resistanceCustomLabel.Id = x.Code; - // resistanceCustomLabel.Distance = 50000; - // resistanceCustomLabel.Data = new List<LogicCalcuCustomLabelItem>() - // { - // new LogicCalcuCustomLabelItem(){ Name="娴侀噺",Value=Math.Round(calcuResistanceResult.CalcuQ.Value,1).ToString(),Unit="m鲁/h"}, - // new LogicCalcuCustomLabelItem(){ Name="杩涘彛鍘嬪姏",Value=Math.Round(calcuResistanceResult.CalcuPr1.Value,2).ToString(),Unit="m"}, - // new LogicCalcuCustomLabelItem(){ Name="鍑哄彛鍘嬪姏",Value=Math.Round(calcuResistanceResult.CalcuPr2.Value,2).ToString(),Unit="m"} - // }; - // allCalcuLabels.Add(resistanceCustomLabel); - //}); + _calcuResultHelper.HydroInfo.GetAllResistances()?.ForEach(x => + { + var calcuResistanceResult = allCalcuResultVisualDict.GetValue(x.Code) as HydroCalcuResistanceResult; + var resistanceCustomLabel = new LogicCalcuCustomLabel(); + resistanceCustomLabel.Id = x.Code; + resistanceCustomLabel.Distance = 50000; + resistanceCustomLabel.Data = new List<LogicCalcuCustomLabelItem>() + { + new LogicCalcuCustomLabelItem(){ Name="娴侀噺",Value=Math.Round(calcuResistanceResult.CalcuQ.Value,1).ToString(),Unit="m鲁/h"}, + new LogicCalcuCustomLabelItem(){ Name="杩涘彛鍘嬪姏",Value=Math.Round(calcuResistanceResult.CalcuPr1.Value,2).ToString(),Unit="m"}, + new LogicCalcuCustomLabelItem(){ Name="鍑哄彛鍘嬪姏",Value=Math.Round(calcuResistanceResult.CalcuPr2.Value,2).ToString(),Unit="m"} + }; + if (x.Paras != null && x.Paras.Count > 0) + { + foreach (var item in x.Paras) + { + resistanceCustomLabel.Data.Add(new LogicCalcuCustomLabelItem() + { + Name = item.Key, + Value = item.Value, + Unit = string.Empty + }); + } + } + allCalcuLabels.Add(resistanceCustomLabel); + }); #endregion diff --git a/WinFrmUI/Yw.WinFrmUI.Core/04-property/DictionaryPropertyAdapter.cs b/WinFrmUI/Yw.WinFrmUI.Core/04-property/DictionaryPropertyAdapter.cs new file mode 100644 index 0000000..6e43170 --- /dev/null +++ b/WinFrmUI/Yw.WinFrmUI.Core/04-property/DictionaryPropertyAdapter.cs @@ -0,0 +1,128 @@ +锘縩amespace Yw.WinFrmUI +{ + /// <summary> + /// + /// </summary> + [TypeConverter(typeof(ExpandableObjectConverter))] + public class DictionaryPropertyAdapter : ICustomTypeDescriptor + { + + /// <summary> + /// + /// </summary> + public DictionaryPropertyAdapter(IDictionary d) + { + _dictionary = d; + } + + /// <summary> + /// + /// </summary> + public IDictionary Dictionary + { + get { return _dictionary; } + } + private IDictionary _dictionary; + + /// <summary> + /// + /// </summary> + public string GetComponentName() + { + return TypeDescriptor.GetComponentName(this, true); + } + + /// <summary> + /// + /// </summary> + public EventDescriptor GetDefaultEvent() + { + return TypeDescriptor.GetDefaultEvent(this, true); + } + + /// <summary> + /// + /// </summary> + public string GetClassName() + { + return TypeDescriptor.GetClassName(this, true); + } + + /// <summary> + /// + /// </summary> + public EventDescriptorCollection GetEvents(Attribute[] attributes) + { + return TypeDescriptor.GetEvents(this, attributes, true); + } + + EventDescriptorCollection System.ComponentModel.ICustomTypeDescriptor.GetEvents() + { + return TypeDescriptor.GetEvents(this, true); + } + + /// <summary> + /// + /// </summary> + public TypeConverter GetConverter() + { + return TypeDescriptor.GetConverter(this, true); + } + + /// <summary> + /// + /// </summary> + public object GetPropertyOwner(PropertyDescriptor pd) + { + return _dictionary; + } + + /// <summary> + /// + /// </summary> + public AttributeCollection GetAttributes() + { + return TypeDescriptor.GetAttributes(this, true); + } + + /// <summary> + /// + /// </summary> + public object GetEditor(Type editorBaseType) + { + return TypeDescriptor.GetEditor(this, editorBaseType, true); + } + + /// <summary> + /// + /// </summary> + public PropertyDescriptor GetDefaultProperty() + { + return null; + } + + PropertyDescriptorCollection System.ComponentModel.ICustomTypeDescriptor.GetProperties() + { + return ((ICustomTypeDescriptor)this).GetProperties(new Attribute[0]); + } + + /// <summary> + /// + /// </summary> + public PropertyDescriptorCollection GetProperties(Attribute[] attributes) + { + ArrayList properties = new ArrayList(); + foreach (DictionaryEntry e in _dictionary) + { + properties.Add(new DictionaryPropertyDescriptor(_dictionary, e.Key)); + } + + PropertyDescriptor[] props = + (PropertyDescriptor[])properties.ToArray(typeof(PropertyDescriptor)); + + return new PropertyDescriptorCollection(props); + } + + + } +} \ No newline at end of file diff --git a/WinFrmUI/Yw.WinFrmUI.Core/04-property/DictionaryPropertyDescriptor.cs b/WinFrmUI/Yw.WinFrmUI.Core/04-property/DictionaryPropertyDescriptor.cs new file mode 100644 index 0000000..245d559 --- /dev/null +++ b/WinFrmUI/Yw.WinFrmUI.Core/04-property/DictionaryPropertyDescriptor.cs @@ -0,0 +1,94 @@ +锘縩amespace Yw.WinFrmUI +{ + /// <summary> + /// + /// </summary> + public class DictionaryPropertyDescriptor : PropertyDescriptor + { + /// <summary> + /// + /// </summary> + public DictionaryPropertyDescriptor(IDictionary d, object key) : base(key.ToString(), null) + { + _dictionary = d; + _key = key; + } + + private IDictionary _dictionary; + private object _key; + + /// <summary> + /// + /// </summary> + public override Type PropertyType + { + get + { + var value = _dictionary[_key]; + if (value == null) + { + return typeof(string); + } + return value.GetType(); + } + } + + /// <summary> + /// + /// </summary> + public override void SetValue(object component, object value) + { + _dictionary[_key] = value; + } + + /// <summary> + /// + /// </summary> + public override object GetValue(object component) + { + return _dictionary[_key]; + } + + /// <summary> + /// + /// </summary> + public override bool IsReadOnly + { + get { return false; } + } + + /// <summary> + /// + /// </summary> + public override Type ComponentType + { + get { return null; } + } + + /// <summary> + /// + /// </summary> + public override bool CanResetValue(object component) + { + return false; + } + + /// <summary> + /// + /// </summary> + public override void ResetValue(object component) + { + + } + + /// <summary> + /// + /// </summary> + public override bool ShouldSerializeValue(object component) + { + return false; + } + + + } +} diff --git a/WinFrmUI/Yw.WinFrmUI.Core/09-common/08-paras/ParasItemViewModel.cs b/WinFrmUI/Yw.WinFrmUI.Core/09-common/08-paras/ParasItemViewModel.cs new file mode 100644 index 0000000..6081b0a --- /dev/null +++ b/WinFrmUI/Yw.WinFrmUI.Core/09-common/08-paras/ParasItemViewModel.cs @@ -0,0 +1,26 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Yw.WinFrmUI +{ + /// <summary> + /// + /// </summary> + public class ParasItemViewModel + { + /// <summary> + /// 灞炴�у悕绉� + /// </summary> + [Display(Name = "灞炴�у悕绉�")] + public string PropName { get; set; } + + /// <summary> + /// 灞炴�у�� + /// </summary> + [Display(Name = "灞炴�у��")] + public string PropValue { get; set; } + } +} diff --git a/WinFrmUI/Yw.WinFrmUI.Core/09-common/08-paras/SetParasDlg.Designer.cs b/WinFrmUI/Yw.WinFrmUI.Core/09-common/08-paras/SetParasDlg.Designer.cs new file mode 100644 index 0000000..a86edf5 --- /dev/null +++ b/WinFrmUI/Yw.WinFrmUI.Core/09-common/08-paras/SetParasDlg.Designer.cs @@ -0,0 +1,131 @@ +锘縩amespace Yw.WinFrmUI +{ + partial class SetParasDlg + { + /// <summary> + /// Required designer variable. + /// </summary> + private System.ComponentModel.IContainer components = null; + + /// <summary> + /// Clean up any resources being used. + /// </summary> + /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// <summary> + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// </summary> + private void InitializeComponent() + { + layoutControl1 = new LayoutControl(); + Root = new LayoutControlGroup(); + setParasGridCtrl1 = new SetParasGridCtrl(); + layoutControlItem1 = new LayoutControlItem(); + generalOkAndCancelCtrl1 = new GeneralOkAndCancelCtrl(); + layoutControlItem4 = new LayoutControlItem(); + ((ISupportInitialize)layoutControl1).BeginInit(); + layoutControl1.SuspendLayout(); + ((ISupportInitialize)Root).BeginInit(); + ((ISupportInitialize)layoutControlItem1).BeginInit(); + ((ISupportInitialize)layoutControlItem4).BeginInit(); + SuspendLayout(); + // + // layoutControl1 + // + layoutControl1.Controls.Add(generalOkAndCancelCtrl1); + layoutControl1.Controls.Add(setParasGridCtrl1); + layoutControl1.Dock = DockStyle.Fill; + layoutControl1.Location = new Point(0, 0); + layoutControl1.Name = "layoutControl1"; + layoutControl1.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = new Rectangle(763, 142, 650, 400); + layoutControl1.Root = Root; + layoutControl1.Size = new Size(497, 240); + layoutControl1.TabIndex = 0; + layoutControl1.Text = "layoutControl1"; + // + // Root + // + Root.EnableIndentsWithoutBorders = DefaultBoolean.True; + Root.GroupBordersVisible = false; + Root.Items.AddRange(new BaseLayoutItem[] { layoutControlItem1, layoutControlItem4 }); + Root.Name = "Root"; + Root.Size = new Size(497, 240); + Root.TextVisible = false; + // + // setParasGridCtrl1 + // + setParasGridCtrl1.Location = new Point(12, 12); + setParasGridCtrl1.Name = "setParasGridCtrl1"; + setParasGridCtrl1.Size = new Size(473, 186); + setParasGridCtrl1.TabIndex = 7; + // + // layoutControlItem1 + // + layoutControlItem1.Control = setParasGridCtrl1; + layoutControlItem1.Location = new Point(0, 0); + layoutControlItem1.Name = "layoutControlItem1"; + layoutControlItem1.Size = new Size(477, 190); + layoutControlItem1.TextSize = new Size(0, 0); + layoutControlItem1.TextVisible = false; + // + // generalOkAndCancelCtrl1 + // + generalOkAndCancelCtrl1.ButtonCancelMaxSize = new Size(100, 26); + generalOkAndCancelCtrl1.ButtonCancelMinSize = new Size(100, 26); + generalOkAndCancelCtrl1.ButtonOkMaxSize = new Size(100, 26); + generalOkAndCancelCtrl1.ButtonOkMinSize = new Size(100, 26); + generalOkAndCancelCtrl1.Location = new Point(12, 202); + generalOkAndCancelCtrl1.Name = "generalOkAndCancelCtrl1"; + generalOkAndCancelCtrl1.Size = new Size(473, 26); + generalOkAndCancelCtrl1.TabIndex = 8; + // + // layoutControlItem4 + // + layoutControlItem4.Control = generalOkAndCancelCtrl1; + layoutControlItem4.Location = new Point(0, 190); + layoutControlItem4.MaxSize = new Size(0, 30); + layoutControlItem4.MinSize = new Size(205, 30); + layoutControlItem4.Name = "layoutControlItem4"; + layoutControlItem4.Size = new Size(477, 30); + layoutControlItem4.SizeConstraintsType = SizeConstraintsType.Custom; + layoutControlItem4.TextSize = new Size(0, 0); + layoutControlItem4.TextVisible = false; + // + // SetParasDlg + // + AutoScaleDimensions = new SizeF(7F, 14F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(497, 240); + Controls.Add(layoutControl1); + Name = "SetParasDlg"; + StartPosition = FormStartPosition.CenterParent; + Text = "璁剧疆鍙傛暟"; + ((ISupportInitialize)layoutControl1).EndInit(); + layoutControl1.ResumeLayout(false); + ((ISupportInitialize)Root).EndInit(); + ((ISupportInitialize)layoutControlItem1).EndInit(); + ((ISupportInitialize)layoutControlItem4).EndInit(); + ResumeLayout(false); + } + + #endregion + + private LayoutControl layoutControl1; + private LayoutControlGroup Root; + private GeneralOkAndCancelCtrl generalOkAndCancelCtrl1; + private SetParasGridCtrl setParasGridCtrl1; + private LayoutControlItem layoutControlItem1; + private LayoutControlItem layoutControlItem4; + } +} \ No newline at end of file diff --git a/WinFrmUI/Yw.WinFrmUI.Core/09-common/08-paras/SetParasDlg.cs b/WinFrmUI/Yw.WinFrmUI.Core/09-common/08-paras/SetParasDlg.cs new file mode 100644 index 0000000..9c7a4f4 --- /dev/null +++ b/WinFrmUI/Yw.WinFrmUI.Core/09-common/08-paras/SetParasDlg.cs @@ -0,0 +1,46 @@ +锘縩amespace Yw.WinFrmUI +{ + /// <summary> + /// + /// </summary> + public partial class SetParasDlg : DevExpress.XtraEditors.XtraForm + { + /// <summary> + /// + /// </summary> + public SetParasDlg() + { + InitializeComponent(); + this.IconOptions.Icon = Yw.WinFrmUI.GlobalParas.AppIcon; + this.layoutControl1.SetupLayoutControl(); + this.generalOkAndCancelCtrl1.OkEvent += GeneralOkAndCancelCtrl1_OkEvent; + } + + /// <summary> + /// 閲嶈浇鏁版嵁浜嬩欢 + /// </summary> + public event Action<Dictionary<string, string>> ReloadDataEvent; + + /// <summary> + /// 缁戝畾鏁版嵁 + /// </summary> + public void SetBindingData(Dictionary<string, string> dict) + { + this.setParasGridCtrl1.SetBindingData(dict); + } + + //纭畾 + private void GeneralOkAndCancelCtrl1_OkEvent() + { + var paras = this.setParasGridCtrl1.GetParas(); + this.ReloadDataEvent?.Invoke(paras); + this.DialogResult = DialogResult.OK; + this.Close(); + } + + + + + + } +} \ No newline at end of file diff --git a/WinFrmUI/Yw.WinFrmUI.Core/09-common/08-paras/SetParasDlg.resx b/WinFrmUI/Yw.WinFrmUI.Core/09-common/08-paras/SetParasDlg.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/WinFrmUI/Yw.WinFrmUI.Core/09-common/08-paras/SetParasDlg.resx @@ -0,0 +1,120 @@ +锘�<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> +</root> \ No newline at end of file diff --git a/WinFrmUI/Yw.WinFrmUI.Core/09-common/08-paras/SetParasGridCtrl.Designer.cs b/WinFrmUI/Yw.WinFrmUI.Core/09-common/08-paras/SetParasGridCtrl.Designer.cs new file mode 100644 index 0000000..28f286f --- /dev/null +++ b/WinFrmUI/Yw.WinFrmUI.Core/09-common/08-paras/SetParasGridCtrl.Designer.cs @@ -0,0 +1,150 @@ +锘縩amespace Yw.WinFrmUI +{ + partial class SetParasGridCtrl + { + /// <summary> + /// Required designer variable. + /// </summary> + private System.ComponentModel.IContainer components = null; + + /// <summary> + /// Clean up any resources being used. + /// </summary> + /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// <summary> + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// </summary> + private void InitializeComponent() + { + components = new Container(); + DevExpress.XtraEditors.Controls.EditorButtonImageOptions editorButtonImageOptions2 = new DevExpress.XtraEditors.Controls.EditorButtonImageOptions(); + ComponentResourceManager resources = new ComponentResourceManager(typeof(SetParasGridCtrl)); + SerializableAppearanceObject serializableAppearanceObject5 = new SerializableAppearanceObject(); + SerializableAppearanceObject serializableAppearanceObject6 = new SerializableAppearanceObject(); + SerializableAppearanceObject serializableAppearanceObject7 = new SerializableAppearanceObject(); + SerializableAppearanceObject serializableAppearanceObject8 = new SerializableAppearanceObject(); + gridControl1 = new GridControl(); + parasItemViewModelBindingSource1 = new BindingSource(components); + gridView1 = new GridView(); + colPropName = new GridColumn(); + colPropValue = new GridColumn(); + colDelete = new GridColumn(); + repositoryItemButtonEdit1 = new DevExpress.XtraEditors.Repository.RepositoryItemButtonEdit(); + repositoryItemColorPickEdit1 = new DevExpress.XtraEditors.Repository.RepositoryItemColorPickEdit(); + ((ISupportInitialize)gridControl1).BeginInit(); + ((ISupportInitialize)parasItemViewModelBindingSource1).BeginInit(); + ((ISupportInitialize)gridView1).BeginInit(); + ((ISupportInitialize)repositoryItemButtonEdit1).BeginInit(); + ((ISupportInitialize)repositoryItemColorPickEdit1).BeginInit(); + SuspendLayout(); + // + // gridControl1 + // + gridControl1.DataSource = parasItemViewModelBindingSource1; + gridControl1.Dock = DockStyle.Fill; + gridControl1.Location = new Point(0, 0); + gridControl1.MainView = gridView1; + gridControl1.Name = "gridControl1"; + gridControl1.RepositoryItems.AddRange(new DevExpress.XtraEditors.Repository.RepositoryItem[] { repositoryItemColorPickEdit1, repositoryItemButtonEdit1 }); + gridControl1.Size = new Size(452, 355); + gridControl1.TabIndex = 0; + gridControl1.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] { gridView1 }); + // + // gridView1 + // + gridView1.Columns.AddRange(new GridColumn[] { colPropName, colPropValue, colDelete }); + gridView1.GridControl = gridControl1; + gridView1.Name = "gridView1"; + gridView1.RowCellClick += gridView1_RowCellClick; + gridView1.CustomRowCellEdit += gridView1_CustomRowCellEdit; + gridView1.ShowingEditor += gridView1_ShowingEditor; + gridView1.InitNewRow += gridView1_InitNewRow; + gridView1.ValidatingEditor += gridView1_ValidatingEditor; + // + // colPropName + // + colPropName.Caption = "灞炴�у悕绉�"; + colPropName.FieldName = "PropName"; + colPropName.Name = "colPropName"; + colPropName.Visible = true; + colPropName.VisibleIndex = 0; + colPropName.Width = 675; + // + // colPropValue + // + colPropValue.Caption = "灞炴�у��"; + colPropValue.FieldName = "PropValue"; + colPropValue.Name = "colPropValue"; + colPropValue.Visible = true; + colPropValue.VisibleIndex = 1; + colPropValue.Width = 653; + // + // colDelete + // + colDelete.Caption = "鍒犻櫎"; + colDelete.ColumnEdit = repositoryItemButtonEdit1; + colDelete.MaxWidth = 60; + colDelete.MinWidth = 60; + colDelete.Name = "colDelete"; + colDelete.OptionsColumn.AllowEdit = false; + colDelete.Visible = true; + colDelete.VisibleIndex = 2; + colDelete.Width = 60; + // + // repositoryItemButtonEdit1 + // + repositoryItemButtonEdit1.AutoHeight = false; + editorButtonImageOptions2.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("editorButtonImageOptions2.SvgImage"); + editorButtonImageOptions2.SvgImageSize = new Size(20, 20); + repositoryItemButtonEdit1.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph, "", -1, true, true, false, editorButtonImageOptions2, new KeyShortcut(Keys.None), serializableAppearanceObject5, serializableAppearanceObject6, serializableAppearanceObject7, serializableAppearanceObject8, "", null, null, ToolTipAnchor.Default) }); + repositoryItemButtonEdit1.Name = "repositoryItemButtonEdit1"; + repositoryItemButtonEdit1.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.HideTextEditor; + // + // repositoryItemColorPickEdit1 + // + repositoryItemColorPickEdit1.AutoHeight = false; + repositoryItemColorPickEdit1.AutomaticColor = Color.Black; + repositoryItemColorPickEdit1.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo) }); + repositoryItemColorPickEdit1.Name = "repositoryItemColorPickEdit1"; + repositoryItemColorPickEdit1.NullColor = Color.Empty; + repositoryItemColorPickEdit1.ShowWebSafeColors = true; + // + // SetParasGridCtrl + // + AutoScaleDimensions = new SizeF(7F, 14F); + AutoScaleMode = AutoScaleMode.Font; + Controls.Add(gridControl1); + Name = "SetParasGridCtrl"; + Size = new Size(452, 355); + ((ISupportInitialize)gridControl1).EndInit(); + ((ISupportInitialize)parasItemViewModelBindingSource1).EndInit(); + ((ISupportInitialize)gridView1).EndInit(); + ((ISupportInitialize)repositoryItemButtonEdit1).EndInit(); + ((ISupportInitialize)repositoryItemColorPickEdit1).EndInit(); + ResumeLayout(false); + } + + #endregion + + private DevExpress.XtraGrid.GridControl gridControl1; + private DevExpress.XtraGrid.Views.Grid.GridView gridView1; + private BindingSource parasItemViewModelBindingSource1; + private DevExpress.XtraEditors.Repository.RepositoryItemColorPickEdit repositoryItemColorPickEdit1; + private DevExpress.XtraGrid.Columns.GridColumn colDelete; + private DevExpress.XtraEditors.Repository.RepositoryItemButtonEdit repositoryItemButtonEdit1; + private DevExpress.XtraGrid.Columns.GridColumn colPropName; + private GridColumn colPropValue; + } +} diff --git a/WinFrmUI/Yw.WinFrmUI.Core/09-common/08-paras/SetParasGridCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Core/09-common/08-paras/SetParasGridCtrl.cs new file mode 100644 index 0000000..43c9366 --- /dev/null +++ b/WinFrmUI/Yw.WinFrmUI.Core/09-common/08-paras/SetParasGridCtrl.cs @@ -0,0 +1,148 @@ +锘縩amespace Yw.WinFrmUI +{ + /// <summary> + /// + /// </summary> + public partial class SetParasGridCtrl : DevExpress.XtraEditors.XtraUserControl + { + /// <summary> + /// + /// </summary> + public SetParasGridCtrl() + { + InitializeComponent(); + this.gridView1.SetBindingLimitEditView(); + } + + private BindingList<ParasItemViewModel> _allBindingList = null; + + /// <summary> + /// 缁戝畾鏁版嵁 + /// </summary> + public void SetBindingData(Dictionary<string, string> dict) + { + _allBindingList = new BindingList<ParasItemViewModel>(); + if (dict != null && dict.Count > 0) + { + foreach (var item in dict) + { + _allBindingList.Add(new ParasItemViewModel() + { + PropName = item.Key, + PropValue = item.Value + }); + } + } + this.parasItemViewModelBindingSource1.DataSource = _allBindingList; + this.parasItemViewModelBindingSource1.ResetBindings(false); + } + + /// <summary> + /// 鑾峰彇鍙傛暟 + /// </summary> + public Dictionary<string, string> GetParas() + { + var dict = new Dictionary<string, string>(); + if (_allBindingList != null && _allBindingList.Count > 0) + { + foreach (var item in _allBindingList) + { + if (!string.IsNullOrEmpty(item.PropName)) + { + if (!dict.ContainsKey(item.PropName)) + { + dict.Add(item.PropName, item.PropValue); + } + } + } + } + return dict; + } + + //鑷畾涔変笅鎷夋 + private void gridView1_CustomRowCellEdit(object sender, DevExpress.XtraGrid.Views.Grid.CustomRowCellEditEventArgs e) + { + if (e.Column == this.colPropName) + { + + } + } + + //鍒濆鍖� + private void gridView1_InitNewRow(object sender, DevExpress.XtraGrid.Views.Grid.InitNewRowEventArgs e) + { + if (_allBindingList == null) + { + return; + } + var row = this.gridView1.GetRow(e.RowHandle) as ParasItemViewModel; + if (row != null) + { + row.PropValue = string.Empty; + } + } + + //缂栬緫妗嗘樉绀� + private void gridView1_ShowingEditor(object sender, CancelEventArgs e) + { + if (_allBindingList == null) + { + e.Cancel = true; + return; + } + var row = this.gridView1.GetFocusedRow() as ParasItemViewModel; + if (row == null) + { + var col = this.gridView1.FocusedColumn; + if (col != this.colPropName) + { + e.Cancel = true; + return; + } + } + } + + //鍒犻櫎 + private void gridView1_RowCellClick(object sender, DevExpress.XtraGrid.Views.Grid.RowCellClickEventArgs e) + { + if (e.Column == this.colDelete) + { + var row = this.gridView1.GetRow(e.RowHandle) as ParasItemViewModel; + if (row != null) + { + _allBindingList?.Remove(row); + } + } + } + + //楠岃瘉 + private void gridView1_ValidatingEditor(object sender, DevExpress.XtraEditors.Controls.BaseContainerValidateEditorEventArgs e) + { + if (_allBindingList == null) + { + return; + } + var row = this.gridView1.GetFocusedRow() as ParasItemViewModel; + if (row != null) + { + var col = this.gridView1.FocusedColumn; + if (col == this.colPropName) + { + if (e.Value != null) + { + var propName = e.Value.ToString(); + var count = _allBindingList.Count(x => x.PropName == propName && x != row); + if (count > 0) + { + e.Valid = false; + e.ErrorText = "閲嶅"; + } + } + } + } + + } + + + } +} diff --git a/WinFrmUI/Yw.WinFrmUI.Core/09-common/08-paras/SetParasGridCtrl.resx b/WinFrmUI/Yw.WinFrmUI.Core/09-common/08-paras/SetParasGridCtrl.resx new file mode 100644 index 0000000..024c28b --- /dev/null +++ b/WinFrmUI/Yw.WinFrmUI.Core/09-common/08-paras/SetParasGridCtrl.resx @@ -0,0 +1,145 @@ +锘�<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <metadata name="parasItemViewModelBindingSource1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> + <value>17, 17</value> + </metadata> + <assembly alias="DevExpress.Data.v23.2" name="DevExpress.Data.v23.2, Culture=neutral, PublicKeyToken=b88d1754d700e49a" /> + <data name="editorButtonImageOptions2.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40 + LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl + dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAD0DAAAC77u/ + PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi + IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv + MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh + Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg + MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLlJlZHtmaWxsOiNEMTFDMUM7fQoJLkJs + YWNre2ZpbGw6IzcyNzI3Mjt9CgkuQmx1ZXtmaWxsOiMxMTc3RDc7fQoJLkdyZWVue2ZpbGw6IzAzOUMy + Mzt9CgkuWWVsbG93e2ZpbGw6I0ZGQjExNTt9CgkuV2hpdGV7ZmlsbDojRkZGRkZGO30KCS5zdDB7b3Bh + Y2l0eTowLjU7fQoJLnN0MXtvcGFjaXR5OjAuNzU7fQo8L3N0eWxlPg0KICA8ZyBpZD0iRGVsZXRlIj4N + CiAgICA8Zz4NCiAgICAgIDxwYXRoIGQ9Ik0xOC44LDE2bDYuOS02LjljMC40LTAuNCwwLjQtMSwwLTEu + NGwtMS40LTEuNGMtMC40LTAuNC0xLTAuNC0xLjQsMEwxNiwxMy4yTDkuMSw2LjNjLTAuNC0wLjQtMS0w + LjQtMS40LDAgICAgTDYuMyw3LjdjLTAuNCwwLjQtMC40LDEsMCwxLjRsNi45LDYuOWwtNi45LDYuOWMt + MC40LDAuNC0wLjQsMSwwLDEuNGwxLjQsMS40YzAuNCwwLjQsMSwwLjQsMS40LDBsNi45LTYuOWw2Ljks + Ni45ICAgIGMwLjQsMC40LDEsMC40LDEuNCwwbDEuNC0xLjRjMC40LTAuNCwwLjQtMSwwLTEuNEwxOC44 + LDE2eiIgY2xhc3M9IlJlZCIgLz4NCiAgICA8L2c+DQogIDwvZz4NCjwvc3ZnPgs= +</value> + </data> +</root> \ No newline at end of file diff --git a/WinFrmUI/Yw.WinFrmUI.Core/Yw.WinFrmUI.Core.csproj b/WinFrmUI/Yw.WinFrmUI.Core/Yw.WinFrmUI.Core.csproj index 151c0a6..bd983c2 100644 --- a/WinFrmUI/Yw.WinFrmUI.Core/Yw.WinFrmUI.Core.csproj +++ b/WinFrmUI/Yw.WinFrmUI.Core/Yw.WinFrmUI.Core.csproj @@ -49,6 +49,12 @@ <Compile Update="09-common\07-search\GeneralSearchCtrl.cs"> <SubType>UserControl</SubType> </Compile> + <Compile Update="09-common\08-paras\SetParasDlg.cs"> + <SubType>Form</SubType> + </Compile> + <Compile Update="09-common\08-paras\SetParasGridCtrl.cs"> + <SubType>UserControl</SubType> + </Compile> <Compile Update="11-tree\01-simple\SimpleTreeViewCtrl.cs"> <SubType>UserControl</SubType> </Compile> diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/01-parter/HydroParterViewModel.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/01-parter/HydroParterViewModel.cs index 1387a53..9b088be 100644 --- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/01-parter/HydroParterViewModel.cs +++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/01-parter/HydroParterViewModel.cs @@ -28,7 +28,7 @@ this.DbLocked = rhs.DbLocked; this.Flags = Yw.Untity.FlagsHelper.ToString(rhs.Flags); this.Description = rhs.Description; - + this.Paras = new DictionaryPropertyAdapter(rhs.Paras); this.Vmo = rhs; this.HydroInfo = hydroInfo; } @@ -102,11 +102,22 @@ public virtual string Flags { get; set; } /// <summary> + /// 鍙傛暟 + /// </summary> + [Category("鍩虹淇℃伅")] + [DisplayName("鍙傛暟")] + [HydroParasPro] + [PropertyOrder(7)] + [Browsable(true)] + public virtual DictionaryPropertyAdapter Paras { get; set; } + + + /// <summary> /// 璇存槑 /// </summary> [Category("鍩虹淇℃伅")] [DisplayName("璇存槑")] - [PropertyOrder(7)] + [PropertyOrder(8)] [MultiText] [Browsable(true)] public virtual string Description { get; set; } @@ -161,6 +172,7 @@ this.ModelType = this.Vmo.ModelType; this.DbId = this.Vmo.DbId; this.Flags = Yw.Untity.FlagsHelper.ToString(this.Vmo.Flags); + this.Paras = new DictionaryPropertyAdapter(this.Vmo.Paras); this.Description = this.Vmo.Description; this.DbLocked = this.Vmo.DbLocked; } @@ -177,6 +189,7 @@ this.Vmo.DbId = this.DbId; this.Vmo.DbLocked = this.DbLocked; this.Vmo.Flags = Yw.Untity.FlagsHelper.ToList(this.Flags); + this.Vmo.Paras = (Dictionary<string, string>)this.Paras?.Dictionary; this.Vmo.Description = this.Description; } diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/05-attribute/HydroParasProAttribute.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/05-attribute/HydroParasProAttribute.cs new file mode 100644 index 0000000..b64526d --- /dev/null +++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/05-attribute/HydroParasProAttribute.cs @@ -0,0 +1,18 @@ +锘縩amespace Yw.WinFrmUI +{ + /// <summary> + /// 鐢ㄤ簬鏍囪瘑姘村姏鍙傛暟灞炴�х壒鎬� + /// </summary> + [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)] + public class HydroParasProAttribute : Attribute + { + /// <summary> + /// + /// </summary> + public HydroParasProAttribute() { } + + + + } + +} diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/05-property/HydroVisualPropertyCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/05-property/HydroVisualPropertyCtrl.cs index da2f1f2..cea843b 100644 --- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/05-property/HydroVisualPropertyCtrl.cs +++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/05-property/HydroVisualPropertyCtrl.cs @@ -231,10 +231,12 @@ var stringValue = (string[])e.Properties.Value; e.CellText = stringValue?.Length.ToString(); } + else if (fullTypeName == typeof(DictionaryPropertyAdapter).FullName) + { + e.CellText = string.Empty; + } else { - - var descriptor = this.propertyGridControl1.GetPropertyDescriptor(e.Row); if (descriptor != null) { @@ -427,6 +429,7 @@ { var buttonEdit = new RepositoryItemButtonEdit(); buttonEdit.TextEditStyle = TextEditStyles.DisableTextEditor; + buttonEdit.ButtonClick += async delegate { var vm = GetPropertyViewModel(e.Row); @@ -450,6 +453,37 @@ #endregion + #region 鍙傛暟 + + if (descriptor != null) + { + var parasProAttri = (HydroParasProAttribute)descriptor.Attributes[typeof(HydroParasProAttribute)]; + if (parasProAttri != null) + { + var buttonEdit = new RepositoryItemButtonEdit(); + buttonEdit.TextEditStyle = TextEditStyles.HideTextEditor; + buttonEdit.ButtonClick += delegate + { + var vm = GetPropertyViewModel(e.Row); + var dlg = new SetParasDlg(); + dlg.SetBindingData(vm.Vmo.Paras); + dlg.ReloadDataEvent += (paras) => + { + vm.Vmo.Paras = paras; + vm.Paras = new DictionaryPropertyAdapter(paras); + this.propertyGridControl1.UpdateRows(); + this.propertyGridControl1.RefreshEditor(); + this.PropertyValueChangedEvent?.Invoke(vm); + }; + dlg.ShowDialog(); + }; + e.RepositoryItem = buttonEdit; + } + } + + + #endregion + #region 杩炴帴 if (e.Row.Properties.Value != null) diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj index 4e5466b..e8e7f67 100644 --- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj +++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj @@ -57,7 +57,7 @@ <ItemGroup> <PackageReference Include="DevExpress.Win.Design" Version="23.2.4" /> <PackageReference Include="Yw.BLL.Basic.Core" Version="3.3.3" /> - <PackageReference Include="Yw.BLL.Hydro.Core" Version="3.8.7" /> + <PackageReference Include="Yw.BLL.Hydro.Core" Version="3.8.8" /> <PackageReference Include="Yw.Pump.Core" Version="3.2.4" /> </ItemGroup> -- Gitblit v1.9.3