From db26311246d1c1cecadf4a22dc44ffa570ee40f2 Mon Sep 17 00:00:00 2001
From: lixiaojun <1287241240@qq.com>
Date: 星期二, 07 一月 2025 11:35:55 +0800
Subject: [PATCH] 批量修改数据同步修改

---
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/15-pipe/HydroPipeListCtrl.cs                                       |   62 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/10-nozzle/SetHydroNozzleDlg.cs                                     |   55 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/11-cooling/HydroCoolingListCtrl.resx                               |    2 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/12-meter/HydroMeterListCtrl.cs                                     |   58 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/04-junction/SetHydroJunctionListDlg.cs                             |   29 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/18-valve/HydroValveListCtrl.cs                                     |   58 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-pump/SetHydroPumpListDlg.cs                                     |   30 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/03-helper/HydroChangeHelper.cs                                       |    9 
 Hydro/HStation.Hydro.Core/HStation.Hydro.Core.csproj                                                         |    2 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/20-compressor/SetHydroCompressorDlg.cs                             |   44 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/00-core/HydroVisualListCtrl.cs                                     |   47 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/13-flowmeter/SetHydroFlowmeterDlg.cs                               |   36 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/15-pipe/SetHydroPipeDlg.cs                                         |   49 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/01-reservoir/SetHydroReservoirListDlg.cs                           |   28 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/05-extensions/HydroModelInfoExtensions.cs                            |  131 +
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/02-tank/HydroTankListCtrl.cs                                       |   57 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/11-cooling/HydroCoolingListCtrl.cs                                 |   62 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/16-translation/HydroTranslationListCtrl.cs                         |   57 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/05-property/HydroVisualPropertyCtrl.cs                                       |   20 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/00-core/IHydroVisualList.cs                                        |   13 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/07-threelink/SetHydroThreelinkDlg.cs                               |   55 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/08-fourlink/SetHydroFourlinkListDlg.cs                             |   28 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/16-translation/SetHydroTranslationListDlg.cs                       |   30 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/03-waterbox/SetHydroWaterboxDlg.cs                                 |   60 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/04-junction/SetHydroJunctionDlg.cs                                 |   34 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs              |  302 +--
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/04-junction/HydroJunctionListCtrl.cs                               |   57 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/06-elbow/SetHydroElbowListDlg.cs                                   |   28 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/02-tank/SetHydroTankListDlg.cs                                     |   28 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/05-blunthead/SetHydroBluntheadDlg.cs                               |   48 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/05-blunthead/SetHydroBluntheadListDlg.cs                           |   28 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/06-elbow/SetHydroElbowDlg.cs                                       |   56 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/10-nozzle/SetHydroNozzleListDlg.cs                                 |   29 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-pump/HydroPumpListCtrl.cs                                       |   57 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/01-property/SimulationPropertyCtrl.cs                      |   20 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/06-elbow/HydroElbowListCtrl.cs                                     |   57 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/01-reservoir/SetHydroReservoirDlg.cs                               |   25 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/08-fourlink/HydroFourlinkListCtrl.cs                               |   59 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/11-cooling/HydroCoolingListCtrl.Designer.cs                        |  160 +-
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/16-translation/SetHydroTranslationDlg.cs                           |   51 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/02-tank/SetHydroTankDlg.cs                                         |   59 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/03-waterbox/HydroWaterboxListCtrl.cs                               |   57 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/19-exchanger/HydroExchangerListCtrl.cs                             |   57 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/12-meter/SetHydroMeterDlg.cs                                       |   41 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/19-exchanger/SetHydroExchangerListDlg.cs                           |   30 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/00-core/HydroVisualListDlg.cs                                      |   22 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/02-tank/SetHydroTankDlg.Designer.cs                                |   46 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/13-flowmeter/HydroFlowmeterListCtrl.cs                             |   57 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/12-meter/HydroMeterListCtrl.Designer.cs                            |    1 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/09-hydrant/SetHydroHydrantDlg.cs                                   |   46 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/05-blunthead/HydroBluntheadListCtrl.cs                             |   58 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/14-pressmeter/HydroPressmeterListCtrl.cs                           |   58 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/03-waterbox/SetHydroWaterboxDlg.Designer.cs                        |   41 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/07-threelink/HydroThreelinkListCtrl.cs                             |   56 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/09-hydrant/HydroHydrantListCtrl.cs                                 |   57 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/12-meter/SetHydroMeterListDlg.cs                                   |   29 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/19-exchanger/SetHydroExchangerDlg.cs                               |   44 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/20-compressor/SetHydroCompressorListDlg.cs                         |   30 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/11-cooling/SetHydroCoolingListDlg.cs                               |   30 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/03-helper/HydroPropStatusHelper.cs                                   |   56 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/14-pressmeter/SetHydroPressmeterDlg.cs                             |   36 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/03-node/00-core/HydroNodeViewModel.cs                           |    2 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/03-waterbox/SetHydroWaterboxListDlg.cs                             |   32 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/20-compressor/HydroCompressorListCtrl.cs                           |   60 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj                                                |    2 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/01-reservoir/HydroReservoirListCtrl.cs                             |  115 +
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/13-flowmeter/SetHydroFlowmeterListDlg.cs                           |   29 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/11-cooling/SetHydroCoolingDlg.Designer.cs                          |  147 +-
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/18-valve/SetHydroValveDlg.cs                                       |   44 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/07-threelink/SetHydroThreelinkListDlg.cs                           |   28 
 Hydro/Yw.Hydro.Core/Yw.Hydro.Core.csproj                                                                     |    2 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/09-hydrant/SetHydroHydrantListDlg.cs                               |   28 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-pump/SetHydroPumpDlg.cs                                         |   57 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/18-valve/SetHydroValveListDlg.cs                                   |   29 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/15-pipe/SetHydroPipeListDlg.cs                                     |   29 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/08-fourlink/SetHydroFourlinkDlg.cs                                 |   43 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/10-nozzle/HydroNozzleListCtrl.cs                                   |   57 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/03-node/03-junction/02-emitter/00-core/HydroEmitterViewModel.cs |   47 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/11-cooling/SetHydroCoolingDlg.cs                                   |   60 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/14-pressmeter/SetHydroPressmeterListDlg.cs                         |   29 
 80 files changed, 2,583 insertions(+), 1,229 deletions(-)

diff --git a/Hydro/HStation.Hydro.Core/HStation.Hydro.Core.csproj b/Hydro/HStation.Hydro.Core/HStation.Hydro.Core.csproj
index 53f2441..b35a2c1 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="3.9.7" />
+    <PackageReference Include="Yw.Service.Hydro.Core" Version="3.9.8" />
   </ItemGroup>
 
   <ItemGroup>
diff --git a/Hydro/Yw.Hydro.Core/Yw.Hydro.Core.csproj b/Hydro/Yw.Hydro.Core/Yw.Hydro.Core.csproj
index 4db97b1..81657bf 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.0" />
-    <PackageReference Include="Yw.Service.Hydro.Core" Version="3.9.7" />
+    <PackageReference Include="Yw.Service.Hydro.Core" Version="3.9.8" />
   </ItemGroup>
 
   <ItemGroup>
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/01-property/SimulationPropertyCtrl.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/01-property/SimulationPropertyCtrl.cs
index 11c72dc..90e6d3f 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/01-property/SimulationPropertyCtrl.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/01-property/SimulationPropertyCtrl.cs
@@ -22,7 +22,6 @@
             this.hydroVisualPropertyCtrl1.PropertyValueChangedEvent += HydroVisualPropertyCtrl1_PropertyValueChangedEvent;
             this.hydroVisualPropertyCtrl1.MarkPropertyValueChangedEvent += HydroVisualPropertyCtrl1_MarkPropertyValueChangedEvent;
             this.hydroVisualPropertyCtrl1.GradingPropertyValueChangedEvent += HydroPVisualPropertyCtrl1_GradingPropertyValueChangedEvent;
-            this.hydroVisualPropertyCtrl1.ParterChangedEvent += HydroVisualPropertyCtrl1_ParterChangedEvent;
         }
 
         #region 浜嬩欢闆嗗悎
@@ -54,19 +53,18 @@
         /// </summary>
         public event Action<HydroVisualInfo> GradingPropertyValueChangedEvent;
 
-        /// <summary>
-        /// 鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
-
         #endregion
 
         /// <summary>
         /// 鍒濆鍖栨暟鎹�
         /// </summary>
-        public void InitialData(HydroPropStatusHelper propStatusHelper)
+        public void InitialData
+            (
+                HydroChangeHelper changeHelper,
+                HydroPropStatusHelper propStatusHelper
+            )
         {
-            this.hydroVisualPropertyCtrl1.InitialData(propStatusHelper);
+            this.hydroVisualPropertyCtrl1.InitialData(changeHelper, propStatusHelper);
         }
 
         #region 灞炴�ц祴鍊�
@@ -583,12 +581,6 @@
         private void HydroPVisualPropertyCtrl1_GradingPropertyValueChangedEvent(HydroVisualViewModel vm)
         {
             this.GradingPropertyValueChangedEvent?.Invoke(vm?.Vmo);
-        }
-
-        //鏋勪欢鏀瑰彉浜嬩欢
-        private void HydroVisualPropertyCtrl1_ParterChangedEvent(HydroParterInfo parter, eChangeType changeType)
-        {
-            this.ParterChangedEvent?.Invoke(parter, changeType);
         }
 
 
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs
index 430df55..1875592 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs
@@ -389,11 +389,12 @@
             }
             if (_propertyCtrl == null)
             {
+                var changeHelper = GetChangeHelper();
                 var propStatusHelper = await GetPropStatusHelper();
                 _propertyCtrl = new SimulationPropertyCtrl();
                 _propertyCtrl.Dock = DockStyle.Fill;
                 _propertyCtrl.AllowEdit = true;
-                _propertyCtrl.InitialData(propStatusHelper);
+                _propertyCtrl.InitialData(changeHelper, propStatusHelper);
                 _propertyCtrl.CalcuResult = () => GetCalcuResult();
                 _propertyCtrl.HydroViewEvent += (visual) =>
                 {
@@ -459,14 +460,6 @@
                     //鍒ゆ柇褰撳墠鏄惁鏈夊垎绾у睍绀猴紝鑻ユ湁鍒欐洿鏂板垎绾э紝鏈�濂芥槸鏇存柊鍗曚釜鍒嗙骇
                     var gradingHelper = await GetGradingHelper();
                     gradingHelper.Set(visual);
-                };
-                _propertyCtrl.ParterChangedEvent += (parter, changeType) =>
-                {
-                    if (parter == null)
-                    {
-                        return;
-                    }
-                    AppendChangeParter(parter, changeType);
                 };
             }
             return _propertyCtrl;
@@ -751,10 +744,6 @@
                 {
                     SelectVisual(_visual, eSimulationVisualSource.List);
                 };
-                _visualListCtrl.ParterChangedEvent += (parter, changeType) =>
-                {
-                    AppendChangeParter(parter, changeType);
-                };
             }
             return _visualListCtrl;
         }
@@ -779,7 +768,7 @@
         }
 
         //鏄剧ず鏋勪欢鏄庣粏鎺т欢
-        private void ShowVisualListCtrl()
+        private async void ShowVisualListCtrl()
         {
             if (_hydroInfo == null)
             {
@@ -795,8 +784,10 @@
                 this.docPnlBottom.Height = 350;
             }
             var visualVmListHelper = GetVisualVmListHelper();
+            var changeHelper = GetChangeHelper();
+            var propStatusHelper = await GetPropStatusHelper();
             var allVisualVmList = visualVmListHelper.GetVisualList();
-            visualListCtrl.SetBindingData(allVisualVmList);
+            visualListCtrl.SetBindingData(allVisualVmList, changeHelper, propStatusHelper);
             var calcuResult = GetCalcuResult();
             if (calcuResult != null && calcuResult.Succeed)
             {
@@ -833,7 +824,7 @@
             ShowVisualListCtrl();
         }
 
-        #endregion 鏄庣粏鎺т欢
+        #endregion
 
         #region 鏋勪欢鏄剧ず
 
@@ -948,38 +939,62 @@
             {
                 if (_isSaving)
                 {
-                    TipFormHelper.ShowWarn("姝e湪淇濆瓨锛岃绋嶅悗閲嶈瘯锛�");
+                    this.FindForm().ShowAlertInfo("淇濆瓨", "姝e湪淇濆瓨锛岃绋嶅悗閲嶈瘯锛�");
                     return;
                 }
             }
 
             _isSaving = true;
 
-            var addParterList = GetAddParterList();
-            var updateParterList = GetUpdateParterList();
-            var removeParters = GetRemoveParters();
+            var changeHelper = GetChangeHelper();
 
-            this.FindForm().ShowAlertInfo("姘村姏淇℃伅淇濆瓨", "姝e湪鏇存柊姘村姏淇℃伅锛�");
+            var addParterList = changeHelper.GetAddParterList();
+            var updateParterList = changeHelper.GetUpdateParterList();
+            var removeParters = changeHelper.GetRemoveParters();
+
+            if (addParterList == null || addParterList.Count < 1)
+            {
+                if (updateParterList == null || updateParterList.Count < 1)
+                {
+                    if (removeParters == null || removeParters.Count < 1)
+                    {
+                        TipFormHelper.ShowWarn("鏈娴嬪埌淇敼锛屾棤闇�淇濆瓨锛�");
+                        _isSaving = false;
+                        return;
+                    }
+                }
+            }
+
+            WaitFormHelper.ShowWaitForm("姝e湪淇濆瓨锛岃绋嶅悗...");
+
             var bol = await BLLFactory<Yw.BLL.HydroModelInfo>.Instance
                 .Update(_hydroInfo, addParterList, updateParterList, removeParters);
             if (!bol)
             {
-                this.FindForm().ShowAlertInfo("姘村姏淇℃伅淇濆瓨", "姘村姏淇℃伅鏇存柊澶辫触锛�");
+                WaitFormHelper.HideWaitForm();
+                TipFormHelper.ShowError("姘村姏淇℃伅鏇存柊澶辫触锛�");
+                _isSaving = false;
                 return;
             }
-            this.FindForm().ShowAlertInfo("姘村姏淇℃伅淇濆瓨", "姘村姏淇℃伅鏇存柊鎴愬姛锛�");
+            changeHelper.Reset();
 
-            this.FindForm().ShowAlertInfo("姘村姏淇℃伅淇濆瓨", "姝e湪淇濆瓨灞炴�х姸鎬侊紒");
-            var propStatusDbList = await GetPropStatusDbList();
-            bol = await BLLFactory<Yw.BLL.HydroParterPropStatusInfo>.Instance.Save(_hydroInfo.ID, propStatusDbList);
-            if (bol)
+            var propStatusHelper = await GetPropStatusHelper();
+            var updatePropStatusList = propStatusHelper.GetUpdatePropStatusDbList();
+            if (updatePropStatusList != null && updatePropStatusList.Count > 0)
             {
-                this.FindForm().ShowAlertInfo("姘村姏淇℃伅淇濆瓨", "灞炴�х姸鎬佷繚瀛樻垚鍔燂紒");
+                bol = await BLLFactory<Yw.BLL.HydroParterPropStatusInfo>.Instance.Update(_hydroInfo.ID, updatePropStatusList);
+                if (!bol)
+                {
+                    WaitFormHelper.HideWaitForm();
+                    TipFormHelper.ShowWarn("灞炴�х姸鎬佹洿鏂板け璐ワ紒");
+                    _isSaving = false;
+                    return;
+                }
             }
-            else
-            {
-                this.FindForm().ShowAlertInfo("姘村姏淇℃伅淇濆瓨", "灞炴�х姸鎬佷繚瀛樺け璐ワ紒");
-            }
+            propStatusHelper.Reset();
+
+            WaitFormHelper.HideWaitForm();
+            TipFormHelper.ShowSucceed("淇濆瓨鎴愬姛锛�");
             _isSaving = false;
 
             //Stopwatch sw = new Stopwatch();
@@ -998,11 +1013,13 @@
         private void RegistBulkSetEvents()
         {
             //姘村簱
-            this.barBtnSetReservoirList.ItemClick += delegate
+            this.barBtnSetReservoirList.ItemClick += async delegate
             {
                 var allVisualViewModelList = GetVisualViewModelList();
+                var changeHelper = GetChangeHelper();
+                var propStatusHelper = await GetPropStatusHelper();
                 var dlg = new SetHydroReservoirListDlg();
-                dlg.SetBindingData(allVisualViewModelList);
+                dlg.SetBindingData(allVisualViewModelList, changeHelper, propStatusHelper);
                 dlg.HydroClickInfoEvent += (visual) =>
                 {
                     SelectVisual(visual, eSimulationVisualSource.Set);
@@ -1011,19 +1028,17 @@
                 {
                     SelectVisual(visuals?.FirstOrDefault(), eSimulationVisualSource.Set);
                     UpdateVisualListCtrl();
-                };
-                dlg.ParterChangedEvent += (parter, changeType) =>
-                {
-                    AppendChangeParter(parter, changeType);
                 };
                 dlg.ShowDialog();
             };
             //姘存睜
-            this.barBtnSetTankList.ItemClick += delegate
+            this.barBtnSetTankList.ItemClick += async delegate
             {
                 var allVisualViewModelList = GetVisualViewModelList();
+                var changeHelper = GetChangeHelper();
+                var propStatusHelper = await GetPropStatusHelper();
                 var dlg = new SetHydroTankListDlg();
-                dlg.SetBindingData(allVisualViewModelList);
+                dlg.SetBindingData(allVisualViewModelList, changeHelper, propStatusHelper);
                 dlg.HydroClickInfoEvent += (visual) =>
                 {
                     SelectVisual(visual, eSimulationVisualSource.Set);
@@ -1032,19 +1047,17 @@
                 {
                     SelectVisual(visuals?.FirstOrDefault(), eSimulationVisualSource.Set);
                     UpdateVisualListCtrl();
-                };
-                dlg.ParterChangedEvent += (parter, changeType) =>
-                {
-                    AppendChangeParter(parter, changeType);
                 };
                 dlg.ShowDialog();
             };
             //姘寸
-            this.barBtnSetWaterboxList.ItemClick += delegate
+            this.barBtnSetWaterboxList.ItemClick += async delegate
             {
                 var allVisualViewModelList = GetVisualViewModelList();
+                var changeHelper = GetChangeHelper();
+                var propStatusHelper = await GetPropStatusHelper();
                 var dlg = new SetHydroWaterboxListDlg();
-                dlg.SetBindingData(allVisualViewModelList);
+                dlg.SetBindingData(allVisualViewModelList, changeHelper, propStatusHelper);
                 dlg.HydroClickInfoEvent += (visual) =>
                 {
                     SelectVisual(visual, eSimulationVisualSource.Set);
@@ -1053,19 +1066,17 @@
                 {
                     SelectVisual(visuals?.FirstOrDefault(), eSimulationVisualSource.Set);
                     UpdateVisualListCtrl();
-                };
-                dlg.ParterChangedEvent += (parter, changeType) =>
-                {
-                    AppendChangeParter(parter, changeType);
                 };
                 dlg.ShowDialog();
             };
             //杩炴帴鑺傜偣
-            this.barBtnSetJunctionList.ItemClick += delegate
+            this.barBtnSetJunctionList.ItemClick += async delegate
             {
                 var allVisualViewModelList = GetVisualViewModelList();
+                var changeHelper = GetChangeHelper();
+                var propStatusHelper = await GetPropStatusHelper();
                 var dlg = new SetHydroJunctionListDlg();
-                dlg.SetBindingData(allVisualViewModelList);
+                dlg.SetBindingData(allVisualViewModelList, changeHelper, propStatusHelper);
                 dlg.HydroClickInfoEvent += (visual) =>
                 {
                     SelectVisual(visual, eSimulationVisualSource.Set);
@@ -1074,19 +1085,17 @@
                 {
                     SelectVisual(visuals?.FirstOrDefault(), eSimulationVisualSource.Set);
                     UpdateVisualListCtrl();
-                };
-                dlg.ParterChangedEvent += (parter, changeType) =>
-                {
-                    AppendChangeParter(parter, changeType);
                 };
                 dlg.ShowDialog();
             };
             //闂峰ご
-            this.barBtnSetBluntheadList.ItemClick += delegate
+            this.barBtnSetBluntheadList.ItemClick += async delegate
             {
                 var allVisualViewModelList = GetVisualViewModelList();
+                var changeHelper = GetChangeHelper();
+                var propStatusHelper = await GetPropStatusHelper();
                 var dlg = new SetHydroBluntheadListDlg();
-                dlg.SetBindingData(allVisualViewModelList);
+                dlg.SetBindingData(allVisualViewModelList, changeHelper, propStatusHelper);
                 dlg.HydroClickInfoEvent += (visual) =>
                 {
                     SelectVisual(visual, eSimulationVisualSource.Set);
@@ -1095,19 +1104,17 @@
                 {
                     SelectVisual(visuals?.FirstOrDefault(), eSimulationVisualSource.Set);
                     UpdateVisualListCtrl();
-                };
-                dlg.ParterChangedEvent += (parter, changeType) =>
-                {
-                    AppendChangeParter(parter, changeType);
                 };
                 dlg.ShowDialog();
             };
             //寮ご
-            this.barBtnSetElbowsList.ItemClick += delegate
+            this.barBtnSetElbowsList.ItemClick += async delegate
             {
                 var allVisualVmList = GetVisualViewModelList();
+                var changeHelper = GetChangeHelper();
+                var propStatusHelper = await GetPropStatusHelper();
                 var dlg = new SetHydroElbowListDlg();
-                dlg.SetBindingData(allVisualVmList);
+                dlg.SetBindingData(allVisualVmList, changeHelper, propStatusHelper);
                 dlg.HydroClickInfoEvent += (visual) =>
                 {
                     SelectVisual(visual, eSimulationVisualSource.Set);
@@ -1116,19 +1123,17 @@
                 {
                     SelectVisual(visuals?.FirstOrDefault(), eSimulationVisualSource.Set);
                     UpdateVisualListCtrl();
-                };
-                dlg.ParterChangedEvent += (parter, changeType) =>
-                {
-                    AppendChangeParter(parter, changeType);
                 };
                 dlg.ShowDialog();
             };
             //涓夐��
-            this.barBtnSetThreelinkList.ItemClick += delegate
+            this.barBtnSetThreelinkList.ItemClick += async delegate
             {
                 var allVisualViewModelList = GetVisualViewModelList();
+                var changeHelper = GetChangeHelper();
+                var propStatusHelper = await GetPropStatusHelper();
                 var dlg = new SetHydroThreelinkListDlg();
-                dlg.SetBindingData(allVisualViewModelList);
+                dlg.SetBindingData(allVisualViewModelList, changeHelper, propStatusHelper);
                 dlg.HydroClickInfoEvent += (visual) =>
                 {
                     SelectVisual(visual, eSimulationVisualSource.Set);
@@ -1137,19 +1142,17 @@
                 {
                     SelectVisual(visuals?.FirstOrDefault(), eSimulationVisualSource.Set);
                     UpdateVisualListCtrl();
-                };
-                dlg.ParterChangedEvent += (parter, changeType) =>
-                {
-                    AppendChangeParter(parter, changeType);
                 };
                 dlg.ShowDialog();
             };
             //鍥涢��
-            this.barBtnSetFourlinkList.ItemClick += delegate
+            this.barBtnSetFourlinkList.ItemClick += async delegate
             {
                 var allVisualViewModelList = GetVisualViewModelList();
+                var changeHelper = GetChangeHelper();
+                var propStatusHelper = await GetPropStatusHelper();
                 var dlg = new SetHydroFourlinkListDlg();
-                dlg.SetBindingData(allVisualViewModelList);
+                dlg.SetBindingData(allVisualViewModelList, changeHelper, propStatusHelper);
                 dlg.HydroClickInfoEvent += (visual) =>
                 {
                     SelectVisual(visual, eSimulationVisualSource.Set);
@@ -1158,19 +1161,17 @@
                 {
                     SelectVisual(visuals?.FirstOrDefault(), eSimulationVisualSource.Set);
                     UpdateVisualListCtrl();
-                };
-                dlg.ParterChangedEvent += (parter, changeType) =>
-                {
-                    AppendChangeParter(parter, changeType);
                 };
                 dlg.ShowDialog();
             };
             //姘磋〃
-            this.barBtnSetMeterList.ItemClick += delegate
+            this.barBtnSetMeterList.ItemClick += async delegate
             {
                 var allVisualViewModelList = GetVisualViewModelList();
+                var changeHelper = GetChangeHelper();
+                var propStatusHelper = await GetPropStatusHelper();
                 var dlg = new SetHydroMeterListDlg();
-                dlg.SetBindingData(allVisualViewModelList);
+                dlg.SetBindingData(allVisualViewModelList, changeHelper, propStatusHelper);
                 dlg.HydroClickInfoEvent += (visual) =>
                 {
                     SelectVisual(visual, eSimulationVisualSource.Set);
@@ -1179,19 +1180,17 @@
                 {
                     SelectVisual(visuals?.FirstOrDefault(), eSimulationVisualSource.Set);
                     UpdateVisualListCtrl();
-                };
-                dlg.ParterChangedEvent += (parter, changeType) =>
-                {
-                    AppendChangeParter(parter, changeType);
                 };
                 dlg.ShowDialog();
             };
             //娴侀噺璁�
-            this.barBtnSetFlowmeterList.ItemClick += delegate
+            this.barBtnSetFlowmeterList.ItemClick += async delegate
             {
                 var allVisualViewModelList = GetVisualViewModelList();
+                var changeHelper = GetChangeHelper();
+                var propStatusHelper = await GetPropStatusHelper();
                 var dlg = new SetHydroFlowmeterListDlg();
-                dlg.SetBindingData(allVisualViewModelList);
+                dlg.SetBindingData(allVisualViewModelList, changeHelper, propStatusHelper);
                 dlg.HydroClickInfoEvent += (visual) =>
                 {
                     SelectVisual(visual, eSimulationVisualSource.Set);
@@ -1200,19 +1199,17 @@
                 {
                     SelectVisual(visuals?.FirstOrDefault(), eSimulationVisualSource.Set);
                     UpdateVisualListCtrl();
-                };
-                dlg.ParterChangedEvent += (parter, changeType) =>
-                {
-                    AppendChangeParter(parter, changeType);
                 };
                 dlg.ShowDialog();
             };
             //鍘嬪姏琛�
-            this.barBtnSetPressmeterList.ItemClick += delegate
+            this.barBtnSetPressmeterList.ItemClick += async delegate
             {
                 var allVisualViewModelList = GetVisualViewModelList();
+                var changeHelper = GetChangeHelper();
+                var propStatusHelper = await GetPropStatusHelper();
                 var dlg = new SetHydroPressmeterListDlg();
-                dlg.SetBindingData(allVisualViewModelList);
+                dlg.SetBindingData(allVisualViewModelList, changeHelper, propStatusHelper);
                 dlg.HydroClickInfoEvent += (visual) =>
                 {
                     SelectVisual(visual, eSimulationVisualSource.Set);
@@ -1221,19 +1218,17 @@
                 {
                     SelectVisual(visuals?.FirstOrDefault(), eSimulationVisualSource.Set);
                     UpdateVisualListCtrl();
-                };
-                dlg.ParterChangedEvent += (parter, changeType) =>
-                {
-                    AppendChangeParter(parter, changeType);
                 };
                 dlg.ShowDialog();
             };
             //鍠峰槾
-            this.barBtnSetNozzleList.ItemClick += delegate
+            this.barBtnSetNozzleList.ItemClick += async delegate
             {
                 var allVisualViewModelList = GetVisualViewModelList();
+                var changeHelper = GetChangeHelper();
+                var propStatusHelper = await GetPropStatusHelper();
                 var dlg = new SetHydroNozzleListDlg();
-                dlg.SetBindingData(allVisualViewModelList);
+                dlg.SetBindingData(allVisualViewModelList, changeHelper, propStatusHelper);
                 dlg.HydroClickInfoEvent += (visual) =>
                 {
                     SelectVisual(visual, eSimulationVisualSource.Set);
@@ -1242,19 +1237,17 @@
                 {
                     SelectVisual(visuals?.FirstOrDefault(), eSimulationVisualSource.Set);
                     UpdateVisualListCtrl();
-                };
-                dlg.ParterChangedEvent += (parter, changeType) =>
-                {
-                    AppendChangeParter(parter, changeType);
                 };
                 dlg.ShowDialog();
             };
             //鍐峰嵈濉�
-            this.barBtnSetCoolingList.ItemClick += delegate
+            this.barBtnSetCoolingList.ItemClick += async delegate
             {
                 var allVisualViewModelList = GetVisualViewModelList();
+                var changeHelper = GetChangeHelper();
+                var propStatusHelper = await GetPropStatusHelper();
                 var dlg = new SetHydroCoolingListDlg();
-                dlg.SetBindingData(allVisualViewModelList);
+                dlg.SetBindingData(allVisualViewModelList, changeHelper, propStatusHelper);
                 dlg.HydroClickInfoEvent += (visual) =>
                 {
                     SelectVisual(visual, eSimulationVisualSource.Set);
@@ -1263,19 +1256,17 @@
                 {
                     SelectVisual(visuals?.FirstOrDefault(), eSimulationVisualSource.Set);
                     UpdateVisualListCtrl();
-                };
-                dlg.ParterChangedEvent += (parter, changeType) =>
-                {
-                    AppendChangeParter(parter, changeType);
                 };
                 dlg.ShowDialog();
             };
             //绠¢亾
-            this.barBtnSetPipeList.ItemClick += delegate
+            this.barBtnSetPipeList.ItemClick += async delegate
             {
                 var allVisualViewModelList = GetVisualViewModelList();
+                var changeHelper = GetChangeHelper();
+                var propStatusHelper = await GetPropStatusHelper();
                 var dlg = new SetHydroPipeListDlg();
-                dlg.SetBindingData(allVisualViewModelList);
+                dlg.SetBindingData(allVisualViewModelList, changeHelper, propStatusHelper);
                 dlg.HydroClickInfoEvent += (visual) =>
                 {
                     SelectVisual(visual, eSimulationVisualSource.Set);
@@ -1284,19 +1275,17 @@
                 {
                     SelectVisual(visuals?.FirstOrDefault(), eSimulationVisualSource.Set);
                     UpdateVisualListCtrl();
-                };
-                dlg.ParterChangedEvent += (parter, changeType) =>
-                {
-                    AppendChangeParter(parter, changeType);
                 };
                 dlg.ShowDialog();
             };
             //杩囨浮浠�
-            this.barBtnSetTranslationList.ItemClick += delegate
+            this.barBtnSetTranslationList.ItemClick += async delegate
             {
                 var allVisualViewModelList = GetVisualViewModelList();
+                var changeHelper = GetChangeHelper();
+                var propStatusHelper = await GetPropStatusHelper();
                 var dlg = new SetHydroTranslationListDlg();
-                dlg.SetBindingData(allVisualViewModelList);
+                dlg.SetBindingData(allVisualViewModelList, changeHelper, propStatusHelper);
                 dlg.HydroClickInfoEvent += (visual) =>
                 {
                     SelectVisual(visual, eSimulationVisualSource.Set);
@@ -1305,19 +1294,17 @@
                 {
                     SelectVisual(visuals?.FirstOrDefault(), eSimulationVisualSource.Set);
                     UpdateVisualListCtrl();
-                };
-                dlg.ParterChangedEvent += (parter, changeType) =>
-                {
-                    AppendChangeParter(parter, changeType);
                 };
                 dlg.ShowDialog();
             };
             //姘存车
-            this.barBtnSetPumpList.ItemClick += delegate
+            this.barBtnSetPumpList.ItemClick += async delegate
             {
                 var allVisualViewModelList = GetVisualViewModelList();
+                var changeHelper = GetChangeHelper();
+                var propStatusHelper = await GetPropStatusHelper();
                 var dlg = new SetHydroPumpListDlg();
-                dlg.SetBindingData(allVisualViewModelList);
+                dlg.SetBindingData(allVisualViewModelList, changeHelper, propStatusHelper);
                 dlg.HydroClickInfoEvent += (visual) =>
                 {
                     SelectVisual(visual, eSimulationVisualSource.Set);
@@ -1326,19 +1313,17 @@
                 {
                     SelectVisual(visuals?.FirstOrDefault(), eSimulationVisualSource.Set);
                     UpdateVisualListCtrl();
-                };
-                dlg.ParterChangedEvent += (parter, changeType) =>
-                {
-                    AppendChangeParter(parter, changeType);
                 };
                 dlg.ShowDialog();
             };
             //闃�闂�
-            this.barBtnSetValveList.ItemClick += delegate
+            this.barBtnSetValveList.ItemClick += async delegate
             {
                 var allVisualViewModelList = GetVisualViewModelList();
+                var changeHelper = GetChangeHelper();
+                var propStatusHelper = await GetPropStatusHelper();
                 var dlg = new SetHydroValveListDlg();
-                dlg.SetBindingData(allVisualViewModelList);
+                dlg.SetBindingData(allVisualViewModelList, changeHelper, propStatusHelper);
                 dlg.HydroClickInfoEvent += (visual) =>
                 {
                     SelectVisual(visual, eSimulationVisualSource.Set);
@@ -1347,19 +1332,17 @@
                 {
                     SelectVisual(visuals?.FirstOrDefault(), eSimulationVisualSource.Set);
                     UpdateVisualListCtrl();
-                };
-                dlg.ParterChangedEvent += (parter, changeType) =>
-                {
-                    AppendChangeParter(parter, changeType);
                 };
                 dlg.ShowDialog();
             };
             //鎹㈢儹鍣�
-            this.barBtnSetExchangerList.ItemClick += delegate
+            this.barBtnSetExchangerList.ItemClick += async delegate
             {
                 var allVisualViewModelList = GetVisualViewModelList();
+                var changeHelper = GetChangeHelper();
+                var propStatusHelper = await GetPropStatusHelper();
                 var dlg = new SetHydroExchangerListDlg();
-                dlg.SetBindingData(allVisualViewModelList);
+                dlg.SetBindingData(allVisualViewModelList, changeHelper, propStatusHelper);
                 dlg.HydroClickInfoEvent += (visual) =>
                 {
                     SelectVisual(visual, eSimulationVisualSource.Set);
@@ -1368,19 +1351,17 @@
                 {
                     SelectVisual(visuals?.FirstOrDefault(), eSimulationVisualSource.Set);
                     UpdateVisualListCtrl();
-                };
-                dlg.ParterChangedEvent += (parter, changeType) =>
-                {
-                    AppendChangeParter(parter, changeType);
                 };
                 dlg.ShowDialog();
             };
             //鍘嬬缉鏈�
-            this.barBtnSetCompressorList.ItemClick += delegate
+            this.barBtnSetCompressorList.ItemClick += async delegate
             {
                 var allVisualViewModelList = GetVisualViewModelList();
+                var changeHelper = GetChangeHelper();
+                var propStatusHelper = await GetPropStatusHelper();
                 var dlg = new SetHydroCompressorListDlg();
-                dlg.SetBindingData(allVisualViewModelList);
+                dlg.SetBindingData(allVisualViewModelList, changeHelper, propStatusHelper);
                 dlg.HydroClickInfoEvent += (visual) =>
                 {
                     SelectVisual(visual, eSimulationVisualSource.Set);
@@ -1389,10 +1370,6 @@
                 {
                     SelectVisual(visuals?.FirstOrDefault(), eSimulationVisualSource.Set);
                     UpdateVisualListCtrl();
-                };
-                dlg.ParterChangedEvent += (parter, changeType) =>
-                {
-                    AppendChangeParter(parter, changeType);
                 };
                 dlg.ShowDialog();
             };
@@ -1866,39 +1843,6 @@
         }
 
         #endregion 浜哄伐鍒锋柊
-
-        #region 姘存祦鍔ㄧ敾
-
-        //姘存祦鍔ㄧ敾杈呭姪绫�
-        private SimulationFlowEffectHelper _flowEffectHelper = null;
-
-        //鑾峰彇姘存祦鍔ㄧ敾杈呭姪绫�
-        private async Task<SimulationFlowEffectHelper> GetFlowEffectHelper()
-        {
-            if (_hydroInfo == null)
-            {
-                return default;
-            }
-            if (_flowEffectHelper == null)
-            {
-                var visualListHelper = GetVisualListHelper();
-                var bimfaceCtrl = await GetBimfaceCtrl();
-                _flowEffectHelper = new SimulationFlowEffectHelper(visualListHelper, bimfaceCtrl);
-                var calcuResult = GetCalcuResult();
-                _flowEffectHelper.InitialData(calcuResult);
-            }
-            return _flowEffectHelper;
-        }
-
-        //姘存祦鍔ㄧ敾鏄惁鍙
-        private async void barCkFlowEffect_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
-        {
-            var flowEffectHelper = await GetFlowEffectHelper();
-            //flowEffectHelper.Visible = this.barCkFlowEffect.Checked;
-            //flowEffectHelper.Set();
-        }
-
-        #endregion
 
         #region 鐩戞祴鐐�
 
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/03-helper/HydroChangeHelper.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/03-helper/HydroChangeHelper.cs
index f921485..c64d04e 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/03-helper/HydroChangeHelper.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/03-helper/HydroChangeHelper.cs
@@ -101,6 +101,15 @@
             return _removeParterList.Select(x => x.Code).Distinct().ToList();
         }
 
+        /// <summary>
+        /// 閲嶇疆
+        /// </summary>
+        public void Reset()
+        {
+            _addParterList.Clear();
+            _updateParterList.Clear();
+            _removeParterList.Clear();
+        }
 
     }
 }
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/03-helper/HydroPropStatusHelper.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/03-helper/HydroPropStatusHelper.cs
index 55307b9..9dec32d 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/03-helper/HydroPropStatusHelper.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/03-helper/HydroPropStatusHelper.cs
@@ -1,4 +1,6 @@
-锘縰sing Yw.Hydro;
+锘縰sing DevExpress.Xpo.Helpers;
+using NPOI.SS.Formula.Functions;
+using Yw.Hydro;
 using Yw.Model;
 using Yw.Service;
 
@@ -24,6 +26,7 @@
 
         private Yw.Model.HydroModelInfo _hydroInfo = null;//姘村姏淇℃伅
         private Dictionary<string, List<Yw.Model.HydroParterPropStatusInfo>> _dict = null;//瀛楀吀
+        private Dictionary<string, List<Yw.Model.HydroParterPropStatusInfo>> _dictUpdate = null;//鏇存柊瀛楀吀
 
         /// <summary>
         /// 鑾峰彇灞炴�х姸鎬佷俊鎭�
@@ -62,6 +65,23 @@
         public List<Yw.Model.HydroParterPropStatusInfo> GetPropStatusDbList()
         {
             return _hydroInfo.ToPropStatusDbList(_dict);
+        }
+
+        /// <summary>
+        /// 鑾峰彇鏇存柊灞炴�х姸鎬丏b鍒楄〃
+        /// </summary>
+        /// <returns></returns>
+        public List<Yw.Model.HydroParterPropStatusInfo> GetUpdatePropStatusDbList()
+        {
+            return _hydroInfo.ToPropStatusDbList(_dictUpdate);
+        }
+
+        /// <summary>
+        /// 閲嶇疆
+        /// </summary>
+        public void Reset()
+        {
+            _dictUpdate?.Clear();
         }
 
         /// <summary>
@@ -110,6 +130,40 @@
             }
             propStatusInfo.PropStatus = propStatus;
             propStatusInfo.StatusInfo = statusInfo;
+
+            AppendUpdatePropStatus(propStatusInfo);
+        }
+
+        //闄勫姞鏇存柊灞炴�х姸鎬�
+        private void AppendUpdatePropStatus(HydroParterPropStatusInfo propStatusInfo)
+        {
+            if (propStatusInfo == null)
+            {
+                return;
+            }
+            if (string.IsNullOrEmpty(propStatusInfo.Parter))
+            {
+                return;
+            }
+            if (string.IsNullOrEmpty(propStatusInfo.PropName))
+            {
+                return;
+            }
+            if (_dictUpdate == null)
+            {
+                _dictUpdate = new Dictionary<string, List<HydroParterPropStatusInfo>>();
+            }
+            if (!_dictUpdate.ContainsKey(propStatusInfo.Parter))
+            {
+                _dictUpdate.Add(propStatusInfo.Parter, new List<HydroParterPropStatusInfo>());
+            }
+            if (_dictUpdate[propStatusInfo.Parter] == null)
+            {
+                _dictUpdate[propStatusInfo.Parter] = new List<Model.HydroParterPropStatusInfo>();
+            }
+            var list = _dictUpdate[propStatusInfo.Parter];
+            list.RemoveAll(x => x.PropName == propStatusInfo.PropName);
+            list.Add(propStatusInfo);
         }
 
 
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/05-extensions/HydroModelInfoExtensions.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/05-extensions/HydroModelInfoExtensions.cs
index 3695dea..3eb3ed4 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/05-extensions/HydroModelInfoExtensions.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/05-extensions/HydroModelInfoExtensions.cs
@@ -19,11 +19,17 @@
         private const double _valve_minorloss_default = 0.3d; //闃�闂ㄩ粯璁ゅ眬闃荤郴鏁�
         private const double _resistance_minorloss_default = 9d;//闃讳欢榛樿灞�闃荤郴鏁�
         private const double _blunthead_minorloss_default = 0.1d;//闂峰ご灞�閮ㄩ樆鍔涚郴鏁�
+        private const double _cooling_coefficient_default = 100000d;//鍐峰嵈濉旀祦閲忕郴鏁�
 
         /// <summary>
         /// 淇鍙傛暟
         /// </summary>
-        public static void RepairParas(this Yw.Model.HydroModelInfo hydroInfo, HydroPropStatusHelper propStatusHelper, out string msg)
+        public static void RepairParas
+            (
+                this Yw.Model.HydroModelInfo hydroInfo,
+                HydroPropStatusHelper propStatusHelper,
+                out string msg
+            )
         {
             msg = string.Empty;
             if (hydroInfo == null)
@@ -261,6 +267,37 @@
 
             #endregion
 
+            #region 鍐峰嵈濉�
+
+            if (hydroInfo.Coolings != null && hydroInfo.Coolings.Count > 0)
+            {
+                foreach (var cooling in hydroInfo.Coolings)
+                {
+                    if (cooling.Coefficient < 1)
+                    {
+                        cooling.Coefficient = _cooling_coefficient_default;
+                        propStatusHelper.UpdatePropStatus(cooling.Code, nameof(cooling.Coefficient), ePropStatus.Abnormal, $"銆愭祦閲忕郴鏁般�戞暟鎹紓甯革紝浣跨敤榛樿鍊糩{_cooling_coefficient_default}]淇");
+                    }
+                    if (cooling.Caliber < 1)
+                    {
+                        var link = allLinks.Find(x => x.StartCode == cooling.Code || x.EndCode == cooling.Code);
+                        if (link != null)
+                        {
+                            if (link is HydroPipeInfo pipe)
+                            {
+                                if (pipe.Diameter > 0)
+                                {
+                                    cooling.Caliber = pipe.Diameter;
+                                    propStatusHelper.UpdatePropStatus(cooling.Code, nameof(cooling.Caliber), ePropStatus.Abnormal, $"銆愬彛寰勩�戞暟鎹紓甯革紝浣跨敤鐩搁偦绠¢亾淇");
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+
+            #endregion
+
         }
 
 
@@ -269,9 +306,9 @@
         #region 瑁呯疆璁$畻
 
         /// <summary>
-        /// 鑾峰彇鎵▼
+        /// 鑾峰彇寮�濮嬪帇鍔�(m)
         /// </summary>
-        public static double GetHead(this Yw.Model.HydroModelInfo hydroInfo)
+        public static double GetStartHead(this Yw.Model.HydroModelInfo hydroInfo)
         {
             if (hydroInfo == null)
             {
@@ -303,7 +340,18 @@
                     }
                 }
             }
+            return startHeadValue;
+        }
 
+        /// <summary>
+        /// 鑾峰彇缁撴潫鍘嬪姏(m)
+        /// </summary>
+        public static double GetEndHead(this Yw.Model.HydroModelInfo hydroInfo)
+        {
+            if (hydroInfo == null)
+            {
+                return default;
+            }
             double endHeadValue = 0;
             var allNodeList = hydroInfo.GetAllNodes();
             if (allNodeList != null && allNodeList.Count > 0)
@@ -316,7 +364,7 @@
                 });
                 if (endSource == null)
                 {
-                    endSource = allSourceList.Matching(new List<string>()
+                    endSource = allNodeList.Matching(new List<string>()
                     {
                         Yw.Hydro.Flags.姘存簮,
                         Yw.Hydro.Flags.鏈
@@ -334,7 +382,20 @@
                     }
                 }
             }
+            return endHeadValue;
+        }
 
+        /// <summary>
+        /// 鑾峰彇鎵▼
+        /// </summary>
+        public static double GetHead(this Yw.Model.HydroModelInfo hydroInfo)
+        {
+            if (hydroInfo == null)
+            {
+                return default;
+            }
+            var startHeadValue = GetStartHead(hydroInfo);
+            var endHeadValue = GetEndHead(hydroInfo);
             return endHeadValue - startHeadValue;
         }
 
@@ -397,6 +458,64 @@
         }
 
         /// <summary>
+        /// 鑾峰彇鎬荤缁撴潫鍘嬪姏锛堢粷瀵瑰帇鍔涳級
+        /// </summary>
+        public static double? GetPipeEndHead(this Yw.Model.HydroModelInfo hydroInfo, Dictionary<string, HydroCalcuVisualResult> allCalcuVisualDict)
+        {
+            if (hydroInfo == null)
+            {
+                return default;
+            }
+            if (allCalcuVisualDict == null || allCalcuVisualDict.Count < 1)
+            {
+                return default;
+            }
+            var allNodeList = hydroInfo.GetAllNodes();
+            if (allNodeList == null || allNodeList.Count < 1)
+            {
+                return default;
+            }
+            var node = allNodeList.Matching(new List<string>()
+            {
+                Yw.Hydro.Flags.鎬荤,
+                Yw.Hydro.Flags.鍑哄彛,
+                Yw.Hydro.Flags.榛樿
+            });
+            if (node == null)
+            {
+                node = allNodeList.Matching(new List<string>()
+                {
+                    Yw.Hydro.Flags.鎬荤,
+                    Yw.Hydro.Flags.鍑哄彛
+                });
+            }
+            if (node == null)
+            {
+                return default;
+            }
+
+            var calcuVisualResult = allCalcuVisualDict.GetValue(node.Code);
+            if (calcuVisualResult == null)
+            {
+                return default;
+            }
+            var calcuValue = calcuVisualResult.GetCalcuValue(Yw.Hydro.VisualCalcuProp.CalcuHead);
+            if (calcuValue == null)
+            {
+                return default;
+            }
+            return Math.Round(calcuValue.Value, 2);
+        }
+
+        /// <summary>
+        /// 鑾峰彇鎬荤缁撴潫鍘嬪姏锛堢粷瀵瑰帇鍔涳級
+        /// </summary>
+        public static double? GetPipeEndHead(this Yw.Model.HydroModelInfo hydroInfo, HydroCalcuResult calcuResult)
+        {
+            return GetPipeEndHead(hydroInfo, calcuResult?.GetVisualDict());
+        }
+
+        /// <summary>
         /// 鑾峰彇鎬荤鍘嬪姏锛堢粷瀵瑰帇鍔涳級
         /// </summary>
         public static double? GetPipeHead(this Yw.Model.HydroModelInfo hydroInfo, HydroCalcuResult calcuResult)
@@ -451,7 +570,9 @@
             {
                 return default;
             }
-            return Math.Round(calcuValue.Value, 2);
+            var endHeadValue = calcuValue.Value;
+            var startHeadValue = GetStartHead(hydroInfo);
+            return Math.Round(endHeadValue - startHeadValue, 2);
         }
 
         #endregion
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/03-node/00-core/HydroNodeViewModel.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/03-node/00-core/HydroNodeViewModel.cs
index 6c851f3..a61300f 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/03-node/00-core/HydroNodeViewModel.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/03-node/00-core/HydroNodeViewModel.cs
@@ -26,6 +26,7 @@
         [DisplayName("鑷敱鍘嬪姏")]
         [Display(Name = "鑷敱鍘嬪姏(m)")]
         [DisplayUnit("m")]
+        [Description("涓嶅寘鍚爣楂橈紝鐩稿綋浜庤〃鍊�")]
         [HydroCalcuPro]
         [PropertyOrder(10001)]
         [ShowEditor(false)]
@@ -39,6 +40,7 @@
         [DisplayName("缁濆鍘嬪姏")]
         [DisplayUnit("m")]
         [Display(Name = "缁濆鍘嬪姏(m)")]
+        [Description("鍖呭惈鏍囬珮")]
         [HydroCalcuPro]
         [PropertyOrder(10002)]
         [ShowEditor(false)]
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/03-node/03-junction/02-emitter/00-core/HydroEmitterViewModel.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/03-node/03-junction/02-emitter/00-core/HydroEmitterViewModel.cs
index 109161f..479f25c 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/03-node/03-junction/02-emitter/00-core/HydroEmitterViewModel.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/03-node/03-junction/02-emitter/00-core/HydroEmitterViewModel.cs
@@ -1,4 +1,6 @@
-锘縩amespace Yw.WinFrmUI
+锘縰sing System.Data.Odbc;
+
+namespace Yw.WinFrmUI
 {
     /// <summary>
     /// 鎵╂暎鍣ㄨ鍥�
@@ -21,6 +23,16 @@
         }
 
         /// <summary>
+        /// 鎹熷け绯绘暟
+        /// </summary>
+        [Category("鏁版嵁")]
+        [DisplayName("鎹熷け绯绘暟")]
+        [Display(Name = "鎹熷け绯绘暟")]
+        [PropertyOrder(2002)]
+        [Browsable(false)]
+        public override double MinorLoss { get; set; }
+
+        /// <summary>
         /// 鏉愭枡
         /// </summary>
         [Category("鏁版嵁")]
@@ -35,21 +47,48 @@
         /// </summary>
         [Category("鏁版嵁")]
         [DisplayName("鍙e緞")]
-        [Display(Name = "鍙e緞(mm)")]
         [DisplayUnit("mm")]
+        [Display(Name = "鍙e緞(mm)")]
         [PropertyOrder(3002)]
         [Browsable(true)]
         public double Caliber { get; set; }
 
         /// <summary>
-        /// 鍠峰皠绯绘暟
+        /// 娴侀噺绯绘暟
         /// </summary>
         [Category("鏁版嵁")]
-        [DisplayName("鍠峰皠绯绘暟")]
+        [DisplayName("娴侀噺绯绘暟")]
         [PropertyOrder(3003)]
         [Browsable(true)]
         public virtual double Coefficient { get; set; }
 
+        /// <summary>
+        /// 鑷敱鍘嬪姏
+        /// </summary>
+        [Category("璁$畻缁撴灉")]
+        [DisplayName("鑷敱鍘嬪姏")]
+        [Display(Name = "鑷敱鍘嬪姏(m)")]
+        [DisplayUnit("m")]
+        [Description("涓嶅寘鍚爣楂橈紝鐩稿綋浜庤〃鍊�")]
+        [HydroCalcuPro]
+        [PropertyOrder(10001)]
+        [ShowEditor(false)]
+        [Browsable(false)]
+        public override double? CalcuPress { get; set; }
+
+        /// <summary>
+        /// 缁濆鍘嬪姏
+        /// </summary>
+        [Category("璁$畻缁撴灉")]
+        [DisplayName("缁濆鍘嬪姏")]
+        [DisplayUnit("m")]
+        [Display(Name = "缁濆鍘嬪姏(m)")]
+        [Description("鍖呭惈鏍囬珮")]
+        [HydroCalcuPro]
+        [PropertyOrder(10002)]
+        [ShowEditor(false)]
+        [Browsable(false)]
+        public override double? CalcuHead { get; set; }
 
         /// <summary>
         /// 娴侀噺
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/05-property/HydroVisualPropertyCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/05-property/HydroVisualPropertyCtrl.cs
index 2a66b1b..186b114 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/05-property/HydroVisualPropertyCtrl.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/05-property/HydroVisualPropertyCtrl.cs
@@ -44,11 +44,6 @@
         /// </summary>
         public event Action<HydroVisualViewModel> GradingPropertyValueChangedEvent;
 
-        /// <summary>
-        /// 鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
-
 
         /// <summary>
         /// 寮鸿皟杩炴帴鑺傜偣浜嬩欢
@@ -61,14 +56,19 @@
         /// </summary>
         public event Action<HydroVisualViewModel> HydroViewEvent;
 
-        //灞炴�х姸鎬佽緟鍔╃被
-        private HydroPropStatusHelper _propStatusHelper = null;
+        private HydroChangeHelper _changeHelper = null;//鏀瑰彉杈呭姪绫�
+        private HydroPropStatusHelper _propStatusHelper = null;//灞炴�х姸鎬佽緟鍔╃被
 
         /// <summary>
         /// 鍒濆鍖栨暟鎹�
         /// </summary>
-        public void InitialData(HydroPropStatusHelper propStatusHelper)
+        public void InitialData
+            (
+                HydroChangeHelper changeHelper,
+                HydroPropStatusHelper propStatusHelper
+            )
         {
+            _changeHelper = changeHelper;
             _propStatusHelper = propStatusHelper;
         }
 
@@ -670,8 +670,8 @@
 
                 this.propertyGridControl1.UpdateRows();
             }
+            _changeHelper?.Append(vm.Vmo, eChangeType.Update);
             _propStatusHelper?.UpdatePropStatus(vm.Code, realFieldName, Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃灞炴�ф帶浠朵慨鏀�");
-            this.ParterChangedEvent?.Invoke(vm.Vmo, eChangeType.Update);
         }
 
         //Db鍖归厤
@@ -846,7 +846,7 @@
             var dlg = new HydroCurveEditDlg();
             dlg.ReloadDataEvent += (rhs) =>
             {
-                this.ParterChangedEvent?.Invoke(rhs, eChangeType.Update);
+                _changeHelper?.Append(rhs, eChangeType.Update);
             };
             dlg.SetBindingData(curve);
             dlg.ShowDialog();
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/00-core/HydroVisualListCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/00-core/HydroVisualListCtrl.cs
index 1660e39..8058039 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/00-core/HydroVisualListCtrl.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/00-core/HydroVisualListCtrl.cs
@@ -27,10 +27,6 @@
                     {
                         this.HydroChangedViewEvent?.Invoke(viewList);
                     };
-                    ctrl.ParterChangedEvent += (parter, changeType) =>
-                    {
-                        this.ParterChangedEvent?.Invoke(parter, changeType);
-                    };
                 }
             }
         }
@@ -53,11 +49,6 @@
         public event Action<List<HydroVisualViewModel>> HydroChangedViewEvent;
 
         /// <summary>
-        /// 鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
-
-        /// <summary>
         /// 鍒楄〃涓虹┖鏃堕殣钘廝age
         /// </summary>
         [Browsable(true)]
@@ -73,24 +64,41 @@
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.SetBindingData(hydroInfo, allCalcuResultVisualDict: null);
+            this.SetBindingData(hydroInfo, allCalcuResultVisualDict: null, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, List<HydroCalcuVisualResult> allCalcuResultList)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                List<HydroCalcuVisualResult> allCalcuResultList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             var allCalcuResultVisualDict = allCalcuResultList?.ToDictionary(x => x.Code);
-            SetBindingData(hydroInfo, allCalcuResultVisualDict);
+            SetBindingData(hydroInfo, allCalcuResultVisualDict, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             if (hydroInfo == null)
             {
@@ -100,7 +108,7 @@
             {
                 if (page.Controls[0] is IHydroVisualList ctrl)
                 {
-                    ctrl.SetBindingData(hydroInfo, allCalcuResultVisualDict);
+                    ctrl.SetBindingData(hydroInfo, allCalcuResultVisualDict, changeHelper, propStatusHelper);
                     if (HidePageWhenListIsNull)
                     {
                         if (!ctrl.HasHydroList)
@@ -115,7 +123,12 @@
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList)
+        public void SetBindingData
+            (
+                List<HydroVisualViewModel> allVisualViewModelList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             if (allVisualViewModelList == null || allVisualViewModelList.Count < 1)
             {
@@ -125,7 +138,7 @@
             {
                 if (page.Controls[0] is IHydroVisualList ctrl)
                 {
-                    ctrl.SetBindingData(allVisualViewModelList);
+                    ctrl.SetBindingData(allVisualViewModelList, changeHelper, propStatusHelper);
                     if (HidePageWhenListIsNull)
                     {
                         if (!ctrl.HasHydroList)
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/00-core/HydroVisualListDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/00-core/HydroVisualListDlg.cs
index 5a79a4a..05e0ea3 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/00-core/HydroVisualListDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/00-core/HydroVisualListDlg.cs
@@ -1,4 +1,6 @@
-锘縩amespace Yw.WinFrmUI
+锘縰sing DevExpress.XtraGauges.Core.Model;
+
+namespace Yw.WinFrmUI
 {
     public partial class HydroVisualListDlg : DevExpress.XtraEditors.XtraForm
     {
@@ -33,18 +35,28 @@
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.hydroVisualListCtrl1.SetBindingData(hydroInfo);
+            this.hydroVisualListCtrl1.SetBindingData(hydroInfo, changeHelper, propStatusHelper);
             this.hydroVisualListCtrl1.SetBulkView();
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList)
+        public void SetBindingData
+            (
+                List<HydroVisualViewModel> allVisualViewModelList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.hydroVisualListCtrl1.SetBindingData(allVisualViewModelList);
+            this.hydroVisualListCtrl1.SetBindingData(allVisualViewModelList, changeHelper, propStatusHelper);
             this.hydroVisualListCtrl1.SetBulkView();
         }
 
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/00-core/IHydroVisualList.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/00-core/IHydroVisualList.cs
index c068726..261d124 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/00-core/IHydroVisualList.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/00-core/IHydroVisualList.cs
@@ -27,11 +27,6 @@
         /// </summary>
         event Action<List<HydroVisualViewModel>> HydroChangedViewEvent;
 
-        /// <summary>
-        /// 鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
-
 
         /// <summary>
         /// 鏄惁鏈夋按鍔涘垪琛�
@@ -41,22 +36,22 @@
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        void SetBindingData(Yw.Model.HydroModelInfo hydroInfo);
+        void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, HydroChangeHelper changeHelper = null, HydroPropStatusHelper propStatusHelper = null);
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, List<HydroCalcuVisualResult> allCalcuResultList);
+        void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, List<HydroCalcuVisualResult> allCalcuResultList, HydroChangeHelper changeHelper = null, HydroPropStatusHelper propStatusHelper = null);
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict);
+        void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict, HydroChangeHelper changeHelper = null, HydroPropStatusHelper propStatusHelper = null);
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList);
+        void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList, HydroChangeHelper changeHelper = null, HydroPropStatusHelper propStatusHelper = null);
 
         /// <summary>
         /// 鏇存柊缁戝畾鏁版嵁
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/01-reservoir/HydroReservoirListCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/01-reservoir/HydroReservoirListCtrl.cs
index 278850c..4a6aff1 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/01-reservoir/HydroReservoirListCtrl.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/01-reservoir/HydroReservoirListCtrl.cs
@@ -31,10 +31,6 @@
         /// 姘村姏鏀瑰彉瑙嗗浘浜嬩欢
         /// </summary>
         public event Action<List<HydroVisualViewModel>> HydroChangedViewEvent;
-        /// <summary>
-        ///  鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
 
         /// <summary>
         /// 鏄惁鎷ユ湁姘村姏鍒楄〃
@@ -44,32 +40,50 @@
             get { return _allList != null && _allList.Count > 0; }
         }
 
-        //鎵�鏈夊垪琛�
-        private List<HydroReservoirViewModel> _allList = null;
-        //鎵�鏈夌粦瀹氬垪琛�
-        private List<HydroReservoirViewModel> _allBindingList = null;
+
+        private List<HydroReservoirViewModel> _allList = null;//鎵�鏈夊垪琛�
+        private List<HydroReservoirViewModel> _allBindingList = null; //鎵�鏈夌粦瀹氬垪琛�
+        private HydroChangeHelper _changeHelper = null;//鏀瑰彉杈呭姪绫�
+        private HydroPropStatusHelper _propStatusHelper = null;//灞炴�х姸鎬佽緟鍔╃被
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            SetBindingData(hydroInfo, allCalcuResultList: null);
+            SetBindingData(hydroInfo, allCalcuResultList: null, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, List<HydroCalcuVisualResult> allCalcuResultList)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                List<HydroCalcuVisualResult> allCalcuResultList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             var allCalcuResultVisualDict = allCalcuResultList?.ToDictionary(x => x.Code);
-            SetBindingData(hydroInfo, allCalcuResultVisualDict);
+            SetBindingData(hydroInfo, allCalcuResultVisualDict, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allList = new List<HydroReservoirViewModel>();
             if (hydroInfo != null && hydroInfo.Reservoirs != null && hydroInfo.Reservoirs.Count > 0)
@@ -85,13 +99,20 @@
                     _allList.Add(vm);
                 }
             }
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             Search();
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList)
+        public void SetBindingData
+            (
+                List<HydroVisualViewModel> allVisualViewModelList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allList = new List<HydroReservoirViewModel>();
             allVisualViewModelList?.ForEach(x =>
@@ -101,6 +122,8 @@
                     _allList.Add(x as HydroReservoirViewModel);
                 }
             });
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             Search();
         }
 
@@ -248,7 +271,7 @@
                 return;
             }
             var dlg = new SetHydroReservoirDlg();
-            dlg.SetBindingData(_allBindingList.Select(x => x.Vmo).ToList());
+            dlg.SetBindingData(_allBindingList.Select(x => x.Vmo).ToList(), _changeHelper, _propStatusHelper);
             dlg.ReloadDataEvent += (list) =>
             {
                 if (list == null || list.Count < 1)
@@ -261,9 +284,41 @@
                 this.HydroChangedViewEvent?.Invoke(allVisualViewModelList);
                 var allVisualInfoList = allVisualViewModelList.Select(x => x.Vmo).ToList();
                 this.HydroChangedInfoEvent?.Invoke(allVisualInfoList);
-                list?.ForEach(x => this.ParterChangedEvent?.Invoke(x, eChangeType.Update));
             };
             dlg.ShowDialog();
+        }
+
+        //琛屽崟鍏冩牸鐐瑰嚮浜嬩欢
+        private void gridView1_RowCellClick(object sender, DevExpress.XtraGrid.Views.Grid.RowCellClickEventArgs e)
+        {
+            var row = this.gridView1.GetRow(e.RowHandle) as HydroReservoirViewModel;
+            if (row == null)
+            {
+                return;
+            }
+
+            if (e.Column == this.colSet)
+            {
+                var dlg = new SetHydroReservoirDlg();
+                dlg.SetBindingData(row.Vmo, _changeHelper, _propStatusHelper);
+                dlg.ReloadDataEvent += (list) =>
+                {
+                    if (list == null || list.Count < 1)
+                    {
+                        return;
+                    }
+                    row.UpdateProperty();
+                    this.gridView1.RefreshRow(e.RowHandle);
+                    this.HydroChangedViewEvent?.Invoke(new List<HydroVisualViewModel>() { row });
+                    this.HydroChangedInfoEvent?.Invoke(new List<HydroVisualInfo>() { row.Vmo });
+                };
+                dlg.ShowDialog();
+            }
+            else
+            {
+                this.HydroClickViewEvent?.Invoke(row);
+                this.HydroClickInfoEvent?.Invoke(row.Vmo);
+            }
         }
 
         /// <summary>
@@ -371,35 +426,7 @@
             this.colSet.Visible = false;
         }
 
-        //琛屽崟鍏冩牸鐐瑰嚮浜嬩欢
-        private void gridView1_RowCellClick(object sender, DevExpress.XtraGrid.Views.Grid.RowCellClickEventArgs e)
-        {
-            var row = this.gridView1.GetRow(e.RowHandle) as HydroReservoirViewModel;
-            if (row == null)
-            {
-                return;
-            }
 
-            if (e.Column == this.colSet)
-            {
-                var dlg = new SetHydroReservoirDlg();
-                dlg.SetBindingData(row.Vmo);
-                dlg.ReloadDataEvent += (list) =>
-                {
-                    row.UpdateProperty();
-                    this.gridView1.RefreshRow(e.RowHandle);
-                    this.HydroChangedViewEvent?.Invoke(new List<HydroVisualViewModel>() { row });
-                    this.HydroChangedInfoEvent?.Invoke(new List<HydroVisualInfo>() { row.Vmo });
-                    this.ParterChangedEvent?.Invoke(row.Vmo, eChangeType.Update);
-                };
-                dlg.ShowDialog();
-            }
-            else
-            {
-                this.HydroClickViewEvent?.Invoke(row);
-                this.HydroClickInfoEvent?.Invoke(row.Vmo);
-            }
-        }
 
 
 
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/01-reservoir/SetHydroReservoirDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/01-reservoir/SetHydroReservoirDlg.cs
index 6bf3a07..d2700b6 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/01-reservoir/SetHydroReservoirDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/01-reservoir/SetHydroReservoirDlg.cs
@@ -16,22 +16,36 @@
         public event Action<List<Yw.Model.HydroReservoirInfo>> ReloadDataEvent;
 
         private List<Yw.Model.HydroReservoirInfo> _allVisualList = null;//鎵�鏈夋瀯浠跺垪琛�
+        private HydroChangeHelper _changeHelper = null;//鏀瑰彉杈呭姪绫�
+        private HydroPropStatusHelper _propStatusHelper = null;//灞炴�х姸鎬佽緟鍔╃被
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroReservoirInfo visual)
+        public void SetBindingData
+            (
+                Yw.Model.HydroReservoirInfo visual,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             var allVisualList = visual == null ? null : new List<Yw.Model.HydroReservoirInfo>() { visual };
-            SetBindingData(allVisualList);
+            SetBindingData(allVisualList, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<Yw.Model.HydroReservoirInfo> allVisualList)
+        public void SetBindingData
+            (
+                List<Yw.Model.HydroReservoirInfo> allVisualList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allVisualList = allVisualList;
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             if (_allVisualList != null && _allVisualList.Count == 1)
             {
                 var reservoir = _allVisualList.FirstOrDefault();
@@ -51,6 +65,11 @@
             {
                 if (head.HasValue)
                 {
+                    if (x.Head != head.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.Head), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.Head = head.Value;
                 }
             });
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/01-reservoir/SetHydroReservoirListDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/01-reservoir/SetHydroReservoirListDlg.cs
index beca21b..9aa24c4 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/01-reservoir/SetHydroReservoirListDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/01-reservoir/SetHydroReservoirListDlg.cs
@@ -12,7 +12,6 @@
             this.hydroReservoirListCtrl1.HydroClickViewEvent += HydroReservoirListCtrl1_HydroClickViewEvent;
             this.hydroReservoirListCtrl1.HydroChangedInfoEvent += HydroReservoirListCtrl1_HydroChangedInfoEvent;
             this.hydroReservoirListCtrl1.HydroChangedViewEvent += HydroReservoirListCtrl1_HydroChangedViewEvent;
-            this.hydroReservoirListCtrl1.ParterChangedEvent += HydroReservoirListCtrl1_ParterChangedEvent;
         }
 
 
@@ -32,26 +31,32 @@
         /// 姘村姏鏀瑰彉瑙嗗浘浜嬩欢
         /// </summary>
         public event Action<List<HydroVisualViewModel>> HydroChangedViewEvent;
-        /// <summary>
-        /// 鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.hydroReservoirListCtrl1.SetBindingData(hydroInfo);
+            this.hydroReservoirListCtrl1.SetBindingData(hydroInfo, changeHelper, propStatusHelper);
             this.hydroReservoirListCtrl1.SetBulkView();
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList)
+        public void SetBindingData
+            (
+                List<HydroVisualViewModel> allVisualViewModelList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.hydroReservoirListCtrl1.SetBindingData(allVisualViewModelList);
+            this.hydroReservoirListCtrl1.SetBindingData(allVisualViewModelList, changeHelper, propStatusHelper);
             this.hydroReservoirListCtrl1.SetBulkView();
         }
 
@@ -79,11 +84,6 @@
             this.HydroChangedViewEvent?.Invoke(obj);
         }
 
-        //鏋勪欢鏀瑰彉浜嬩欢
-        private void HydroReservoirListCtrl1_ParterChangedEvent(HydroParterInfo arg1, eChangeType arg2)
-        {
-            this.ParterChangedEvent?.Invoke(arg1, arg2);
-        }
 
 
 
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/02-tank/HydroTankListCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/02-tank/HydroTankListCtrl.cs
index e4a63b3..417b02a 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/02-tank/HydroTankListCtrl.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/02-tank/HydroTankListCtrl.cs
@@ -31,10 +31,6 @@
         /// 姘村姏鏀瑰彉瑙嗗浘浜嬩欢
         /// </summary>
         public event Action<List<HydroVisualViewModel>> HydroChangedViewEvent;
-        /// <summary>
-        /// 鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
 
         /// <summary>
         /// 鏄惁鎷ユ湁姘村姏鍒楄〃
@@ -44,32 +40,50 @@
             get { return _allList != null && _allList.Count > 0; }
         }
 
-        //鎵�鏈夊垪琛�
-        private List<HydroTankViewModel> _allList = null;
-        //鎵�鏈夌粦瀹氬垪琛�
-        private List<HydroTankViewModel> _allBindingList = null;
+
+        private List<HydroTankViewModel> _allList = null;//鎵�鏈夊垪琛�
+        private List<HydroTankViewModel> _allBindingList = null; //鎵�鏈夌粦瀹氬垪琛�
+        private HydroChangeHelper _changeHelper = null;//鏀瑰彉杈呭姪绫�
+        private HydroPropStatusHelper _propStatusHelper = null;//灞炴�х姸鎬佽緟鍔╃被
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            SetBindingData(hydroInfo, allCalcuResultVisualDict: null);
+            SetBindingData(hydroInfo, allCalcuResultVisualDict: null, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, List<HydroCalcuVisualResult> allCalcuResultList)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                List<HydroCalcuVisualResult> allCalcuResultList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             var allCalcuResultVisualDict = allCalcuResultList?.ToDictionary(x => x.Code);
-            SetBindingData(hydroInfo, allCalcuResultVisualDict);
+            SetBindingData(hydroInfo, allCalcuResultVisualDict, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(HydroModelInfo hydroInfo, Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict)
+        public void SetBindingData
+            (
+                HydroModelInfo hydroInfo,
+                Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allList = new List<HydroTankViewModel>();
             if (hydroInfo != null && hydroInfo.Tanks != null && hydroInfo.Tanks.Count > 0)
@@ -85,13 +99,20 @@
                     _allList.Add(vm);
                 }
             }
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             Search();
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList)
+        public void SetBindingData
+            (
+                List<HydroVisualViewModel> allVisualViewModelList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allList = new List<HydroTankViewModel>();
             allVisualViewModelList?.ForEach(x =>
@@ -101,6 +122,8 @@
                     _allList.Add(x as HydroTankViewModel);
                 }
             });
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             Search();
         }
 
@@ -248,7 +271,7 @@
                 return;
             }
             var dlg = new SetHydroTankDlg();
-            dlg.SetBindingData(_allBindingList.Select(x => x.Vmo).ToList());
+            dlg.SetBindingData(_allBindingList.Select(x => x.Vmo).ToList(), _changeHelper, _propStatusHelper);
             dlg.ReloadDataEvent += (list) =>
             {
                 if (list == null || list.Count < 1)
@@ -261,7 +284,6 @@
                 this.HydroChangedViewEvent?.Invoke(allVisualViewModelList);
                 var allVisualInfoList = allVisualViewModelList.Select(x => x.Vmo).ToList();
                 this.HydroChangedInfoEvent?.Invoke(allVisualInfoList);
-                list.ForEach(x => this.ParterChangedEvent?.Invoke(x, eChangeType.Update));
             };
             dlg.ShowDialog();
         }
@@ -278,7 +300,7 @@
             if (e.Column == this.colSet)
             {
                 var dlg = new SetHydroTankDlg();
-                dlg.SetBindingData(row.Vmo);
+                dlg.SetBindingData(row.Vmo, _changeHelper, _propStatusHelper);
                 dlg.ReloadDataEvent += (list) =>
                 {
                     if (list == null || list.Count < 1)
@@ -289,7 +311,6 @@
                     this.gridView1.RefreshRow(e.RowHandle);
                     this.HydroChangedViewEvent?.Invoke(new List<HydroVisualViewModel>() { row });
                     this.HydroChangedInfoEvent?.Invoke(new List<HydroVisualInfo>() { row.Vmo });
-                    this.ParterChangedEvent?.Invoke(row.Vmo, eChangeType.Update);
                 };
                 dlg.ShowDialog();
             }
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/02-tank/SetHydroTankDlg.Designer.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/02-tank/SetHydroTankDlg.Designer.cs
index 783de4c..dde6927 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/02-tank/SetHydroTankDlg.Designer.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/02-tank/SetHydroTankDlg.Designer.cs
@@ -42,7 +42,8 @@
             layoutControlItem4 = new DevExpress.XtraLayout.LayoutControlItem();
             layoutControlItem6 = new DevExpress.XtraLayout.LayoutControlItem();
             layoutControlItem9 = new DevExpress.XtraLayout.LayoutControlItem();
-            emptySpaceItem1 = new DevExpress.XtraLayout.EmptySpaceItem();
+            txtMinVol = new DevExpress.XtraEditors.TextEdit();
+            layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem();
             ((ISupportInitialize)layoutControl1).BeginInit();
             layoutControl1.SuspendLayout();
             ((ISupportInitialize)txtDN.Properties).BeginInit();
@@ -57,11 +58,13 @@
             ((ISupportInitialize)layoutControlItem4).BeginInit();
             ((ISupportInitialize)layoutControlItem6).BeginInit();
             ((ISupportInitialize)layoutControlItem9).BeginInit();
-            ((ISupportInitialize)emptySpaceItem1).BeginInit();
+            ((ISupportInitialize)txtMinVol.Properties).BeginInit();
+            ((ISupportInitialize)layoutControlItem2).BeginInit();
             SuspendLayout();
             // 
             // layoutControl1
             // 
+            layoutControl1.Controls.Add(txtMinVol);
             layoutControl1.Controls.Add(generalOkAndCancelCtrl1);
             layoutControl1.Controls.Add(txtDN);
             layoutControl1.Controls.Add(txtMaxLevel);
@@ -92,6 +95,7 @@
             // 
             txtDN.Location = new Point(76, 60);
             txtDN.Name = "txtDN";
+            txtDN.Properties.AllowNullInput = DevExpress.Utils.DefaultBoolean.True;
             txtDN.Properties.DisplayFormat.FormatString = "{0}m";
             txtDN.Properties.DisplayFormat.FormatType = DevExpress.Utils.FormatType.Custom;
             txtDN.Properties.MaskSettings.Set("MaskManagerType", typeof(DevExpress.Data.Mask.NumericMaskManager));
@@ -104,6 +108,7 @@
             // 
             txtMaxLevel.Location = new Point(272, 36);
             txtMaxLevel.Name = "txtMaxLevel";
+            txtMaxLevel.Properties.AllowNullInput = DevExpress.Utils.DefaultBoolean.True;
             txtMaxLevel.Properties.DisplayFormat.FormatString = "{0}m";
             txtMaxLevel.Properties.DisplayFormat.FormatType = DevExpress.Utils.FormatType.Custom;
             txtMaxLevel.Properties.MaskSettings.Set("MaskManagerType", typeof(DevExpress.Data.Mask.NumericMaskManager));
@@ -116,6 +121,7 @@
             // 
             txtMinLevel.Location = new Point(76, 36);
             txtMinLevel.Name = "txtMinLevel";
+            txtMinLevel.Properties.AllowNullInput = DevExpress.Utils.DefaultBoolean.True;
             txtMinLevel.Properties.DisplayFormat.FormatString = "{0}m";
             txtMinLevel.Properties.DisplayFormat.FormatType = DevExpress.Utils.FormatType.Custom;
             txtMinLevel.Properties.MaskSettings.Set("MaskManagerType", typeof(DevExpress.Data.Mask.NumericMaskManager));
@@ -128,6 +134,7 @@
             // 
             txtInitLevel.Location = new Point(272, 12);
             txtInitLevel.Name = "txtInitLevel";
+            txtInitLevel.Properties.AllowNullInput = DevExpress.Utils.DefaultBoolean.True;
             txtInitLevel.Properties.DisplayFormat.FormatString = "{0}m";
             txtInitLevel.Properties.DisplayFormat.FormatType = DevExpress.Utils.FormatType.Custom;
             txtInitLevel.Properties.MaskSettings.Set("MaskManagerType", typeof(DevExpress.Data.Mask.NumericMaskManager));
@@ -140,6 +147,7 @@
             // 
             txtPoolElev.Location = new Point(76, 12);
             txtPoolElev.Name = "txtPoolElev";
+            txtPoolElev.Properties.AllowNullInput = DevExpress.Utils.DefaultBoolean.True;
             txtPoolElev.Properties.DisplayFormat.FormatString = "{0}m";
             txtPoolElev.Properties.DisplayFormat.FormatType = DevExpress.Utils.FormatType.Custom;
             txtPoolElev.Properties.MaskSettings.Set("MaskManagerType", typeof(DevExpress.Data.Mask.NumericMaskManager));
@@ -152,7 +160,7 @@
             // 
             Root.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True;
             Root.GroupBordersVisible = false;
-            Root.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlItem1, layoutControlItem5, layoutControlItem7, layoutControlItem4, layoutControlItem6, layoutControlItem9, emptySpaceItem1 });
+            Root.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlItem1, layoutControlItem5, layoutControlItem7, layoutControlItem4, layoutControlItem6, layoutControlItem9, layoutControlItem2 });
             Root.Name = "Root";
             Root.Size = new Size(413, 122);
             Root.TextVisible = false;
@@ -211,13 +219,27 @@
             layoutControlItem9.TextSize = new Size(0, 0);
             layoutControlItem9.TextVisible = false;
             // 
-            // emptySpaceItem1
+            // txtMinVol
             // 
-            emptySpaceItem1.AllowHotTrack = false;
-            emptySpaceItem1.Location = new Point(196, 48);
-            emptySpaceItem1.Name = "emptySpaceItem1";
-            emptySpaceItem1.Size = new Size(197, 24);
-            emptySpaceItem1.TextSize = new Size(0, 0);
+            txtMinVol.Location = new Point(272, 60);
+            txtMinVol.Name = "txtMinVol";
+            txtMinVol.Properties.AllowNullInput = DevExpress.Utils.DefaultBoolean.True;
+            txtMinVol.Properties.DisplayFormat.FormatString = "{0}m鲁";
+            txtMinVol.Properties.DisplayFormat.FormatType = DevExpress.Utils.FormatType.Custom;
+            txtMinVol.Properties.MaskSettings.Set("MaskManagerType", typeof(DevExpress.Data.Mask.NumericMaskManager));
+            txtMinVol.Properties.MaskSettings.Set("MaskManagerSignature", "allowNull=False");
+            txtMinVol.Size = new Size(129, 20);
+            txtMinVol.StyleController = layoutControl1;
+            txtMinVol.TabIndex = 6;
+            // 
+            // layoutControlItem2
+            // 
+            layoutControlItem2.Control = txtMinVol;
+            layoutControlItem2.Location = new Point(196, 48);
+            layoutControlItem2.Name = "layoutControlItem2";
+            layoutControlItem2.Size = new Size(197, 24);
+            layoutControlItem2.Text = "鏈�灏忓绉�:";
+            layoutControlItem2.TextSize = new Size(52, 14);
             // 
             // SetHydroTankDlg
             // 
@@ -243,7 +265,8 @@
             ((ISupportInitialize)layoutControlItem4).EndInit();
             ((ISupportInitialize)layoutControlItem6).EndInit();
             ((ISupportInitialize)layoutControlItem9).EndInit();
-            ((ISupportInitialize)emptySpaceItem1).EndInit();
+            ((ISupportInitialize)txtMinVol.Properties).EndInit();
+            ((ISupportInitialize)layoutControlItem2).EndInit();
             ResumeLayout(false);
         }
 
@@ -263,6 +286,7 @@
         private DevExpress.XtraLayout.LayoutControlItem layoutControlItem7;
         private GeneralOkAndCancelCtrl generalOkAndCancelCtrl1;
         private DevExpress.XtraLayout.LayoutControlItem layoutControlItem9;
-        private DevExpress.XtraLayout.EmptySpaceItem emptySpaceItem1;
+        private DevExpress.XtraEditors.TextEdit txtMinVol;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2;
     }
 }
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/02-tank/SetHydroTankDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/02-tank/SetHydroTankDlg.cs
index 9b4953b..dc02013 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/02-tank/SetHydroTankDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/02-tank/SetHydroTankDlg.cs
@@ -16,24 +16,37 @@
         /// </summary>
         public event Action<List<Yw.Model.HydroTankInfo>> ReloadDataEvent;
 
-        //鎵�鏈夋瀯浠跺垪琛�
-        private List<Yw.Model.HydroTankInfo> _allVisualList = null;
+        private List<Yw.Model.HydroTankInfo> _allVisualList = null;//鎵�鏈夋瀯浠跺垪琛�
+        private HydroChangeHelper _changeHelper = null;//鏀瑰彉杈呭姪绫�
+        private HydroPropStatusHelper _propStatusHelper = null;//灞炴�х姸鎬佽緟鍔╃被
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroTankInfo parter)
+        public void SetBindingData
+            (
+                Yw.Model.HydroTankInfo parter,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             var allParterList = parter == null ? null : new List<Yw.Model.HydroTankInfo>() { parter };
-            SetBindingData(allParterList);
+            SetBindingData(allParterList, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<Yw.Model.HydroTankInfo> allParterList)
+        public void SetBindingData
+            (
+                List<Yw.Model.HydroTankInfo> allParterList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allVisualList = allParterList;
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             if (_allVisualList != null && _allVisualList.Count == 1)
             {
                 var visual = _allVisualList.First();
@@ -42,6 +55,7 @@
                 this.txtMinLevel.EditValue = visual.MinLevel;
                 this.txtMaxLevel.EditValue = visual.MaxLevel;
                 this.txtDN.EditValue = visual.DN;
+                this.txtMinVol.EditValue = visual.MinVol;
             }
         }
 
@@ -57,28 +71,63 @@
             double? minLevel = this.txtMinLevel.EditValue == null ? null : double.Parse(this.txtMinLevel.EditValue.ToString());
             double? maxLevel = this.txtMaxLevel.EditValue == null ? null : double.Parse(this.txtMaxLevel.EditValue.ToString());
             double? dn = this.txtDN.EditValue == null ? null : double.Parse(this.txtDN.EditValue.ToString());
+            double? minVol = this.txtMinVol.EditValue == null ? null : double.Parse(this.txtMinVol.EditValue.ToString());
             _allVisualList.ForEach(x =>
             {
                 if (poolElev.HasValue)
                 {
+                    if (x.PoolElev != poolElev.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.PoolElev), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.PoolElev = poolElev.Value;
                 }
                 if (initLevel.HasValue)
                 {
+                    if (x.InitLevel != initLevel.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.InitLevel), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.InitLevel = initLevel.Value;
                 }
                 if (minLevel.HasValue)
                 {
+                    if (x.MinLevel != minLevel.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.MinLevel), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.MinLevel = minLevel.Value;
                 }
                 if (maxLevel.HasValue)
                 {
+                    if (x.MaxLevel != maxLevel.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.MaxLevel), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.MaxLevel = maxLevel.Value;
                 }
                 if (dn.HasValue)
                 {
+                    if (x.DN != dn.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.DN), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.DN = dn.Value;
                 }
+                if (minVol.HasValue)
+                {
+                    if (x.MinVol != minVol.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.MinVol), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
+                    x.MinVol = minVol.Value;
+                }
             });
             this.ReloadDataEvent?.Invoke(_allVisualList);
             this.DialogResult = DialogResult.OK;
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/02-tank/SetHydroTankListDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/02-tank/SetHydroTankListDlg.cs
index 5386f7a..63755f6 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/02-tank/SetHydroTankListDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/02-tank/SetHydroTankListDlg.cs
@@ -12,7 +12,6 @@
             this.hydroTankListCtrl1.HydroClickViewEvent += HydroTankListCtrl1_HydroClickViewEvent;
             this.hydroTankListCtrl1.HydroChangedInfoEvent += HydroTankListCtrl1_HydroChangedInfoEvent;
             this.hydroTankListCtrl1.HydroChangedViewEvent += HydroTankListCtrl1_HydroChangedViewEvent;
-            this.hydroTankListCtrl1.ParterChangedEvent += HydroTankListCtrl1_ParterChangedEvent;
         }
 
 
@@ -32,26 +31,32 @@
         /// 姘村姏鏀瑰彉瑙嗗浘浜嬩欢
         /// </summary>
         public event Action<List<HydroVisualViewModel>> HydroChangedViewEvent;
-        /// <summary>
-        /// 鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.hydroTankListCtrl1.SetBindingData(hydroInfo);
+            this.hydroTankListCtrl1.SetBindingData(hydroInfo, changeHelper, propStatusHelper);
             this.hydroTankListCtrl1.SetBulkView();
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList)
+        public void SetBindingData
+            (
+                List<HydroVisualViewModel> allVisualViewModelList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.hydroTankListCtrl1.SetBindingData(allVisualViewModelList);
+            this.hydroTankListCtrl1.SetBindingData(allVisualViewModelList, changeHelper, propStatusHelper);
             this.hydroTankListCtrl1.SetBulkView();
         }
 
@@ -79,11 +84,6 @@
             this.HydroChangedViewEvent?.Invoke(obj);
         }
 
-        //鏋勪欢鏀瑰彉浜嬩欢
-        private void HydroTankListCtrl1_ParterChangedEvent(HydroParterInfo arg1, eChangeType arg2)
-        {
-            this.ParterChangedEvent?.Invoke(arg1, arg2);
-        }
 
 
 
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/03-waterbox/HydroWaterboxListCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/03-waterbox/HydroWaterboxListCtrl.cs
index d566885..e024ff8 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/03-waterbox/HydroWaterboxListCtrl.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/03-waterbox/HydroWaterboxListCtrl.cs
@@ -33,10 +33,6 @@
         /// 姘村姏鏀瑰彉瑙嗗浘浜嬩欢
         /// </summary>
         public event Action<List<HydroVisualViewModel>> HydroChangedViewEvent;
-        /// <summary>
-        /// 鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
 
         #endregion
 
@@ -48,34 +44,54 @@
             get { return _allList != null && _allList.Count > 0; }
         }
 
-        //鎵�鏈夊垪琛�
-        private List<HydroWaterboxViewModel> _allList = null;
-        //鎵�鏈夌粦瀹氬垪琛�
-        private List<HydroWaterboxViewModel> _allBindingList = null;
+
+        private List<HydroWaterboxViewModel> _allList = null;//鎵�鏈夊垪琛�
+        private List<HydroWaterboxViewModel> _allBindingList = null;//鎵�鏈夌粦瀹氬垪琛�
+        private HydroChangeHelper _changeHelper = null;//鏀瑰彉杈呭姪绫�
+        private HydroPropStatusHelper _propStatusHelper = null;//灞炴�х姸鎬佽緟鍔╃被
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            SetBindingData(hydroInfo, allCalcuResultVisualDict: null);
+            SetBindingData(hydroInfo, allCalcuResultVisualDict: null, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, List<HydroCalcuVisualResult> allCalcuResultList)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                List<HydroCalcuVisualResult> allCalcuResultList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             var allCalcuResultVisualDict = allCalcuResultList?.ToDictionary(x => x.Code);
-            SetBindingData(hydroInfo, allCalcuResultVisualDict);
+            SetBindingData(hydroInfo, allCalcuResultVisualDict, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict)
+        public void SetBindingData
+            (
+                HydroModelInfo hydroInfo,
+                Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allList = new List<HydroWaterboxViewModel>();
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             if (hydroInfo != null && hydroInfo.Waterboxs != null && hydroInfo.Waterboxs.Count > 0)
             {
                 foreach (var visual in hydroInfo.Waterboxs)
@@ -95,9 +111,16 @@
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList)
+        public void SetBindingData
+            (
+                List<HydroVisualViewModel> allVisualViewModelList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allList = new List<HydroWaterboxViewModel>();
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             allVisualViewModelList?.ForEach(x =>
             {
                 if (x.Vmo.Catalog == Yw.Hydro.ParterCatalog.Waterbox)
@@ -252,7 +275,7 @@
                 return;
             }
             var dlg = new SetHydroWaterboxDlg();
-            dlg.SetBindingData(_allBindingList.Select(x => x.Vmo).ToList());
+            dlg.SetBindingData(_allBindingList.Select(x => x.Vmo).ToList(), _changeHelper, _propStatusHelper);
             dlg.ReloadDataEvent += (list) =>
             {
                 if (list == null || list.Count < 1)
@@ -265,7 +288,6 @@
                 this.HydroChangedViewEvent?.Invoke(allVisualViewModelList);
                 var allVisualInfoList = allVisualViewModelList.Select(x => x.Vmo).ToList();
                 this.HydroChangedInfoEvent?.Invoke(allVisualInfoList);
-                list.ForEach(x => this.ParterChangedEvent?.Invoke(x, eChangeType.Update));
             };
             dlg.ShowDialog();
         }
@@ -282,7 +304,7 @@
             if (e.Column == this.colSet)
             {
                 var dlg = new SetHydroWaterboxDlg();
-                dlg.SetBindingData(row.Vmo);
+                dlg.SetBindingData(row.Vmo, _changeHelper, _propStatusHelper);
                 dlg.ReloadDataEvent += (list) =>
                 {
                     if (list == null || list.Count < 1)
@@ -293,7 +315,6 @@
                     this.gridView1.RefreshRow(e.RowHandle);
                     this.HydroChangedViewEvent?.Invoke(new List<HydroVisualViewModel>() { row });
                     this.HydroChangedInfoEvent?.Invoke(new List<HydroVisualInfo>() { row.Vmo });
-                    this.ParterChangedEvent?.Invoke(row.Vmo, eChangeType.Update);
                 };
                 dlg.ShowDialog();
             }
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/03-waterbox/SetHydroWaterboxDlg.Designer.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/03-waterbox/SetHydroWaterboxDlg.Designer.cs
index e44c5a1..87dfb24 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/03-waterbox/SetHydroWaterboxDlg.Designer.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/03-waterbox/SetHydroWaterboxDlg.Designer.cs
@@ -42,7 +42,8 @@
             layoutControlItem4 = new DevExpress.XtraLayout.LayoutControlItem();
             layoutControlItem6 = new DevExpress.XtraLayout.LayoutControlItem();
             layoutControlItem9 = new DevExpress.XtraLayout.LayoutControlItem();
-            emptySpaceItem1 = new DevExpress.XtraLayout.EmptySpaceItem();
+            txtMinVol = new DevExpress.XtraEditors.TextEdit();
+            layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem();
             ((ISupportInitialize)layoutControl1).BeginInit();
             layoutControl1.SuspendLayout();
             ((ISupportInitialize)txtDN.Properties).BeginInit();
@@ -57,11 +58,13 @@
             ((ISupportInitialize)layoutControlItem4).BeginInit();
             ((ISupportInitialize)layoutControlItem6).BeginInit();
             ((ISupportInitialize)layoutControlItem9).BeginInit();
-            ((ISupportInitialize)emptySpaceItem1).BeginInit();
+            ((ISupportInitialize)txtMinVol.Properties).BeginInit();
+            ((ISupportInitialize)layoutControlItem2).BeginInit();
             SuspendLayout();
             // 
             // layoutControl1
             // 
+            layoutControl1.Controls.Add(txtMinVol);
             layoutControl1.Controls.Add(generalOkAndCancelCtrl1);
             layoutControl1.Controls.Add(txtDN);
             layoutControl1.Controls.Add(txtMaxLevel);
@@ -157,7 +160,7 @@
             // 
             Root.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True;
             Root.GroupBordersVisible = false;
-            Root.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlItem1, layoutControlItem5, layoutControlItem7, layoutControlItem4, layoutControlItem6, layoutControlItem9, emptySpaceItem1 });
+            Root.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlItem1, layoutControlItem5, layoutControlItem7, layoutControlItem4, layoutControlItem6, layoutControlItem9, layoutControlItem2 });
             Root.Name = "Root";
             Root.Size = new Size(419, 125);
             Root.TextVisible = false;
@@ -216,13 +219,27 @@
             layoutControlItem9.TextSize = new Size(0, 0);
             layoutControlItem9.TextVisible = false;
             // 
-            // emptySpaceItem1
+            // txtMinVol
             // 
-            emptySpaceItem1.AllowHotTrack = false;
-            emptySpaceItem1.Location = new Point(199, 48);
-            emptySpaceItem1.Name = "emptySpaceItem1";
-            emptySpaceItem1.Size = new Size(200, 24);
-            emptySpaceItem1.TextSize = new Size(0, 0);
+            txtMinVol.Location = new Point(275, 60);
+            txtMinVol.Name = "txtMinVol";
+            txtMinVol.Properties.AllowNullInput = DevExpress.Utils.DefaultBoolean.True;
+            txtMinVol.Properties.DisplayFormat.FormatString = "{0}m鲁";
+            txtMinVol.Properties.DisplayFormat.FormatType = DevExpress.Utils.FormatType.Custom;
+            txtMinVol.Properties.MaskSettings.Set("MaskManagerType", typeof(DevExpress.Data.Mask.NumericMaskManager));
+            txtMinVol.Properties.MaskSettings.Set("MaskManagerSignature", "allowNull=False");
+            txtMinVol.Size = new Size(132, 20);
+            txtMinVol.StyleController = layoutControl1;
+            txtMinVol.TabIndex = 6;
+            // 
+            // layoutControlItem2
+            // 
+            layoutControlItem2.Control = txtMinVol;
+            layoutControlItem2.Location = new Point(199, 48);
+            layoutControlItem2.Name = "layoutControlItem2";
+            layoutControlItem2.Size = new Size(200, 24);
+            layoutControlItem2.Text = "鏈�灏忓绉�:";
+            layoutControlItem2.TextSize = new Size(52, 14);
             // 
             // SetHydroWaterboxDlg
             // 
@@ -248,7 +265,8 @@
             ((ISupportInitialize)layoutControlItem4).EndInit();
             ((ISupportInitialize)layoutControlItem6).EndInit();
             ((ISupportInitialize)layoutControlItem9).EndInit();
-            ((ISupportInitialize)emptySpaceItem1).EndInit();
+            ((ISupportInitialize)txtMinVol.Properties).EndInit();
+            ((ISupportInitialize)layoutControlItem2).EndInit();
             ResumeLayout(false);
         }
 
@@ -268,6 +286,7 @@
         private DevExpress.XtraLayout.LayoutControlItem layoutControlItem7;
         private GeneralOkAndCancelCtrl generalOkAndCancelCtrl1;
         private DevExpress.XtraLayout.LayoutControlItem layoutControlItem9;
-        private DevExpress.XtraLayout.EmptySpaceItem emptySpaceItem1;
+        private DevExpress.XtraEditors.TextEdit txtMinVol;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2;
     }
 }
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/03-waterbox/SetHydroWaterboxDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/03-waterbox/SetHydroWaterboxDlg.cs
index 90b71e0..75b3b11 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/03-waterbox/SetHydroWaterboxDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/03-waterbox/SetHydroWaterboxDlg.cs
@@ -15,24 +15,38 @@
         /// </summary>
         public event Action<List<Yw.Model.HydroWaterboxInfo>> ReloadDataEvent;
 
-        //鎵�鏈夐儴浠跺垪琛�
-        private List<Yw.Model.HydroWaterboxInfo> _allVisualList = null;
+
+        private List<Yw.Model.HydroWaterboxInfo> _allVisualList = null;//鎵�鏈夐儴浠跺垪琛�
+        private HydroChangeHelper _changeHelper = null;//鏀瑰彉杈呭姪绫�
+        private HydroPropStatusHelper _propStatusHelper = null;//灞炴�х姸鎬佽緟鍔╃被
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroWaterboxInfo visual)
+        public void SetBindingData
+            (
+                Yw.Model.HydroWaterboxInfo visual,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             var allVisualList = visual == null ? null : new List<Yw.Model.HydroWaterboxInfo>() { visual };
-            SetBindingData(allVisualList);
+            SetBindingData(allVisualList, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<Yw.Model.HydroWaterboxInfo> allVisualList)
+        public void SetBindingData
+            (
+                List<Yw.Model.HydroWaterboxInfo> allVisualList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allVisualList = allVisualList;
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             if (_allVisualList != null && _allVisualList.Count == 1)
             {
                 var visual = _allVisualList.First();
@@ -41,6 +55,7 @@
                 this.txtMinLevel.EditValue = Math.Round(visual.MinLevel, 4);
                 this.txtMaxLevel.EditValue = Math.Round(visual.MaxLevel, 4);
                 this.txtDN.EditValue = Math.Round(visual.DN, 4);
+                this.txtMinVol.EditValue = Math.Round(visual.MinVol, 2);
             }
         }
 
@@ -56,28 +71,63 @@
             double? minLevel = this.txtMinLevel.EditValue == null ? null : double.Parse(this.txtMinLevel.EditValue.ToString());
             double? maxLevel = this.txtMaxLevel.EditValue == null ? null : double.Parse(this.txtMaxLevel.EditValue.ToString());
             double? dn = this.txtDN.EditValue == null ? null : double.Parse(this.txtDN.EditValue.ToString());
+            double? minVol = this.txtMinVol.EditValue == null ? null : double.Parse(this.txtMinVol.EditValue.ToString());
             _allVisualList.ForEach(x =>
             {
                 if (poolElev.HasValue)
                 {
+                    if (x.PoolElev != poolElev.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.PoolElev), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.PoolElev = poolElev.Value;
                 }
                 if (initLevel.HasValue)
                 {
+                    if (x.InitLevel != initLevel.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.InitLevel), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.InitLevel = initLevel.Value;
                 }
                 if (minLevel.HasValue)
                 {
+                    if (x.MinLevel != minLevel.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.MinLevel), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.MinLevel = minLevel.Value;
                 }
                 if (maxLevel.HasValue)
                 {
+                    if (x.MaxLevel != maxLevel.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.MaxLevel), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.MaxLevel = maxLevel.Value;
                 }
                 if (dn.HasValue)
                 {
+                    if (x.DN != dn.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.DN), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.DN = dn.Value;
                 }
+                if (minVol.HasValue)
+                {
+                    if (x.MinVol != minVol.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.MinVol), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
+                    x.MinVol = minVol.Value;
+                }
             });
             this.ReloadDataEvent?.Invoke(_allVisualList);
             this.DialogResult = DialogResult.OK;
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/03-waterbox/SetHydroWaterboxListDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/03-waterbox/SetHydroWaterboxListDlg.cs
index 02b81fb..9d6e6bb 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/03-waterbox/SetHydroWaterboxListDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/03-waterbox/SetHydroWaterboxListDlg.cs
@@ -1,6 +1,4 @@
-锘縰sing Yw.Model;
-
-namespace Yw.WinFrmUI
+锘縩amespace Yw.WinFrmUI
 {
     public partial class SetHydroWaterboxListDlg : DevExpress.XtraEditors.XtraForm
     {
@@ -12,7 +10,6 @@
             this.hydroWaterboxListCtrl1.HydroClickViewEvent += HydroWaterboxListCtrl1_HydroClickViewEvent;
             this.hydroWaterboxListCtrl1.HydroChangedInfoEvent += HydroWaterboxListCtrl1_HydroChangedInfoEvent;
             this.hydroWaterboxListCtrl1.HydroChangedViewEvent += HydroWaterboxListCtrl1_HydroChangedViewEvent;
-            this.hydroWaterboxListCtrl1.ParterChangedEvent += HydroWaterboxListCtrl1_ParterChangedEvent;
         }
 
 
@@ -32,26 +29,32 @@
         /// 姘村姏鏀瑰彉瑙嗗浘浜嬩欢
         /// </summary>
         public event Action<List<HydroVisualViewModel>> HydroChangedViewEvent;
-        /// <summary>
-        /// 鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.hydroWaterboxListCtrl1.SetBindingData(hydroInfo);
+            this.hydroWaterboxListCtrl1.SetBindingData(hydroInfo, changeHelper, propStatusHelper);
             this.hydroWaterboxListCtrl1.SetBulkView();
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList)
+        public void SetBindingData
+            (
+                List<HydroVisualViewModel> allVisualViewModelList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.hydroWaterboxListCtrl1.SetBindingData(allVisualViewModelList);
+            this.hydroWaterboxListCtrl1.SetBindingData(allVisualViewModelList, changeHelper, propStatusHelper);
             this.hydroWaterboxListCtrl1.SetBulkView();
         }
 
@@ -79,11 +82,6 @@
             this.HydroChangedViewEvent?.Invoke(obj);
         }
 
-        //姘村姏鏀瑰彉浜嬩欢
-        private void HydroWaterboxListCtrl1_ParterChangedEvent(HydroParterInfo arg1, eChangeType arg2)
-        {
-            this.ParterChangedEvent?.Invoke(arg1, arg2);
-        }
 
 
 
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/04-junction/HydroJunctionListCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/04-junction/HydroJunctionListCtrl.cs
index 517ce6e..d33aed7 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/04-junction/HydroJunctionListCtrl.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/04-junction/HydroJunctionListCtrl.cs
@@ -31,10 +31,6 @@
         /// 姘村姏鏀瑰彉瑙嗗浘浜嬩欢
         /// </summary>
         public event Action<List<HydroVisualViewModel>> HydroChangedViewEvent;
-        /// <summary>
-        /// 鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
 
         /// <summary>
         /// 鏄惁鎷ユ湁姘村姏鍒楄〃
@@ -44,34 +40,54 @@
             get { return _allList != null && _allList.Count > 0; }
         }
 
-        //鎵�鏈夊垪琛�
-        private List<HydroJunctionViewModel> _allList = null;
-        //鎵�鏈夌粦瀹氬垪琛�
-        private List<HydroJunctionViewModel> _allBindingList = null;
+
+        private List<HydroJunctionViewModel> _allList = null;//鎵�鏈夊垪琛�
+        private List<HydroJunctionViewModel> _allBindingList = null;  //鎵�鏈夌粦瀹氬垪琛�
+        private HydroChangeHelper _changeHelper = null;//鏀瑰彉杈呭姪绫�
+        private HydroPropStatusHelper _propStatusHelper = null;//灞炴�х姸鎬佽緟鍔╃被
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            SetBindingData(hydroInfo, allCalcuResultVisualDict: null);
+            SetBindingData(hydroInfo, allCalcuResultVisualDict: null, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, List<HydroCalcuVisualResult> allCalcuResultList)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                List<HydroCalcuVisualResult> allCalcuResultList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             var allCalcuResultVisualDict = allCalcuResultList?.ToDictionary(x => x.Code);
-            SetBindingData(hydroInfo, allCalcuResultVisualDict);
+            SetBindingData(hydroInfo, allCalcuResultVisualDict, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict)
+        public void SetBindingData
+            (
+                HydroModelInfo hydroInfo,
+                Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allList = new List<HydroJunctionViewModel>();
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             if (hydroInfo != null && hydroInfo.Junctions != null && hydroInfo.Junctions.Count > 0)
             {
                 foreach (var visual in hydroInfo.Junctions)
@@ -91,9 +107,16 @@
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList)
+        public void SetBindingData
+            (
+                List<HydroVisualViewModel> allVisualViewModelList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allList = new List<HydroJunctionViewModel>();
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             allVisualViewModelList?.ForEach(x =>
             {
                 if (x.Vmo.Catalog == Yw.Hydro.ParterCatalog.Junction)
@@ -248,7 +271,7 @@
                 return;
             }
             var dlg = new SetHydroJunctionDlg();
-            dlg.SetBindingData(_allBindingList.Select(x => x.Vmo).ToList());
+            dlg.SetBindingData(_allBindingList.Select(x => x.Vmo).ToList(), _changeHelper, _propStatusHelper);
             dlg.ReloadDataEvent += (list) =>
             {
                 if (list == null || list.Count < 1)
@@ -261,7 +284,6 @@
                 this.HydroChangedViewEvent?.Invoke(allVisualViewModelList);
                 var allVisualInfoList = allVisualViewModelList.Select(x => x.Vmo).ToList();
                 this.HydroChangedInfoEvent?.Invoke(allVisualInfoList);
-                list.ForEach(x => this.ParterChangedEvent?.Invoke(x, eChangeType.Update));
             };
             dlg.ShowDialog();
         }
@@ -277,7 +299,7 @@
             if (e.Column == this.colSet)
             {
                 var dlg = new SetHydroJunctionDlg();
-                dlg.SetBindingData(row.Vmo);
+                dlg.SetBindingData(row.Vmo, _changeHelper, _propStatusHelper);
                 dlg.ReloadDataEvent += (list) =>
                 {
                     if (list == null || list.Count < 1)
@@ -288,7 +310,6 @@
                     this.gridView1.RefreshRow(e.RowHandle);
                     this.HydroChangedViewEvent?.Invoke(new List<HydroVisualViewModel>() { row });
                     this.HydroChangedInfoEvent?.Invoke(new List<HydroVisualInfo>() { row.Vmo });
-                    this.ParterChangedEvent?.Invoke(row.Vmo, eChangeType.Update);
                 };
                 dlg.ShowDialog();
             }
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/04-junction/SetHydroJunctionDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/04-junction/SetHydroJunctionDlg.cs
index 8fec89c..940e7f7 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/04-junction/SetHydroJunctionDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/04-junction/SetHydroJunctionDlg.cs
@@ -15,24 +15,38 @@
         /// </summary>
         public event Action<List<Yw.Model.HydroJunctionInfo>> ReloadDataEvent;
 
-        //鎵�鏈夋瀯浠跺垪琛�
-        private List<Yw.Model.HydroJunctionInfo> _allVisualList = null;
+
+        private List<Yw.Model.HydroJunctionInfo> _allVisualList = null;//鎵�鏈夋瀯浠跺垪琛�
+        private HydroChangeHelper _changeHelper = null;//鏀瑰彉杈呭姪绫�
+        private HydroPropStatusHelper _propStatusHelper = null;//灞炴�х姸鎬佽緟鍔╃被
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroJunctionInfo visual)
+        public void SetBindingData
+            (
+                Yw.Model.HydroJunctionInfo visual,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             var allVisualList = visual == null ? null : new List<Model.HydroJunctionInfo>() { visual };
-            SetBindingData(allVisualList);
+            SetBindingData(allVisualList, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<Yw.Model.HydroJunctionInfo> allVisualList)
+        public void SetBindingData
+            (
+                List<Yw.Model.HydroJunctionInfo> allVisualList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allVisualList = allVisualList;
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             if (_allVisualList != null && _allVisualList.Count == 1)
             {
                 var visual = _allVisualList.First();
@@ -54,10 +68,20 @@
             {
                 if (elev.HasValue)
                 {
+                    if (x.Elev != elev.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.Elev), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.Elev = elev.Value;
                 }
                 if (minorLoss.HasValue)
                 {
+                    if (x.MinorLoss != minorLoss.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.MinorLoss), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.MinorLoss = minorLoss.Value;
                 }
             });
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/04-junction/SetHydroJunctionListDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/04-junction/SetHydroJunctionListDlg.cs
index e74ce27..236acf0 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/04-junction/SetHydroJunctionListDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/04-junction/SetHydroJunctionListDlg.cs
@@ -12,7 +12,6 @@
             this.hydroJunctionListCtrl1.HydroClickViewEvent += HydroJunctionListCtrl1_HydroClickViewEvent;
             this.hydroJunctionListCtrl1.HydroChangedInfoEvent += HydroJunctionListCtrl1_HydroChangedInfoEvent;
             this.hydroJunctionListCtrl1.HydroChangedViewEvent += HydroJunctionListCtrl1_HydroChangedViewEvent;
-            this.hydroJunctionListCtrl1.ParterChangedEvent += HydroJunctionListCtrl1_ParterChangedEvent;
         }
 
 
@@ -32,26 +31,32 @@
         /// 姘村姏鏀瑰彉瑙嗗浘浜嬩欢
         /// </summary>
         public event Action<List<HydroVisualViewModel>> HydroChangedViewEvent;
-        /// <summary>
-        /// 鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.hydroJunctionListCtrl1.SetBindingData(hydroInfo);
+            this.hydroJunctionListCtrl1.SetBindingData(hydroInfo, changeHelper, propStatusHelper);
             this.hydroJunctionListCtrl1.SetBulkView();
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList)
+        public void SetBindingData
+            (
+                List<HydroVisualViewModel> allVisualViewModelList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.hydroJunctionListCtrl1.SetBindingData(allVisualViewModelList);
+            this.hydroJunctionListCtrl1.SetBindingData(allVisualViewModelList, changeHelper, propStatusHelper);
             this.hydroJunctionListCtrl1.SetBulkView();
         }
 
@@ -79,11 +84,7 @@
             this.HydroChangedViewEvent?.Invoke(obj);
         }
 
-        //姘村姏鏀瑰彉浜嬩欢
-        private void HydroJunctionListCtrl1_ParterChangedEvent(HydroParterInfo arg1, eChangeType arg2)
-        {
-            this.ParterChangedEvent?.Invoke(arg1, arg2);
-        }
+
 
 
     }
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/05-blunthead/HydroBluntheadListCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/05-blunthead/HydroBluntheadListCtrl.cs
index 8cecc5b..3d64396 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/05-blunthead/HydroBluntheadListCtrl.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/05-blunthead/HydroBluntheadListCtrl.cs
@@ -32,10 +32,6 @@
         /// 姘村姏鏀瑰彉瑙嗗浘浜嬩欢
         /// </summary>
         public event Action<List<HydroVisualViewModel>> HydroChangedViewEvent;
-        /// <summary>
-        /// 鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
 
 
         /// <summary>
@@ -46,34 +42,54 @@
             get { return _allList != null && _allList.Count > 0; }
         }
 
-        //鎵�鏈夊垪琛�
-        private List<HydroBluntheadViewModel> _allList = null;
-        //鎵�鏈夌粦瀹氬垪琛�
-        private List<HydroBluntheadViewModel> _allBindingList = null;
+
+        private List<HydroBluntheadViewModel> _allList = null;//鎵�鏈夊垪琛�
+        private List<HydroBluntheadViewModel> _allBindingList = null;//鎵�鏈夌粦瀹氬垪琛�
+        private HydroChangeHelper _changeHelper = null;//鏀瑰彉杈呭姪绫�
+        private HydroPropStatusHelper _propStatusHelper = null;//灞炴�х姸鎬佽緟鍔╃被
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            SetBindingData(hydroInfo, allCalcuResultVisualDict: null);
+            SetBindingData(hydroInfo, allCalcuResultVisualDict: null, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, List<HydroCalcuVisualResult> allCalcuResultList)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                List<HydroCalcuVisualResult> allCalcuResultList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             var allCalcuResultVisualDict = allCalcuResultList?.ToDictionary(x => x.Code);
-            SetBindingData(hydroInfo, allCalcuResultVisualDict);
+            SetBindingData(hydroInfo, allCalcuResultVisualDict, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict)
+        public void SetBindingData
+            (
+                HydroModelInfo hydroInfo,
+                Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allList = new List<HydroBluntheadViewModel>();
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             if (hydroInfo != null && hydroInfo.Bluntheads != null && hydroInfo.Bluntheads.Count > 0)
             {
                 foreach (var visual in hydroInfo.Bluntheads)
@@ -93,9 +109,16 @@
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList)
+        public void SetBindingData
+            (
+                List<HydroVisualViewModel> allVisualViewModelList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allList = new List<HydroBluntheadViewModel>();
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             allVisualViewModelList?.ForEach(x =>
             {
                 if (x.Vmo.Catalog == Yw.Hydro.ParterCatalog.Blunthead)
@@ -250,7 +273,7 @@
                 return;
             }
             var dlg = new SetHydroBluntheadDlg();
-            dlg.SetBindingData(_allBindingList.Select(x => x.Vmo).ToList());
+            dlg.SetBindingData(_allBindingList.Select(x => x.Vmo).ToList(), _changeHelper, _propStatusHelper);
             dlg.ReloadDataEvent += (list) =>
             {
                 if (list == null || list.Count < 1)
@@ -263,11 +286,11 @@
                 this.HydroChangedViewEvent?.Invoke(allVisualViewModelList);
                 var allVisualInfoList = allVisualViewModelList.Select(x => x.Vmo).ToList();
                 this.HydroChangedInfoEvent?.Invoke(allVisualInfoList);
-                list.ForEach(x => this.ParterChangedEvent?.Invoke(x, eChangeType.Update));
             };
             dlg.ShowDialog();
         }
 
+        //琛屽崟鍏冪偣鍑讳簨浠�
         private void gridView1_RowCellClick(object sender, DevExpress.XtraGrid.Views.Grid.RowCellClickEventArgs e)
         {
             var row = this.gridView1.GetRow(e.RowHandle) as HydroBluntheadViewModel;
@@ -279,7 +302,7 @@
             if (e.Column == this.colSet)
             {
                 var dlg = new SetHydroBluntheadDlg();
-                dlg.SetBindingData(row.Vmo);
+                dlg.SetBindingData(row.Vmo, _changeHelper, _propStatusHelper);
                 dlg.ReloadDataEvent += (list) =>
                 {
                     if (list == null || list.Count < 1)
@@ -290,7 +313,6 @@
                     this.gridView1.RefreshRow(e.RowHandle);
                     this.HydroChangedViewEvent?.Invoke(new List<HydroVisualViewModel>() { row });
                     this.HydroChangedInfoEvent?.Invoke(new List<HydroVisualInfo>() { row.Vmo });
-                    this.ParterChangedEvent?.Invoke(row.Vmo, eChangeType.Update);
                 };
                 dlg.ShowDialog();
             }
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/05-blunthead/SetHydroBluntheadDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/05-blunthead/SetHydroBluntheadDlg.cs
index 4515029..3d72e5d 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/05-blunthead/SetHydroBluntheadDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/05-blunthead/SetHydroBluntheadDlg.cs
@@ -7,6 +7,7 @@
             InitializeComponent();
             this.IconOptions.Icon = Yw.WinFrmUI.GlobalParas.AppIcon;
             this.layoutControl1.SetupLayoutControl();
+            this.generalOkAndCancelCtrl1.OkEvent += GeneralOkAndCancelCtrl1_OkEvent;
         }
 
         /// <summary>
@@ -14,24 +15,37 @@
         /// </summary>
         public event Action<List<Yw.Model.HydroBluntheadInfo>> ReloadDataEvent;
 
-        //鎵�鏈夋瀯浠跺垪琛�
-        private List<Yw.Model.HydroBluntheadInfo> _allVisualList = null;
+        private List<Yw.Model.HydroBluntheadInfo> _allVisualList = null;//鎵�鏈夋瀯浠跺垪琛�
+        private HydroChangeHelper _changeHelper = null;//鏀瑰彉杈呭姪绫�
+        private HydroPropStatusHelper _propStatusHelper = null;//灞炴�х姸鎬佽緟鍔╃被
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroBluntheadInfo visual)
+        public void SetBindingData
+            (
+                Yw.Model.HydroBluntheadInfo visual,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             var allVisualList = visual == null ? null : new List<Yw.Model.HydroBluntheadInfo>() { visual };
-            SetBindingData(allVisualList);
+            SetBindingData(allVisualList, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<Yw.Model.HydroBluntheadInfo> allVisualList)
+        public void SetBindingData
+            (
+                List<Yw.Model.HydroBluntheadInfo> allVisualList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allVisualList = allVisualList;
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             if (_allVisualList != null && _allVisualList.Count == 1)
             {
                 var visual = _allVisualList.First();
@@ -42,8 +56,8 @@
             }
         }
 
-        //
-        private void btnOk_Click(object sender, EventArgs e)
+        //纭畾
+        private void GeneralOkAndCancelCtrl1_OkEvent()
         {
             if (_allVisualList == null || _allVisualList.Count < 1)
             {
@@ -57,18 +71,38 @@
             {
                 if (elev.HasValue)
                 {
+                    if (x.Elev != elev.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.Elev), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.Elev = elev.Value;
                 }
                 if (minorLoss.HasValue)
                 {
+                    if (x.MinorLoss != minorLoss.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.MinorLoss), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.MinorLoss = minorLoss.Value;
                 }
                 if (!string.IsNullOrEmpty(material))
                 {
+                    if (x.Material != material)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.Material), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.Material = material;
                 }
                 if (caliber.HasValue)
                 {
+                    if (x.Caliber != caliber.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.Caliber), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.Caliber = caliber.Value;
                 }
             });
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/05-blunthead/SetHydroBluntheadListDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/05-blunthead/SetHydroBluntheadListDlg.cs
index 8675232..b4b7931 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/05-blunthead/SetHydroBluntheadListDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/05-blunthead/SetHydroBluntheadListDlg.cs
@@ -12,7 +12,6 @@
             this.hydroBluntheadListCtrl1.HydroClickViewEvent += HydroBluntheadListCtrl1_HydroClickViewEvent;
             this.hydroBluntheadListCtrl1.HydroChangedInfoEvent += HydroBluntheadListCtrl1_HydroChangedInfoEvent;
             this.hydroBluntheadListCtrl1.HydroChangedViewEvent += HydroBluntheadListCtrl1_HydroChangedViewEvent;
-            this.hydroBluntheadListCtrl1.ParterChangedEvent += HydroBluntheadListCtrl1_ParterChangedEvent;
         }
 
 
@@ -32,26 +31,32 @@
         /// 姘村姏鏀瑰彉瑙嗗浘浜嬩欢
         /// </summary>
         public event Action<List<HydroVisualViewModel>> HydroChangedViewEvent;
-        /// <summary>
-        /// 鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.hydroBluntheadListCtrl1.SetBindingData(hydroInfo);
+            this.hydroBluntheadListCtrl1.SetBindingData(hydroInfo, changeHelper, propStatusHelper);
             this.hydroBluntheadListCtrl1.SetBulkView();
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList)
+        public void SetBindingData
+            (
+                List<HydroVisualViewModel> allVisualViewModelList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.hydroBluntheadListCtrl1.SetBindingData(allVisualViewModelList);
+            this.hydroBluntheadListCtrl1.SetBindingData(allVisualViewModelList, changeHelper, propStatusHelper);
             this.hydroBluntheadListCtrl1.SetBulkView();
         }
 
@@ -79,11 +84,6 @@
             this.HydroChangedViewEvent?.Invoke(obj);
         }
 
-        //鏋勬灦鏀瑰彉浜嬩欢
-        private void HydroBluntheadListCtrl1_ParterChangedEvent(HydroParterInfo arg1, eChangeType arg2)
-        {
-            this.ParterChangedEvent?.Invoke(arg1, arg2);
-        }
 
     }
 }
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/06-elbow/HydroElbowListCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/06-elbow/HydroElbowListCtrl.cs
index 4fb90c7..c155a6b 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/06-elbow/HydroElbowListCtrl.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/06-elbow/HydroElbowListCtrl.cs
@@ -31,10 +31,6 @@
         /// 姘村姏鏀瑰彉瑙嗗浘浜嬩欢
         /// </summary>
         public event Action<List<HydroVisualViewModel>> HydroChangedViewEvent;
-        /// <summary>
-        /// 鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
 
         /// <summary>
         /// 鏄剧ず鏌ヨ闈㈡澘
@@ -56,34 +52,54 @@
             get { return _allList != null && _allList.Count > 0; }
         }
 
-        //鎵�鏈夊垪琛�
-        private List<HydroElbowViewModel> _allList = null;
-        //鎵�鏈夌粦瀹氬垪琛�
-        private List<HydroElbowViewModel> _allBindingList = null;
+
+        private List<HydroElbowViewModel> _allList = null;//鎵�鏈夊垪琛�
+        private List<HydroElbowViewModel> _allBindingList = null;//鎵�鏈夌粦瀹氬垪琛�
+        private HydroChangeHelper _changeHelper = null;//鏀瑰彉杈呭姪绫�
+        private HydroPropStatusHelper _propStatusHelper = null;//灞炴�х姸鎬佽緟鍔╃被
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            SetBindingData(hydroInfo, allCalcuResultVisualDict: null);
+            SetBindingData(hydroInfo, allCalcuResultVisualDict: null, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, List<HydroCalcuVisualResult> allCalcuResultList)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                List<HydroCalcuVisualResult> allCalcuResultList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             var allCalcuResultVisualDict = allCalcuResultList?.ToDictionary(x => x.Code);
-            SetBindingData(hydroInfo, allCalcuResultVisualDict);
+            SetBindingData(hydroInfo, allCalcuResultVisualDict, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(HydroModelInfo hydroInfo, Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict)
+        public void SetBindingData
+            (
+                HydroModelInfo hydroInfo,
+                Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allList = new List<HydroElbowViewModel>();
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             if (hydroInfo != null && hydroInfo.Elbows != null && hydroInfo.Elbows.Count > 0)
             {
                 foreach (var visual in hydroInfo.Elbows)
@@ -103,9 +119,16 @@
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList)
+        public void SetBindingData
+            (
+                List<HydroVisualViewModel> allVisualViewModelList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allList = new List<HydroElbowViewModel>();
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             allVisualViewModelList?.ForEach(x =>
             {
                 if (x.Vmo.Catalog == Yw.Hydro.ParterCatalog.Elbow)
@@ -279,7 +302,7 @@
                 return;
             }
             var dlg = new SetHydroElbowDlg();
-            dlg.SetBindingData(_allBindingList.Select(x => x.Vmo).ToList());
+            dlg.SetBindingData(_allBindingList.Select(x => x.Vmo).ToList(), _changeHelper, _propStatusHelper);
             dlg.ReloadDataEvent += (list) =>
             {
                 if (list == null || list.Count < 1)
@@ -292,7 +315,6 @@
                 this.HydroChangedViewEvent?.Invoke(allVisualViewModelList);
                 var allVisualInfoList = allVisualViewModelList.Select(x => x.Vmo).ToList();
                 this.HydroChangedInfoEvent?.Invoke(allVisualInfoList);
-                list.ForEach(x => this.ParterChangedEvent?.Invoke(x, eChangeType.Update));
             };
             dlg.ShowDialog();
         }
@@ -309,7 +331,7 @@
             if (e.Column == this.colSet)
             {
                 var dlg = new SetHydroElbowDlg();
-                dlg.SetBindingData(row.Vmo);
+                dlg.SetBindingData(row.Vmo, _changeHelper, _propStatusHelper);
                 dlg.ReloadDataEvent += (list) =>
                 {
                     if (list == null || list.Count < 1)
@@ -320,7 +342,6 @@
                     this.gridView1.RefreshRow(e.RowHandle);
                     this.HydroChangedViewEvent?.Invoke(new List<HydroVisualViewModel>() { row });
                     this.HydroChangedInfoEvent?.Invoke(new List<HydroVisualInfo>() { row.Vmo });
-                    this.ParterChangedEvent?.Invoke(row.Vmo, eChangeType.Update);
                 };
                 dlg.ShowDialog();
             }
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/06-elbow/SetHydroElbowDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/06-elbow/SetHydroElbowDlg.cs
index 3972369..be44a52 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/06-elbow/SetHydroElbowDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/06-elbow/SetHydroElbowDlg.cs
@@ -15,25 +15,37 @@
         /// </summary>
         public event Action<List<Yw.Model.HydroElbowInfo>> ReloadDataEvent;
 
-        //鎵�鏈夋瀯浠跺垪琛�
-
-        private List<Yw.Model.HydroElbowInfo> _allVisualList = null;
+        private List<Yw.Model.HydroElbowInfo> _allVisualList = null; //鎵�鏈夋瀯浠跺垪琛�
+        private HydroChangeHelper _changeHelper = null;//鏀瑰彉杈呭姪绫�
+        private HydroPropStatusHelper _propStatusHelper = null;//灞炴�х姸鎬佽緟鍔╃被
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroElbowInfo visual)
+        public void SetBindingData
+            (
+                Yw.Model.HydroElbowInfo visual,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             var allVisualList = visual == null ? null : new List<Yw.Model.HydroElbowInfo>() { visual };
-            SetBindingData(allVisualList);
+            SetBindingData(allVisualList, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<Yw.Model.HydroElbowInfo> allVisualList)
+        public void SetBindingData
+            (
+                List<Yw.Model.HydroElbowInfo> allVisualList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allVisualList = allVisualList;
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             if (_allVisualList != null && _allVisualList.Count == 1)
             {
                 var visual = _allVisualList.First();
@@ -41,7 +53,7 @@
                 this.txtCaliber.EditValue = visual.Caliber;
                 this.txtBendingAngle.EditValue = visual.BendingAngle;
                 this.txtElbowType.EditValue = visual.ElbowType;
-                this.txtElev.EditValue = visual.Elev;
+                this.txtElev.EditValue = Math.Round(visual.Elev, 4);
                 this.txtMinorLoss.EditValue = visual.MinorLoss;
             }
         }
@@ -63,26 +75,56 @@
             {
                 if (elev.HasValue)
                 {
+                    if (x.Elev != elev.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.Elev), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.Elev = elev.Value;
                 }
                 if (minorLoss.HasValue)
                 {
+                    if (x.MinorLoss != minorLoss.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.MinorLoss), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.MinorLoss = minorLoss.Value;
                 }
                 if (!string.IsNullOrEmpty(material))
                 {
+                    if (x.Material != material)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.Material), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.Material = material;
                 }
                 if (caliber.HasValue)
                 {
+                    if (x.Caliber != caliber.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.Caliber), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.Caliber = caliber.Value;
                 }
                 if (blendingAngle.HasValue)
                 {
+                    if (x.BendingAngle != blendingAngle.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.BendingAngle), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.BendingAngle = blendingAngle.Value;
                 }
                 if (!string.IsNullOrEmpty(elbowType))
                 {
+                    if (x.ElbowType != elbowType)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.ElbowType), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.ElbowType = elbowType;
                 }
             });
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/06-elbow/SetHydroElbowListDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/06-elbow/SetHydroElbowListDlg.cs
index f3d6b66..a5de18e 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/06-elbow/SetHydroElbowListDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/06-elbow/SetHydroElbowListDlg.cs
@@ -13,7 +13,6 @@
             this.hydroElbowListCtrl1.HydroClickViewEvent += HydroElbowListCtrl1_HydroClickViewEvent;
             this.hydroElbowListCtrl1.HydroChangedInfoEvent += HydroElbowListCtrl1_HydroChangedInfoEvent;
             this.hydroElbowListCtrl1.HydroChangedViewEvent += HydroElbowListCtrl1_HydroChangedViewEvent;
-            this.hydroElbowListCtrl1.ParterChangedEvent += HydroElbowListCtrl1_ParterChangedEvent;
         }
 
 
@@ -33,26 +32,32 @@
         /// 姘村姏鏀瑰彉瑙嗗浘浜嬩欢
         /// </summary>
         public event Action<List<HydroVisualViewModel>> HydroChangedViewEvent;
-        /// <summary>
-        /// 鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.hydroElbowListCtrl1.SetBindingData(hydroInfo);
+            this.hydroElbowListCtrl1.SetBindingData(hydroInfo, changeHelper, propStatusHelper);
             this.hydroElbowListCtrl1.SetBulkView();
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList)
+        public void SetBindingData
+            (
+                List<HydroVisualViewModel> allVisualViewModelList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.hydroElbowListCtrl1.SetBindingData(allVisualViewModelList);
+            this.hydroElbowListCtrl1.SetBindingData(allVisualViewModelList, changeHelper, propStatusHelper);
             this.hydroElbowListCtrl1.SetBulkView();
         }
 
@@ -80,11 +85,6 @@
             this.HydroChangedViewEvent?.Invoke(obj);
         }
 
-        //姘村姏鏀瑰彉浜嬩欢
-        private void HydroElbowListCtrl1_ParterChangedEvent(HydroParterInfo arg1, eChangeType arg2)
-        {
-            this.ParterChangedEvent?.Invoke(arg1, arg2);
-        }
 
     }
 }
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/07-threelink/HydroThreelinkListCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/07-threelink/HydroThreelinkListCtrl.cs
index 1cdd359..cda70a4 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/07-threelink/HydroThreelinkListCtrl.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/07-threelink/HydroThreelinkListCtrl.cs
@@ -32,10 +32,6 @@
         /// 姘村姏鏀瑰彉瑙嗗浘浜嬩欢
         /// </summary>
         public event Action<List<HydroVisualViewModel>> HydroChangedViewEvent;
-        /// <summary>
-        /// 鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
 
         /// <summary>
         /// 鏄惁鎷ユ湁姘村姏鍒楄〃
@@ -45,34 +41,53 @@
             get { return _allList != null && _allList.Count > 0; }
         }
 
-        //鎵�鏈夊垪琛�
-        private List<HydroThreelinkViewModel> _allList = null;
-        //鎵�鏈夌粦瀹氬垪琛�
-        private List<HydroThreelinkViewModel> _allBindingList = null;
+        private List<HydroThreelinkViewModel> _allList = null;//鎵�鏈夊垪琛�
+        private List<HydroThreelinkViewModel> _allBindingList = null; //鎵�鏈夌粦瀹氬垪琛�
+        private HydroChangeHelper _changeHelper = null;//鏀瑰彉杈呭姪绫�
+        private HydroPropStatusHelper _propStatusHelper = null;//灞炴�х姸鎬佽緟鍔╃被
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            SetBindingData(hydroInfo, allCalcuResultVisualDict: null);
+            SetBindingData(hydroInfo, allCalcuResultVisualDict: null, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, List<HydroCalcuVisualResult> allCalcuResultList)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                List<HydroCalcuVisualResult> allCalcuResultList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             var allCalcuResultVisualDict = allCalcuResultList?.ToDictionary(x => x.Code);
-            SetBindingData(hydroInfo, allCalcuResultVisualDict);
+            SetBindingData(hydroInfo, allCalcuResultVisualDict, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(HydroModelInfo hydroInfo, Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict)
+        public void SetBindingData
+            (
+                HydroModelInfo hydroInfo,
+                Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allList = new List<HydroThreelinkViewModel>();
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             if (hydroInfo != null && hydroInfo.Threelinks != null && hydroInfo.Threelinks.Count > 0)
             {
                 foreach (var visual in hydroInfo.Threelinks)
@@ -92,9 +107,16 @@
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList)
+        public void SetBindingData
+            (
+                List<HydroVisualViewModel> allVisualViewModelList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allList = new List<HydroThreelinkViewModel>();
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             allVisualViewModelList?.ForEach(x =>
             {
                 if (x.Vmo.Catalog == Yw.Hydro.ParterCatalog.Threelink)
@@ -268,7 +290,7 @@
                 return;
             }
             var dlg = new SetHydroThreelinkDlg();
-            dlg.SetBindingData(_allBindingList.Select(x => x.Vmo).ToList());
+            dlg.SetBindingData(_allBindingList.Select(x => x.Vmo).ToList(), _changeHelper, _propStatusHelper);
             dlg.ReloadDataEvent += (list) =>
             {
                 if (list == null || list.Count < 1)
@@ -281,7 +303,6 @@
                 this.HydroChangedViewEvent?.Invoke(allVisualViewModelList);
                 var allVisualInfoList = allVisualViewModelList.Select(x => x.Vmo).ToList();
                 this.HydroChangedInfoEvent?.Invoke(allVisualInfoList);
-                list.ForEach(x => this.ParterChangedEvent?.Invoke(x, eChangeType.Update));
             };
             dlg.ShowDialog();
         }
@@ -315,7 +336,7 @@
             if (e.Column == this.colSet)
             {
                 var dlg = new SetHydroThreelinkDlg();
-                dlg.SetBindingData(row.Vmo);
+                dlg.SetBindingData(row.Vmo, _changeHelper, _propStatusHelper);
                 dlg.ReloadDataEvent += (list) =>
                 {
                     if (list == null || list.Count < 1)
@@ -326,7 +347,6 @@
                     this.gridView1.RefreshRow(e.RowHandle);
                     this.HydroChangedViewEvent?.Invoke(new List<HydroVisualViewModel>() { row });
                     this.HydroChangedInfoEvent?.Invoke(new List<HydroVisualInfo>() { row.Vmo });
-                    this.ParterChangedEvent?.Invoke(row.Vmo, eChangeType.Update);
                 };
                 dlg.ShowDialog();
             }
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/07-threelink/SetHydroThreelinkDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/07-threelink/SetHydroThreelinkDlg.cs
index 29a08c0..ddbd6a3 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/07-threelink/SetHydroThreelinkDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/07-threelink/SetHydroThreelinkDlg.cs
@@ -15,28 +15,41 @@
         /// </summary>
         public event Action<List<Yw.Model.HydroThreelinkInfo>> ReloadDataEvent;
 
-        //鎵�鏈夋瀯浠跺垪琛�
-        private List<Yw.Model.HydroThreelinkInfo> _allVisualList = null;
+        private List<Yw.Model.HydroThreelinkInfo> _allVisualList = null;//鎵�鏈夋瀯浠跺垪琛�
+        private HydroChangeHelper _changeHelper = null;//鏀瑰彉杈呭姪绫�
+        private HydroPropStatusHelper _propStatusHelper = null;//灞炴�х姸鎬佽緟鍔╃被
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroThreelinkInfo visual)
+        public void SetBindingData
+            (
+                Yw.Model.HydroThreelinkInfo visual,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             var allVisualList = visual == null ? null : new List<Yw.Model.HydroThreelinkInfo>() { visual };
-            SetBindingData(allVisualList);
+            SetBindingData(allVisualList, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<Yw.Model.HydroThreelinkInfo> allVisualList)
+        public void SetBindingData
+            (
+                List<Yw.Model.HydroThreelinkInfo> allVisualList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allVisualList = allVisualList;
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             if (_allVisualList != null && _allVisualList.Count == 1)
             {
                 var visual = _allVisualList.First();
-                this.txtElev.EditValue = visual.Elev;
+                this.txtElev.EditValue = Math.Round(visual.Elev, 4);
                 this.txtMinorLoss.EditValue = visual.MinorLoss;
                 this.txtMaterial.EditValue = visual.Material;
                 this.txtCaliber.EditValue = visual.Caliber;
@@ -63,26 +76,56 @@
             {
                 if (elev.HasValue)
                 {
+                    if (x.Elev != elev.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.Elev), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.Elev = elev.Value;
                 }
                 if (minorLoss.HasValue)
                 {
+                    if (x.MinorLoss != minorLoss.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.MinorLoss), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.MinorLoss = minorLoss.Value;
                 }
                 if (!string.IsNullOrEmpty(material))
                 {
+                    if (x.Material != material)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.Material), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.Material = material;
                 }
                 if (caliber.HasValue)
                 {
+                    if (x.Caliber != caliber.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.Caliber), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.Caliber = caliber.Value;
                 }
                 if (runningThroughLoss.HasValue)
                 {
+                    if (x.RunningThroughLoss != runningThroughLoss.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.RunningThroughLoss), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.RunningThroughLoss = runningThroughLoss.Value;
                 }
                 if (branchThroughLoss.HasValue)
                 {
+                    if (x.BranchThroughLoss != branchThroughLoss.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.BranchThroughLoss), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.BranchThroughLoss = branchThroughLoss.Value;
                 }
             });
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/07-threelink/SetHydroThreelinkListDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/07-threelink/SetHydroThreelinkListDlg.cs
index bb9dd9d..b6da8bc 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/07-threelink/SetHydroThreelinkListDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/07-threelink/SetHydroThreelinkListDlg.cs
@@ -12,7 +12,6 @@
             this.hydroThreelinkListCtrl1.HydroClickViewEvent += HydroThreelinkListCtrl1_HydroClickViewEvent;
             this.hydroThreelinkListCtrl1.HydroChangedInfoEvent += HydroThreelinkListCtrl1_HydroChangedInfoEvent;
             this.hydroThreelinkListCtrl1.HydroChangedViewEvent += HydroThreelinkListCtrl1_HydroChangedViewEvent;
-            this.hydroThreelinkListCtrl1.ParterChangedEvent += HydroThreelinkListCtrl1_ParterChangedEvent;
         }
 
 
@@ -32,26 +31,32 @@
         /// 姘村姏鏀瑰彉瑙嗗浘浜嬩欢
         /// </summary>
         public event Action<List<HydroVisualViewModel>> HydroChangedViewEvent;
-        /// <summary>
-        /// 鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.hydroThreelinkListCtrl1.SetBindingData(hydroInfo);
+            this.hydroThreelinkListCtrl1.SetBindingData(hydroInfo, changeHelper, propStatusHelper);
             this.hydroThreelinkListCtrl1.SetBulkView();
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList)
+        public void SetBindingData
+            (
+                List<HydroVisualViewModel> allVisualViewModelList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.hydroThreelinkListCtrl1.SetBindingData(allVisualViewModelList);
+            this.hydroThreelinkListCtrl1.SetBindingData(allVisualViewModelList, changeHelper, propStatusHelper);
             this.hydroThreelinkListCtrl1.SetBulkView();
         }
 
@@ -79,11 +84,6 @@
             this.HydroChangedViewEvent?.Invoke(obj);
         }
 
-        //姘村姏鏀瑰彉浜嬩欢
-        private void HydroThreelinkListCtrl1_ParterChangedEvent(HydroParterInfo arg1, eChangeType arg2)
-        {
-            this.ParterChangedEvent?.Invoke(arg1, arg2);
-        }
 
     }
 }
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/08-fourlink/HydroFourlinkListCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/08-fourlink/HydroFourlinkListCtrl.cs
index a1368d6..637f275 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/08-fourlink/HydroFourlinkListCtrl.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/08-fourlink/HydroFourlinkListCtrl.cs
@@ -31,10 +31,6 @@
         /// 姘村姏鏀瑰彉瑙嗗浘浜嬩欢
         /// </summary>
         public event Action<List<HydroVisualViewModel>> HydroChangedViewEvent;
-        /// <summary>
-        /// 鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
 
         /// <summary>
         /// 鏄惁鎷ユ湁姘村姏鍒楄〃
@@ -44,34 +40,54 @@
             get { return _allList != null && _allList.Count > 0; }
         }
 
-        //鎵�鏈夊垪琛�
-        private List<HydroFourlinkViewModel> _allList = null;
-        //鎵�鏈夌粦瀹氬垪琛�
-        private List<HydroFourlinkViewModel> _allBindingList = null;
+
+        private List<HydroFourlinkViewModel> _allList = null;//鎵�鏈夊垪琛�
+        private List<HydroFourlinkViewModel> _allBindingList = null;//鎵�鏈夌粦瀹氬垪琛�
+        private HydroChangeHelper _changeHelper = null;//鏀瑰彉杈呭姪绫�
+        private HydroPropStatusHelper _propStatusHelper = null;//灞炴�х姸鎬佽緟鍔╃被
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            SetBindingData(hydroInfo, allCalcuResultVisualDict: null);
+            SetBindingData(hydroInfo, allCalcuResultVisualDict: null, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, List<HydroCalcuVisualResult> allCalcuResultList)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                List<HydroCalcuVisualResult> allCalcuResultList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             var allCalcuResultVisualDict = allCalcuResultList?.ToDictionary(x => x.Code);
-            SetBindingData(hydroInfo, allCalcuResultVisualDict);
+            SetBindingData(hydroInfo, allCalcuResultVisualDict, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(HydroModelInfo hydroInfo, Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict)
+        public void SetBindingData
+            (
+                HydroModelInfo hydroInfo,
+                Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allList = new List<HydroFourlinkViewModel>();
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             if (hydroInfo != null && hydroInfo.Fourlinks != null && hydroInfo.Fourlinks.Count > 0)
             {
                 foreach (var visual in hydroInfo.Fourlinks)
@@ -91,9 +107,16 @@
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList)
+        public void SetBindingData
+            (
+                List<HydroVisualViewModel> allVisualViewModelList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allList = new List<HydroFourlinkViewModel>();
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             allVisualViewModelList?.ForEach(x =>
             {
                 if (x.Vmo.Catalog == Yw.Hydro.ParterCatalog.Fourlink)
@@ -248,7 +271,7 @@
                 return;
             }
             var dlg = new SetHydroFourlinkDlg();
-            dlg.SetBindingData(_allBindingList.Select(x => x.Vmo).ToList());
+            dlg.SetBindingData(_allBindingList.Select(x => x.Vmo).ToList(), _changeHelper, _propStatusHelper);
             dlg.ReloadDataEvent += (list) =>
             {
                 if (list == null || list.Count < 1)
@@ -261,13 +284,12 @@
                 this.HydroChangedViewEvent?.Invoke(allVisualViewModelList);
                 var allVisualInfoList = allVisualViewModelList.Select(x => x.Vmo).ToList();
                 this.HydroChangedInfoEvent?.Invoke(allVisualInfoList);
-                list.ForEach(x => this.ParterChangedEvent?.Invoke(x, eChangeType.Update));
             };
             dlg.ShowDialog();
         }
 
 
-
+        //琛屽崟鍏冪偣鍑讳簨浠�
         private void gridView1_RowCellClick(object sender, DevExpress.XtraGrid.Views.Grid.RowCellClickEventArgs e)
         {
             var row = this.gridView1.GetRow(e.RowHandle) as HydroFourlinkViewModel;
@@ -279,7 +301,7 @@
             if (e.Column == this.colSet)
             {
                 var dlg = new SetHydroFourlinkDlg();
-                dlg.SetBindingData(row.Vmo);
+                dlg.SetBindingData(row.Vmo, _changeHelper, _propStatusHelper);
                 dlg.ReloadDataEvent += (list) =>
                 {
                     if (list == null || list.Count < 1)
@@ -290,7 +312,6 @@
                     this.gridView1.RefreshRow(e.RowHandle);
                     this.HydroChangedViewEvent?.Invoke(new List<HydroVisualViewModel>() { row });
                     this.HydroChangedInfoEvent?.Invoke(new List<HydroVisualInfo>() { row.Vmo });
-                    this.ParterChangedEvent?.Invoke(row.Vmo, eChangeType.Update);
                 };
                 dlg.ShowDialog();
             }
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/08-fourlink/SetHydroFourlinkDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/08-fourlink/SetHydroFourlinkDlg.cs
index 1972925..1772578 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/08-fourlink/SetHydroFourlinkDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/08-fourlink/SetHydroFourlinkDlg.cs
@@ -15,24 +15,37 @@
         /// </summary>
         public event Action<List<Yw.Model.HydroFourlinkInfo>> ReloadDataEvent;
 
-        //鎵�鏈夋瀯浠跺垪琛�
-        private List<Yw.Model.HydroFourlinkInfo> _allVisualList = null;
+        private List<Yw.Model.HydroFourlinkInfo> _allVisualList = null;//鎵�鏈夋瀯浠跺垪琛�
+        private HydroChangeHelper _changeHelper = null;//鏀瑰彉杈呭姪绫�
+        private HydroPropStatusHelper _propStatusHelper = null;//灞炴�х姸鎬佽緟鍔╃被
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroFourlinkInfo visual)
+        public void SetBindingData
+            (
+                Yw.Model.HydroFourlinkInfo visual,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             var allVisualList = visual == null ? null : new List<Yw.Model.HydroFourlinkInfo>() { visual };
-            SetBindingData(allVisualList);
+            SetBindingData(allVisualList, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<Yw.Model.HydroFourlinkInfo> allVisualList)
+        public void SetBindingData
+            (
+                List<Yw.Model.HydroFourlinkInfo> allVisualList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allVisualList = allVisualList;
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             if (_allVisualList != null && _allVisualList.Count == 1)
             {
                 var visual = _allVisualList.First();
@@ -59,18 +72,38 @@
             {
                 if (elev.HasValue)
                 {
+                    if (x.Elev != elev.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.Elev), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.Elev = elev.Value;
                 }
                 if (minorLoss.HasValue)
                 {
+                    if (x.MinorLoss != minorLoss.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.MinorLoss), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.MinorLoss = minorLoss.Value;
                 }
                 if (!string.IsNullOrEmpty(material))
                 {
+                    if (x.Material != material)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.Material), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.Material = material;
                 }
                 if (caliber.HasValue)
                 {
+                    if (x.Caliber != caliber.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.Caliber), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.Caliber = caliber.Value;
                 }
             });
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/08-fourlink/SetHydroFourlinkListDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/08-fourlink/SetHydroFourlinkListDlg.cs
index 37fd538..252bdda 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/08-fourlink/SetHydroFourlinkListDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/08-fourlink/SetHydroFourlinkListDlg.cs
@@ -12,7 +12,6 @@
             this.hydroFourlinkListCtrl1.HydroClickViewEvent += HydroFourlinkListCtrl1_HydroClickViewEvent;
             this.hydroFourlinkListCtrl1.HydroChangedInfoEvent += HydroFourlinkListCtrl1_HydroChangedInfoEvent;
             this.hydroFourlinkListCtrl1.HydroChangedViewEvent += HydroFourlinkListCtrl1_HydroChangedViewEvent;
-            this.hydroFourlinkListCtrl1.ParterChangedEvent += HydroFourlinkListCtrl1_ParterChangedEvent;
         }
 
 
@@ -32,26 +31,32 @@
         /// 姘村姏鏀瑰彉瑙嗗浘浜嬩欢
         /// </summary>
         public event Action<List<HydroVisualViewModel>> HydroChangedViewEvent;
-        /// <summary>
-        /// 鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.hydroFourlinkListCtrl1.SetBindingData(hydroInfo);
+            this.hydroFourlinkListCtrl1.SetBindingData(hydroInfo, changeHelper, propStatusHelper);
             this.hydroFourlinkListCtrl1.SetBulkView();
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList)
+        public void SetBindingData
+            (
+                List<HydroVisualViewModel> allVisualViewModelList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.hydroFourlinkListCtrl1.SetBindingData(allVisualViewModelList);
+            this.hydroFourlinkListCtrl1.SetBindingData(allVisualViewModelList, changeHelper, propStatusHelper);
             this.hydroFourlinkListCtrl1.SetBulkView();
         }
 
@@ -79,11 +84,6 @@
             this.HydroChangedViewEvent?.Invoke(obj);
         }
 
-        //  姘村姏鏀瑰彉浜嬩欢
-        private void HydroFourlinkListCtrl1_ParterChangedEvent(HydroParterInfo arg1, eChangeType arg2)
-        {
-            this.ParterChangedEvent?.Invoke(arg1, arg2);
-        }
 
     }
 }
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/09-hydrant/HydroHydrantListCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/09-hydrant/HydroHydrantListCtrl.cs
index 688f53e..1d2fa56 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/09-hydrant/HydroHydrantListCtrl.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/09-hydrant/HydroHydrantListCtrl.cs
@@ -31,10 +31,6 @@
         /// 姘村姏鏀瑰彉瑙嗗浘浜嬩欢
         /// </summary>
         public event Action<List<HydroVisualViewModel>> HydroChangedViewEvent;
-        /// <summary>
-        /// 鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
 
         /// <summary>
         /// 鏄惁鎷ユ湁姘村姏鍒楄〃
@@ -44,34 +40,54 @@
             get { return _allList != null && _allList.Count > 0; }
         }
 
-        //鎵�鏈夊垪琛�
-        private List<HydroHydrantViewModel> _allList = null;
-        //鎵�鏈夌粦瀹氬垪琛�
-        private List<HydroHydrantViewModel> _allBindingList = null;
+
+        private List<HydroHydrantViewModel> _allList = null;//鎵�鏈夊垪琛�
+        private List<HydroHydrantViewModel> _allBindingList = null;//鎵�鏈夌粦瀹氬垪琛�
+        private HydroChangeHelper _changeHelper = null;//鏀瑰彉杈呭姪绫�
+        private HydroPropStatusHelper _propStatusHelper = null;//灞炴�х姸鎬佽緟鍔╃被
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            SetBindingData(hydroInfo, allCalcuResultVisualDict: null);
+            SetBindingData(hydroInfo, allCalcuResultVisualDict: null, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, List<HydroCalcuVisualResult> allCalcuResultList)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                List<HydroCalcuVisualResult> allCalcuResultList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             var allCalcuResultVisualDict = allCalcuResultList?.ToDictionary(x => x.Code);
-            SetBindingData(hydroInfo, allCalcuResultVisualDict);
+            SetBindingData(hydroInfo, allCalcuResultVisualDict, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(HydroModelInfo hydroInfo, Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict)
+        public void SetBindingData
+            (
+                HydroModelInfo hydroInfo,
+                Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allList = new List<HydroHydrantViewModel>();
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             if (hydroInfo != null && hydroInfo.Hydrants != null && hydroInfo.Hydrants.Count > 0)
             {
                 foreach (var visual in hydroInfo.Hydrants)
@@ -91,9 +107,16 @@
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList)
+        public void SetBindingData
+            (
+                List<HydroVisualViewModel> allVisualViewModelList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allList = new List<HydroHydrantViewModel>();
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             allVisualViewModelList?.ForEach(x =>
             {
                 if (x.Vmo.Catalog == Yw.Hydro.ParterCatalog.Hydrant)
@@ -248,7 +271,7 @@
                 return;
             }
             var dlg = new SetHydroHydrantDlg();
-            dlg.SetBindingData(_allBindingList.Select(x => x.Vmo).ToList());
+            dlg.SetBindingData(_allBindingList.Select(x => x.Vmo).ToList(), _changeHelper, _propStatusHelper);
             dlg.ReloadDataEvent += (list) =>
             {
                 if (list == null || list.Count < 1)
@@ -261,7 +284,6 @@
                 this.HydroChangedViewEvent?.Invoke(allVisualViewModelList);
                 var allVisualInfoList = allVisualViewModelList.Select(x => x.Vmo).ToList();
                 this.HydroChangedInfoEvent?.Invoke(allVisualInfoList);
-                list.ForEach(x => this.ParterChangedEvent?.Invoke(x, eChangeType.Update));
             };
             dlg.ShowDialog();
         }
@@ -277,7 +299,7 @@
             if (e.Column == this.colSet)
             {
                 var dlg = new SetHydroHydrantDlg();
-                dlg.SetBindingData(row.Vmo);
+                dlg.SetBindingData(row.Vmo, _changeHelper, _propStatusHelper);
                 dlg.ReloadDataEvent += (list) =>
                 {
                     if (list == null || list.Count < 1)
@@ -288,7 +310,6 @@
                     this.gridView1.RefreshRow(e.RowHandle);
                     this.HydroChangedViewEvent?.Invoke(new List<HydroVisualViewModel>() { row });
                     this.HydroChangedInfoEvent?.Invoke(new List<HydroVisualInfo>() { row.Vmo });
-                    this.ParterChangedEvent?.Invoke(row.Vmo, eChangeType.Update);
                 };
                 dlg.ShowDialog();
             }
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/09-hydrant/SetHydroHydrantDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/09-hydrant/SetHydroHydrantDlg.cs
index 0587acc..902558d 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/09-hydrant/SetHydroHydrantDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/09-hydrant/SetHydroHydrantDlg.cs
@@ -15,28 +15,42 @@
         /// </summary>
         public event Action<List<Yw.Model.HydroHydrantInfo>> ReloadDataEvent;
 
-        //鎵�鏈夋瀯浠跺垪琛�
-        private List<Yw.Model.HydroHydrantInfo> _allVisualList = null;
+
+        private List<Yw.Model.HydroHydrantInfo> _allVisualList = null;//鎵�鏈夋瀯浠跺垪琛�
+        private HydroChangeHelper _changeHelper = null;//鏀瑰彉杈呭姪绫�
+        private HydroPropStatusHelper _propStatusHelper = null;//灞炴�х姸鎬佽緟鍔╃被
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroHydrantInfo visual)
+        public void SetBindingData
+            (
+                Yw.Model.HydroHydrantInfo visual,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             var allVisualList = visual == null ? null : new List<Yw.Model.HydroHydrantInfo>() { visual };
-            SetBindingData(allVisualList);
+            SetBindingData(allVisualList, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<Yw.Model.HydroHydrantInfo> allVisualList)
+        public void SetBindingData
+            (
+                List<Yw.Model.HydroHydrantInfo> allVisualList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allVisualList = allVisualList;
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             if (_allVisualList != null && _allVisualList.Count == 1)
             {
                 var visual = _allVisualList.First();
-                this.txtElev.EditValue = visual.Elev;
+                this.txtElev.EditValue = Math.Round(visual.Elev, 4);
                 this.txtMinorLoss.EditValue = visual.MinorLoss;
                 this.txtDemand.EditValue = visual.Demand;
                 this.txtCoefficient.EditValue = visual.Coefficient;
@@ -58,18 +72,38 @@
             {
                 if (elev.HasValue)
                 {
+                    if (x.Elev != elev.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.Elev), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.Elev = elev.Value;
                 }
                 if (minorLoss.HasValue)
                 {
+                    if (x.MinorLoss != minorLoss.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.MinorLoss), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.MinorLoss = minorLoss.Value;
                 }
                 if (demand.HasValue)
                 {
+                    if (x.Demand != demand.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.Demand), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.Demand = demand.Value;
                 }
                 if (coefficient.HasValue)
                 {
+                    if (x.Coefficient != coefficient.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.Coefficient), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.Coefficient = coefficient.Value;
                 }
             });
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/09-hydrant/SetHydroHydrantListDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/09-hydrant/SetHydroHydrantListDlg.cs
index 6b2faa7..041fb90 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/09-hydrant/SetHydroHydrantListDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/09-hydrant/SetHydroHydrantListDlg.cs
@@ -1,4 +1,5 @@
-锘縰sing Yw.Model;
+锘縰sing DevExpress.XtraGauges.Core.Model;
+using Yw.Model;
 
 namespace Yw.WinFrmUI
 {
@@ -12,7 +13,6 @@
             this.hydroHydrantListCtrl1.HydroClickViewEvent += HydroHydrantListCtrl1_HydroClickViewEvent;
             this.hydroHydrantListCtrl1.HydroChangedInfoEvent += HydroHydrantListCtrl1_HydroChangedInfoEvent;
             this.hydroHydrantListCtrl1.HydroChangedViewEvent += HydroHydrantListCtrl1_HydroChangedViewEvent;
-            this.hydroHydrantListCtrl1.ParterChangedEvent += HydroHydrantListCtrl1_ParterChangedEvent;
         }
 
 
@@ -40,18 +40,28 @@
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.hydroHydrantListCtrl1.SetBindingData(hydroInfo);
+            this.hydroHydrantListCtrl1.SetBindingData(hydroInfo, changeHelper, propStatusHelper);
             this.hydroHydrantListCtrl1.SetBulkView();
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList)
+        public void SetBindingData
+            (
+                List<HydroVisualViewModel> allVisualViewModelList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.hydroHydrantListCtrl1.SetBindingData(allVisualViewModelList);
+            this.hydroHydrantListCtrl1.SetBindingData(allVisualViewModelList, changeHelper, propStatusHelper);
             this.hydroHydrantListCtrl1.SetBulkView();
         }
 
@@ -79,11 +89,7 @@
             this.HydroChangedViewEvent?.Invoke(obj);
         }
 
-        //  姘村姏鏀瑰彉浜嬩欢
-        private void HydroHydrantListCtrl1_ParterChangedEvent(HydroParterInfo arg1, eChangeType arg2)
-        {
-            this.ParterChangedEvent?.Invoke(arg1, arg2);
-        }
+
 
     }
 }
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/10-nozzle/HydroNozzleListCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/10-nozzle/HydroNozzleListCtrl.cs
index a3d823d..8331e5a 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/10-nozzle/HydroNozzleListCtrl.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/10-nozzle/HydroNozzleListCtrl.cs
@@ -31,10 +31,6 @@
         /// 姘村姏鏀瑰彉瑙嗗浘浜嬩欢
         /// </summary>
         public event Action<List<HydroVisualViewModel>> HydroChangedViewEvent;
-        /// <summary>
-        /// 鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
 
         /// <summary>
         /// 鏄惁鎷ユ湁姘村姏鍒楄〃
@@ -44,34 +40,54 @@
             get { return _allList != null && _allList.Count > 0; }
         }
 
-        //鎵�鏈夊垪琛�
-        private List<HydroNozzleViewModel> _allList = null;
-        //鎵�鏈夌粦瀹氬垪琛�
-        private List<HydroNozzleViewModel> _allBindingList = null;
+
+        private List<HydroNozzleViewModel> _allList = null; //鎵�鏈夊垪琛�
+        private List<HydroNozzleViewModel> _allBindingList = null;//鎵�鏈夌粦瀹氬垪琛�
+        private HydroChangeHelper _changeHelper = null;//鏀瑰彉杈呭姪绫�
+        private HydroPropStatusHelper _propStatusHelper = null;//灞炴�х姸鎬佽緟鍔╃被
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            SetBindingData(hydroInfo, allCalcuResultVisualDict: null);
+            SetBindingData(hydroInfo, allCalcuResultVisualDict: null, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, List<HydroCalcuVisualResult> allCalcuResultList)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                List<HydroCalcuVisualResult> allCalcuResultList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             var allCalcuResultVisualDict = allCalcuResultList?.ToDictionary(x => x.Code);
-            SetBindingData(hydroInfo, allCalcuResultVisualDict);
+            SetBindingData(hydroInfo, allCalcuResultVisualDict, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(HydroModelInfo hydroInfo, Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict)
+        public void SetBindingData
+            (
+                HydroModelInfo hydroInfo,
+                Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allList = new List<HydroNozzleViewModel>();
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             if (hydroInfo != null && hydroInfo.Nozzles != null && hydroInfo.Nozzles.Count > 0)
             {
                 foreach (var visual in hydroInfo.Nozzles)
@@ -91,9 +107,16 @@
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList)
+        public void SetBindingData
+            (
+                List<HydroVisualViewModel> allVisualViewModelList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allList = new List<HydroNozzleViewModel>();
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             allVisualViewModelList?.ForEach(x =>
             {
                 if (x.Vmo.Catalog == Yw.Hydro.ParterCatalog.Nozzle)
@@ -248,7 +271,7 @@
                 return;
             }
             var dlg = new SetHydroNozzleDlg();
-            dlg.SetBindingData(_allBindingList.Select(x => x.Vmo).ToList());
+            dlg.SetBindingData(_allBindingList.Select(x => x.Vmo).ToList(), _changeHelper, _propStatusHelper);
             dlg.ReloadDataEvent += (list) =>
             {
                 if (list == null || list.Count < 1)
@@ -261,7 +284,6 @@
                 this.HydroChangedViewEvent?.Invoke(allVisualViewModelList);
                 var allVisualInfoList = allVisualViewModelList.Select(x => x.Vmo).ToList();
                 this.HydroChangedInfoEvent?.Invoke(allVisualInfoList);
-                list.ForEach(x => this.ParterChangedEvent?.Invoke(x, eChangeType.Update));
             };
             dlg.ShowDialog();
         }
@@ -277,7 +299,7 @@
             if (e.Column == this.colSet)
             {
                 var dlg = new SetHydroNozzleDlg();
-                dlg.SetBindingData(row.Vmo);
+                dlg.SetBindingData(row.Vmo, _changeHelper, _propStatusHelper);
                 dlg.ReloadDataEvent += (list) =>
                 {
                     if (list == null || list.Count < 1)
@@ -288,7 +310,6 @@
                     this.gridView1.RefreshRow(e.RowHandle);
                     this.HydroChangedViewEvent?.Invoke(new List<HydroVisualViewModel>() { row });
                     this.HydroChangedInfoEvent?.Invoke(new List<HydroVisualInfo>() { row.Vmo });
-                    this.ParterChangedEvent?.Invoke(row.Vmo, eChangeType.Update);
                 };
                 dlg.ShowDialog();
             }
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/10-nozzle/SetHydroNozzleDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/10-nozzle/SetHydroNozzleDlg.cs
index d1cdba2..0dd3019 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/10-nozzle/SetHydroNozzleDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/10-nozzle/SetHydroNozzleDlg.cs
@@ -15,31 +15,44 @@
         /// </summary>
         public event Action<List<Yw.Model.HydroNozzleInfo>> ReloadDataEvent;
 
-        //鎵�鏈夋瀯浠跺垪琛�
-        private List<Yw.Model.HydroNozzleInfo> _allVisualList = null;
+        private List<Yw.Model.HydroNozzleInfo> _allVisualList = null;//鎵�鏈夋瀯浠跺垪琛�
+        private HydroChangeHelper _changeHelper = null;//鏀瑰彉杈呭姪绫�
+        private HydroPropStatusHelper _propStatusHelper = null;//灞炴�х姸鎬佽緟鍔╃被
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroNozzleInfo parter)
+        public void SetBindingData
+            (
+                Yw.Model.HydroNozzleInfo visual,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            var allParterList = parter == null ? null : new List<Yw.Model.HydroNozzleInfo>() { parter };
-            SetBindingData(allParterList);
+            var allVisualList = visual == null ? null : new List<Yw.Model.HydroNozzleInfo>() { visual };
+            SetBindingData(allVisualList, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<Yw.Model.HydroNozzleInfo> allNozzleList)
+        public void SetBindingData
+            (
+                List<Yw.Model.HydroNozzleInfo> allNozzleList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allVisualList = allNozzleList;
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             if (_allVisualList != null && _allVisualList.Count == 1)
             {
-                var parter = _allVisualList.First();
-                this.txtElev.EditValue = Math.Round(parter.Elev, 4);
-                this.txtMinorLoss.EditValue = parter.MinorLoss;
-                this.txtCoefficient.EditValue = parter.Coefficient;
-                this.txtDemand.EditValue = parter.Demand;
+                var visual = _allVisualList.First();
+                this.txtElev.EditValue = Math.Round(visual.Elev, 4);
+                this.txtMinorLoss.EditValue = visual.MinorLoss;
+                this.txtCoefficient.EditValue = visual.Coefficient;
+                this.txtDemand.EditValue = visual.Demand;
             }
         }
 
@@ -58,18 +71,38 @@
             {
                 if (elev.HasValue)
                 {
+                    if (x.Elev != elev.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.Elev), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.Elev = elev.Value;
                 }
                 if (minorLoss.HasValue)
                 {
+                    if (x.MinorLoss != minorLoss.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.MinorLoss), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.MinorLoss = minorLoss.Value;
                 }
                 if (demand.HasValue)
                 {
+                    if (x.Demand != demand.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.Demand), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.Demand = demand.Value;
                 }
                 if (coefficient.HasValue)
                 {
+                    if (x.Coefficient != coefficient.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.Coefficient), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.Coefficient = coefficient.Value;
                 }
             });
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/10-nozzle/SetHydroNozzleListDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/10-nozzle/SetHydroNozzleListDlg.cs
index 70327ab..0d62958 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/10-nozzle/SetHydroNozzleListDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/10-nozzle/SetHydroNozzleListDlg.cs
@@ -12,7 +12,6 @@
             this.hydroNozzleListCtrl1.HydroClickViewEvent += HydroNozzleListCtrl1_HydroClickViewEvent;
             this.hydroNozzleListCtrl1.HydroChangedInfoEvent += HydroNozzleListCtrl1_HydroChangedInfoEvent;
             this.hydroNozzleListCtrl1.HydroChangedViewEvent += HydroNozzleListCtrl1_HydroChangedViewEvent;
-            this.hydroNozzleListCtrl1.ParterChangedEvent += HydroNozzleListCtrl1_ParterChangedEvent;
         }
 
 
@@ -32,26 +31,33 @@
         /// 姘村姏鏀瑰彉瑙嗗浘浜嬩欢
         /// </summary>
         public event Action<List<HydroVisualViewModel>> HydroChangedViewEvent;
-        /// <summary>
-        /// 鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
+
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.hydroNozzleListCtrl1.SetBindingData(hydroInfo);
+            this.hydroNozzleListCtrl1.SetBindingData(hydroInfo, changeHelper, propStatusHelper);
             this.hydroNozzleListCtrl1.SetBulkView();
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList)
+        public void SetBindingData
+            (
+                List<HydroVisualViewModel> allVisualViewModelList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.hydroNozzleListCtrl1.SetBindingData(allVisualViewModelList);
+            this.hydroNozzleListCtrl1.SetBindingData(allVisualViewModelList, changeHelper, propStatusHelper);
             this.hydroNozzleListCtrl1.SetBulkView();
         }
 
@@ -79,11 +85,6 @@
             this.HydroChangedViewEvent?.Invoke(obj);
         }
 
-        //姘村姏鏀瑰彉浜嬩欢
-        private void HydroNozzleListCtrl1_ParterChangedEvent(HydroParterInfo arg1, eChangeType arg2)
-        {
-            this.ParterChangedEvent?.Invoke(arg1, arg2);
-        }
 
     }
 }
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/11-cooling/HydroCoolingListCtrl.Designer.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/11-cooling/HydroCoolingListCtrl.Designer.cs
index 47c0eff..a4e4d9c 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/11-cooling/HydroCoolingListCtrl.Designer.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/11-cooling/HydroCoolingListCtrl.Designer.cs
@@ -29,12 +29,12 @@
         private void InitializeComponent()
         {
             components = new Container();
-            DevExpress.XtraEditors.Controls.EditorButtonImageOptions editorButtonImageOptions2 = new DevExpress.XtraEditors.Controls.EditorButtonImageOptions();
-            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject5 = new DevExpress.Utils.SerializableAppearanceObject();
-            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject6 = new DevExpress.Utils.SerializableAppearanceObject();
-            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject7 = new DevExpress.Utils.SerializableAppearanceObject();
-            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject8 = new DevExpress.Utils.SerializableAppearanceObject();
             ComponentResourceManager resources = new ComponentResourceManager(typeof(HydroCoolingListCtrl));
+            DevExpress.XtraEditors.Controls.EditorButtonImageOptions editorButtonImageOptions1 = new DevExpress.XtraEditors.Controls.EditorButtonImageOptions();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject1 = new DevExpress.Utils.SerializableAppearanceObject();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject2 = new DevExpress.Utils.SerializableAppearanceObject();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject3 = new DevExpress.Utils.SerializableAppearanceObject();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject4 = new DevExpress.Utils.SerializableAppearanceObject();
             gridControl1 = new DevExpress.XtraGrid.GridControl();
             hydroCoolingViewModelBindingSource = new BindingSource(components);
             gridView1 = new DevExpress.XtraGrid.Views.Grid.GridView();
@@ -42,12 +42,16 @@
             colCode = new DevExpress.XtraGrid.Columns.GridColumn();
             colName = new DevExpress.XtraGrid.Columns.GridColumn();
             colModelType = new DevExpress.XtraGrid.Columns.GridColumn();
+            colMaterial = new DevExpress.XtraGrid.Columns.GridColumn();
+            colCaliber = new DevExpress.XtraGrid.Columns.GridColumn();
             colCoefficient = new DevExpress.XtraGrid.Columns.GridColumn();
+            colLowerLimit = new DevExpress.XtraGrid.Columns.GridColumn();
             colElev = new DevExpress.XtraGrid.Columns.GridColumn();
-            colMinorLoss = new DevExpress.XtraGrid.Columns.GridColumn();
             colHasDb = new DevExpress.XtraGrid.Columns.GridColumn();
             colFlags = new DevExpress.XtraGrid.Columns.GridColumn();
             colDescription = new DevExpress.XtraGrid.Columns.GridColumn();
+            colCalcuQ = new DevExpress.XtraGrid.Columns.GridColumn();
+            colCalcuPr = new DevExpress.XtraGrid.Columns.GridColumn();
             colSet = new DevExpress.XtraGrid.Columns.GridColumn();
             repositoryItemButtonEdit1 = new DevExpress.XtraEditors.Repository.RepositoryItemButtonEdit();
             layoutControl1 = new DevExpress.XtraLayout.LayoutControl();
@@ -62,11 +66,6 @@
             layoutControlItem3 = new DevExpress.XtraLayout.LayoutControlItem();
             layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
             layoutControlItem8 = new DevExpress.XtraLayout.LayoutControlItem();
-            colMaterial = new DevExpress.XtraGrid.Columns.GridColumn();
-            colLowerLimit = new DevExpress.XtraGrid.Columns.GridColumn();
-            colCalcuQ = new DevExpress.XtraGrid.Columns.GridColumn();
-            colCalcuPr = new DevExpress.XtraGrid.Columns.GridColumn();
-            colCaliber = new DevExpress.XtraGrid.Columns.GridColumn();
             ((ISupportInitialize)gridControl1).BeginInit();
             ((ISupportInitialize)hydroCoolingViewModelBindingSource).BeginInit();
             ((ISupportInitialize)gridView1).BeginInit();
@@ -102,7 +101,7 @@
             // 
             // gridView1
             // 
-            gridView1.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] { colDbLocked, colCode, colName, colModelType, colMaterial, colCaliber, colCoefficient, colLowerLimit, colElev, colMinorLoss, colHasDb, colFlags, colDescription, colCalcuQ, colCalcuPr, colSet });
+            gridView1.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] { colDbLocked, colCode, colName, colModelType, colMaterial, colCaliber, colCoefficient, colLowerLimit, colElev, colHasDb, colFlags, colDescription, colCalcuQ, colCalcuPr, colSet });
             gridView1.GridControl = gridControl1;
             gridView1.Name = "gridView1";
             gridView1.RowCellClick += gridView1_RowCellClick;
@@ -148,6 +147,26 @@
             colModelType.VisibleIndex = 3;
             colModelType.Width = 100;
             // 
+            // colMaterial
+            // 
+            colMaterial.FieldName = "Material";
+            colMaterial.MaxWidth = 100;
+            colMaterial.MinWidth = 100;
+            colMaterial.Name = "colMaterial";
+            colMaterial.Visible = true;
+            colMaterial.VisibleIndex = 4;
+            colMaterial.Width = 100;
+            // 
+            // colCaliber
+            // 
+            colCaliber.FieldName = "Caliber";
+            colCaliber.MaxWidth = 100;
+            colCaliber.MinWidth = 100;
+            colCaliber.Name = "colCaliber";
+            colCaliber.Visible = true;
+            colCaliber.VisibleIndex = 5;
+            colCaliber.Width = 100;
+            // 
             // colCoefficient
             // 
             colCoefficient.FieldName = "Coefficient";
@@ -157,6 +176,16 @@
             colCoefficient.Visible = true;
             colCoefficient.VisibleIndex = 6;
             colCoefficient.Width = 100;
+            // 
+            // colLowerLimit
+            // 
+            colLowerLimit.FieldName = "LowerLimit";
+            colLowerLimit.MaxWidth = 100;
+            colLowerLimit.MinWidth = 100;
+            colLowerLimit.Name = "colLowerLimit";
+            colLowerLimit.Visible = true;
+            colLowerLimit.VisibleIndex = 7;
+            colLowerLimit.Width = 100;
             // 
             // colElev
             // 
@@ -168,16 +197,6 @@
             colElev.VisibleIndex = 8;
             colElev.Width = 100;
             // 
-            // colMinorLoss
-            // 
-            colMinorLoss.FieldName = "MinorLoss";
-            colMinorLoss.MaxWidth = 100;
-            colMinorLoss.MinWidth = 100;
-            colMinorLoss.Name = "colMinorLoss";
-            colMinorLoss.Visible = true;
-            colMinorLoss.VisibleIndex = 9;
-            colMinorLoss.Width = 100;
-            // 
             // colHasDb
             // 
             colHasDb.FieldName = "HasDb";
@@ -185,7 +204,7 @@
             colHasDb.MinWidth = 40;
             colHasDb.Name = "colHasDb";
             colHasDb.Visible = true;
-            colHasDb.VisibleIndex = 10;
+            colHasDb.VisibleIndex = 9;
             colHasDb.Width = 40;
             // 
             // colFlags
@@ -195,7 +214,7 @@
             colFlags.MinWidth = 100;
             colFlags.Name = "colFlags";
             colFlags.Visible = true;
-            colFlags.VisibleIndex = 11;
+            colFlags.VisibleIndex = 10;
             colFlags.Width = 100;
             // 
             // colDescription
@@ -204,8 +223,34 @@
             colDescription.MinWidth = 100;
             colDescription.Name = "colDescription";
             colDescription.Visible = true;
-            colDescription.VisibleIndex = 12;
+            colDescription.VisibleIndex = 11;
             colDescription.Width = 100;
+            // 
+            // colCalcuQ
+            // 
+            colCalcuQ.FieldName = "CalcuQ";
+            colCalcuQ.Fixed = DevExpress.XtraGrid.Columns.FixedStyle.Right;
+            colCalcuQ.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("colCalcuQ.ImageOptions.SvgImage");
+            colCalcuQ.ImageOptions.SvgImageSize = new Size(16, 16);
+            colCalcuQ.MaxWidth = 100;
+            colCalcuQ.MinWidth = 100;
+            colCalcuQ.Name = "colCalcuQ";
+            colCalcuQ.Visible = true;
+            colCalcuQ.VisibleIndex = 12;
+            colCalcuQ.Width = 100;
+            // 
+            // colCalcuPr
+            // 
+            colCalcuPr.FieldName = "CalcuPr";
+            colCalcuPr.Fixed = DevExpress.XtraGrid.Columns.FixedStyle.Right;
+            colCalcuPr.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("colCalcuPr.ImageOptions.SvgImage");
+            colCalcuPr.ImageOptions.SvgImageSize = new Size(16, 16);
+            colCalcuPr.MaxWidth = 100;
+            colCalcuPr.MinWidth = 100;
+            colCalcuPr.Name = "colCalcuPr";
+            colCalcuPr.Visible = true;
+            colCalcuPr.VisibleIndex = 13;
+            colCalcuPr.Width = 100;
             // 
             // colSet
             // 
@@ -216,15 +261,15 @@
             colSet.MinWidth = 60;
             colSet.Name = "colSet";
             colSet.Visible = true;
-            colSet.VisibleIndex = 15;
+            colSet.VisibleIndex = 14;
             colSet.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 DevExpress.Utils.KeyShortcut(Keys.None), serializableAppearanceObject5, serializableAppearanceObject6, serializableAppearanceObject7, serializableAppearanceObject8, "", null, null, DevExpress.Utils.ToolTipAnchor.Default) });
+            editorButtonImageOptions1.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("editorButtonImageOptions1.SvgImage");
+            editorButtonImageOptions1.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, editorButtonImageOptions1, new DevExpress.Utils.KeyShortcut(Keys.None), serializableAppearanceObject1, serializableAppearanceObject2, serializableAppearanceObject3, serializableAppearanceObject4, "", null, null, DevExpress.Utils.ToolTipAnchor.Default) });
             repositoryItemButtonEdit1.Name = "repositoryItemButtonEdit1";
             repositoryItemButtonEdit1.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.HideTextEditor;
             // 
@@ -356,62 +401,6 @@
             layoutControlItem8.TextSize = new Size(0, 0);
             layoutControlItem8.TextVisible = false;
             // 
-            // colMaterial
-            // 
-            colMaterial.FieldName = "Material";
-            colMaterial.MaxWidth = 100;
-            colMaterial.MinWidth = 100;
-            colMaterial.Name = "colMaterial";
-            colMaterial.Visible = true;
-            colMaterial.VisibleIndex = 4;
-            colMaterial.Width = 100;
-            // 
-            // colLowerLimit
-            // 
-            colLowerLimit.FieldName = "LowerLimit";
-            colLowerLimit.MaxWidth = 100;
-            colLowerLimit.MinWidth = 100;
-            colLowerLimit.Name = "colLowerLimit";
-            colLowerLimit.Visible = true;
-            colLowerLimit.VisibleIndex = 7;
-            colLowerLimit.Width = 100;
-            // 
-            // colCalcuQ
-            // 
-            colCalcuQ.FieldName = "CalcuQ";
-            colCalcuQ.Fixed = DevExpress.XtraGrid.Columns.FixedStyle.Right;
-            colCalcuQ.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("colCalcuQ.ImageOptions.SvgImage");
-            colCalcuQ.ImageOptions.SvgImageSize = new Size(16, 16);
-            colCalcuQ.MaxWidth = 100;
-            colCalcuQ.MinWidth = 100;
-            colCalcuQ.Name = "colCalcuQ";
-            colCalcuQ.Visible = true;
-            colCalcuQ.VisibleIndex = 13;
-            colCalcuQ.Width = 100;
-            // 
-            // colCalcuPr
-            // 
-            colCalcuPr.FieldName = "CalcuPr";
-            colCalcuPr.Fixed = DevExpress.XtraGrid.Columns.FixedStyle.Right;
-            colCalcuPr.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("colCalcuPr.ImageOptions.SvgImage");
-            colCalcuPr.ImageOptions.SvgImageSize = new Size(16, 16);
-            colCalcuPr.MaxWidth = 100;
-            colCalcuPr.MinWidth = 100;
-            colCalcuPr.Name = "colCalcuPr";
-            colCalcuPr.Visible = true;
-            colCalcuPr.VisibleIndex = 14;
-            colCalcuPr.Width = 100;
-            // 
-            // colCaliber
-            // 
-            colCaliber.FieldName = "Caliber";
-            colCaliber.MaxWidth = 100;
-            colCaliber.MinWidth = 100;
-            colCaliber.Name = "colCaliber";
-            colCaliber.Visible = true;
-            colCaliber.VisibleIndex = 5;
-            colCaliber.Width = 100;
-            // 
             // HydroCoolingListCtrl
             // 
             AutoScaleDimensions = new SizeF(7F, 14F);
@@ -450,7 +439,6 @@
         private DevExpress.XtraGrid.Columns.GridColumn colDbLocked;
         private DevExpress.XtraGrid.Columns.GridColumn colModelType;
         private DevExpress.XtraGrid.Columns.GridColumn colHasDb;
-        private DevExpress.XtraGrid.Columns.GridColumn colMinorLoss;
         private DevExpress.XtraLayout.LayoutControl layoutControl1;
         private DevExpress.XtraEditors.TextEdit txtName;
         private DevExpress.XtraEditors.TextEdit txtModelType;
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/11-cooling/HydroCoolingListCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/11-cooling/HydroCoolingListCtrl.cs
index 34a2cf3..6283f16 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/11-cooling/HydroCoolingListCtrl.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/11-cooling/HydroCoolingListCtrl.cs
@@ -31,10 +31,6 @@
         /// 姘村姏鏀瑰彉瑙嗗浘浜嬩欢
         /// </summary>
         public event Action<List<HydroVisualViewModel>> HydroChangedViewEvent;
-        /// <summary>
-        /// 鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
 
         /// <summary>
         /// 鏄惁鎷ユ湁姘村姏鍒楄〃
@@ -44,34 +40,54 @@
             get { return _allList != null && _allList.Count > 0; }
         }
 
-        //鎵�鏈夊垪琛�
-        private List<HydroCoolingViewModel> _allList = null;
-        //鎵�鏈夌粦瀹氬垪琛�
-        private List<HydroCoolingViewModel> _allBindingList = null;
+
+        private List<HydroCoolingViewModel> _allList = null;//鎵�鏈夊垪琛�
+        private List<HydroCoolingViewModel> _allBindingList = null; //鎵�鏈夌粦瀹氬垪琛�
+        private HydroChangeHelper _changeHelper = null;//鏀瑰彉杈呭姪绫�
+        private HydroPropStatusHelper _propStatusHelper = null;//灞炴�х姸鎬佽緟鍔╃被
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            SetBindingData(hydroInfo, allCalcuResultVisualDict: null);
+            SetBindingData(hydroInfo, allCalcuResultVisualDict: null, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, List<HydroCalcuVisualResult> allCalcuResultList)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                List<HydroCalcuVisualResult> allCalcuResultList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             var allCalcuResultVisualDict = allCalcuResultList?.ToDictionary(x => x.Code);
-            SetBindingData(hydroInfo, allCalcuResultVisualDict);
+            SetBindingData(hydroInfo, allCalcuResultVisualDict, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(HydroModelInfo hydroInfo, Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict)
+        public void SetBindingData
+            (
+                HydroModelInfo hydroInfo,
+                Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allList = new List<HydroCoolingViewModel>();
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             if (hydroInfo != null && hydroInfo.Coolings != null && hydroInfo.Coolings.Count > 0)
             {
                 foreach (var visual in hydroInfo.Coolings)
@@ -91,9 +107,16 @@
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList)
+        public void SetBindingData
+            (
+                List<HydroVisualViewModel> allVisualViewModelList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allList = new List<HydroCoolingViewModel>();
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             allVisualViewModelList?.ForEach(x =>
             {
                 if (x.Vmo.Catalog == Yw.Hydro.ParterCatalog.Cooling)
@@ -248,7 +271,7 @@
                 return;
             }
             var dlg = new SetHydroCoolingDlg();
-            dlg.SetBindingData(_allBindingList.Select(x => x.Vmo).ToList());
+            dlg.SetBindingData(_allBindingList.Select(x => x.Vmo).ToList(), _changeHelper, _propStatusHelper);
             dlg.ReloadDataEvent += (list) =>
             {
                 if (list == null || list.Count < 1)
@@ -261,7 +284,6 @@
                 this.HydroChangedViewEvent?.Invoke(allVisualViewModelList);
                 var allVisualInfoList = allVisualViewModelList.Select(x => x.Vmo).ToList();
                 this.HydroChangedInfoEvent?.Invoke(allVisualInfoList);
-                list.ForEach(x => this.ParterChangedEvent?.Invoke(x, eChangeType.Update));
             };
             dlg.ShowDialog();
         }
@@ -277,7 +299,7 @@
             if (e.Column == this.colSet)
             {
                 var dlg = new SetHydroCoolingDlg();
-                dlg.SetBindingData(row.Vmo);
+                dlg.SetBindingData(row.Vmo, _changeHelper, _propStatusHelper);
                 dlg.ReloadDataEvent += (list) =>
                 {
                     if (list == null || list.Count < 1)
@@ -288,7 +310,6 @@
                     this.gridView1.RefreshRow(e.RowHandle);
                     this.HydroChangedViewEvent?.Invoke(new List<HydroVisualViewModel>() { row });
                     this.HydroChangedInfoEvent?.Invoke(new List<HydroVisualInfo>() { row.Vmo });
-                    this.ParterChangedEvent?.Invoke(row.Vmo, eChangeType.Update);
                 };
                 dlg.ShowDialog();
             }
@@ -315,7 +336,6 @@
             this.colCoefficient.Visible = true;
             this.colLowerLimit.Visible = true;
             this.colElev.Visible = false;
-            this.colMinorLoss.Visible = false;
             this.colHasDb.Visible = false;
             this.colFlags.Visible = true;
             this.colDescription.Visible = true;
@@ -339,7 +359,6 @@
             this.colCoefficient.Visible = true;
             this.colLowerLimit.Visible = true;
             this.colElev.Visible = true;
-            this.colMinorLoss.Visible = true;
             this.colHasDb.Visible = true;
             this.colFlags.Visible = true;
             this.colDescription.Visible = true;
@@ -363,7 +382,6 @@
             this.colCoefficient.Visible = true;
             this.colLowerLimit.Visible = true;
             this.colElev.Visible = true;
-            this.colMinorLoss.Visible = true;
             this.colHasDb.Visible = true;
             this.colFlags.Visible = true;
             this.colDescription.Visible = true;
@@ -387,7 +405,6 @@
             this.colCoefficient.Visible = true;
             this.colLowerLimit.Visible = true;
             this.colElev.Visible = true;
-            this.colMinorLoss.Visible = true;
             this.colHasDb.Visible = true;
             this.colFlags.Visible = true;
             this.colDescription.Visible = true;
@@ -411,7 +428,6 @@
             this.colCoefficient.Visible = true;
             this.colLowerLimit.Visible = true;
             this.colElev.Visible = true;
-            this.colMinorLoss.Visible = true;
             this.colHasDb.Visible = true;
             this.colFlags.Visible = true;
             this.colDescription.Visible = true;
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/11-cooling/HydroCoolingListCtrl.resx b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/11-cooling/HydroCoolingListCtrl.resx
index f2e2f9f..abe3222 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/11-cooling/HydroCoolingListCtrl.resx
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/11-cooling/HydroCoolingListCtrl.resx
@@ -213,7 +213,7 @@
         Pg0KICA8L2c+DQo8L3N2Zz4L
 </value>
   </data>
-  <data name="editorButtonImageOptions2.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+  <data name="editorButtonImageOptions1.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
         LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/11-cooling/SetHydroCoolingDlg.Designer.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/11-cooling/SetHydroCoolingDlg.Designer.cs
index 41d2038..1bc2071 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/11-cooling/SetHydroCoolingDlg.Designer.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/11-cooling/SetHydroCoolingDlg.Designer.cs
@@ -29,46 +29,66 @@
         private void InitializeComponent()
         {
             layoutControl1 = new DevExpress.XtraLayout.LayoutControl();
+            txtCaliber = new DevExpress.XtraEditors.TextEdit();
+            txtMaterial = new DevExpress.XtraEditors.TextEdit();
             generalOkAndCancelCtrl1 = new GeneralOkAndCancelCtrl();
             txtCoefficient = new DevExpress.XtraEditors.TextEdit();
             txtLowerLimit = new DevExpress.XtraEditors.TextEdit();
-            txtMinorLoss = new DevExpress.XtraEditors.TextEdit();
-            txtElev = new DevExpress.XtraEditors.TextEdit();
             Root = new DevExpress.XtraLayout.LayoutControlGroup();
-            layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
             layoutControlItem5 = new DevExpress.XtraLayout.LayoutControlItem();
-            layoutControlItem4 = new DevExpress.XtraLayout.LayoutControlItem();
             layoutControlItem9 = new DevExpress.XtraLayout.LayoutControlItem();
             layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem3 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem10 = new DevExpress.XtraLayout.LayoutControlItem();
             ((ISupportInitialize)layoutControl1).BeginInit();
             layoutControl1.SuspendLayout();
+            ((ISupportInitialize)txtCaliber.Properties).BeginInit();
+            ((ISupportInitialize)txtMaterial.Properties).BeginInit();
             ((ISupportInitialize)txtCoefficient.Properties).BeginInit();
             ((ISupportInitialize)txtLowerLimit.Properties).BeginInit();
-            ((ISupportInitialize)txtMinorLoss.Properties).BeginInit();
-            ((ISupportInitialize)txtElev.Properties).BeginInit();
             ((ISupportInitialize)Root).BeginInit();
-            ((ISupportInitialize)layoutControlItem1).BeginInit();
             ((ISupportInitialize)layoutControlItem5).BeginInit();
-            ((ISupportInitialize)layoutControlItem4).BeginInit();
             ((ISupportInitialize)layoutControlItem9).BeginInit();
             ((ISupportInitialize)layoutControlItem2).BeginInit();
+            ((ISupportInitialize)layoutControlItem3).BeginInit();
+            ((ISupportInitialize)layoutControlItem10).BeginInit();
             SuspendLayout();
             // 
             // layoutControl1
             // 
+            layoutControl1.Controls.Add(txtCaliber);
+            layoutControl1.Controls.Add(txtMaterial);
             layoutControl1.Controls.Add(generalOkAndCancelCtrl1);
             layoutControl1.Controls.Add(txtCoefficient);
             layoutControl1.Controls.Add(txtLowerLimit);
-            layoutControl1.Controls.Add(txtMinorLoss);
-            layoutControl1.Controls.Add(txtElev);
             layoutControl1.Dock = DockStyle.Fill;
             layoutControl1.Location = new Point(0, 0);
             layoutControl1.Name = "layoutControl1";
             layoutControl1.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = new Rectangle(670, 266, 650, 400);
             layoutControl1.Root = Root;
-            layoutControl1.Size = new Size(412, 100);
+            layoutControl1.Size = new Size(400, 98);
             layoutControl1.TabIndex = 1;
             layoutControl1.Text = "layoutControl1";
+            // 
+            // txtCaliber
+            // 
+            txtCaliber.Location = new Point(265, 12);
+            txtCaliber.Name = "txtCaliber";
+            txtCaliber.Properties.AllowNullInput = DevExpress.Utils.DefaultBoolean.True;
+            txtCaliber.Properties.DisplayFormat.FormatString = "{0}mm";
+            txtCaliber.Properties.DisplayFormat.FormatType = DevExpress.Utils.FormatType.Custom;
+            txtCaliber.Properties.MaskSettings.Set("MaskManagerType", typeof(DevExpress.Data.Mask.NumericMaskManager));
+            txtCaliber.Size = new Size(123, 20);
+            txtCaliber.StyleController = layoutControl1;
+            txtCaliber.TabIndex = 7;
+            // 
+            // txtMaterial
+            // 
+            txtMaterial.Location = new Point(76, 12);
+            txtMaterial.Name = "txtMaterial";
+            txtMaterial.Size = new Size(121, 20);
+            txtMaterial.StyleController = layoutControl1;
+            txtMaterial.TabIndex = 3;
             // 
             // generalOkAndCancelCtrl1
             // 
@@ -78,8 +98,8 @@
             generalOkAndCancelCtrl1.ButtonOkMinSize = new Size(100, 26);
             generalOkAndCancelCtrl1.Location = new Point(12, 60);
             generalOkAndCancelCtrl1.Name = "generalOkAndCancelCtrl1";
-            generalOkAndCancelCtrl1.Size = new Size(388, 28);
-            generalOkAndCancelCtrl1.TabIndex = 5;
+            generalOkAndCancelCtrl1.Size = new Size(376, 26);
+            generalOkAndCancelCtrl1.TabIndex = 6;
             // 
             // txtCoefficient
             // 
@@ -88,45 +108,22 @@
             txtCoefficient.Properties.AllowNullInput = DevExpress.Utils.DefaultBoolean.True;
             txtCoefficient.Properties.MaskSettings.Set("MaskManagerType", typeof(DevExpress.Data.Mask.NumericMaskManager));
             txtCoefficient.Properties.MaskSettings.Set("MaskManagerSignature", "allowNull=False");
-            txtCoefficient.Size = new Size(128, 20);
+            txtCoefficient.Size = new Size(121, 20);
             txtCoefficient.StyleController = layoutControl1;
-            txtCoefficient.TabIndex = 3;
+            txtCoefficient.TabIndex = 4;
             // 
             // txtLowerLimit
             // 
-            txtLowerLimit.Location = new Point(272, 36);
+            txtLowerLimit.Location = new Point(265, 36);
             txtLowerLimit.Name = "txtLowerLimit";
             txtLowerLimit.Properties.AllowNullInput = DevExpress.Utils.DefaultBoolean.True;
             txtLowerLimit.Properties.DisplayFormat.FormatString = "{0}m";
             txtLowerLimit.Properties.DisplayFormat.FormatType = DevExpress.Utils.FormatType.Custom;
             txtLowerLimit.Properties.MaskSettings.Set("MaskManagerType", typeof(DevExpress.Data.Mask.NumericMaskManager));
             txtLowerLimit.Properties.NullValuePrompt = "m";
-            txtLowerLimit.Size = new Size(128, 20);
+            txtLowerLimit.Size = new Size(123, 20);
             txtLowerLimit.StyleController = layoutControl1;
-            txtLowerLimit.TabIndex = 4;
-            // 
-            // txtMinorLoss
-            // 
-            txtMinorLoss.Location = new Point(272, 12);
-            txtMinorLoss.Name = "txtMinorLoss";
-            txtMinorLoss.Properties.AllowNullInput = DevExpress.Utils.DefaultBoolean.True;
-            txtMinorLoss.Properties.MaskSettings.Set("MaskManagerType", typeof(DevExpress.Data.Mask.NumericMaskManager));
-            txtMinorLoss.Size = new Size(128, 20);
-            txtMinorLoss.StyleController = layoutControl1;
-            txtMinorLoss.TabIndex = 2;
-            // 
-            // txtElev
-            // 
-            txtElev.Location = new Point(76, 12);
-            txtElev.Name = "txtElev";
-            txtElev.Properties.AllowNullInput = DevExpress.Utils.DefaultBoolean.True;
-            txtElev.Properties.DisplayFormat.FormatString = "{0}m";
-            txtElev.Properties.DisplayFormat.FormatType = DevExpress.Utils.FormatType.Custom;
-            txtElev.Properties.MaskSettings.Set("MaskManagerType", typeof(DevExpress.Data.Mask.NumericMaskManager));
-            txtElev.Properties.NullValuePrompt = "m";
-            txtElev.Size = new Size(128, 20);
-            txtElev.StyleController = layoutControl1;
-            txtElev.TabIndex = 0;
+            txtLowerLimit.TabIndex = 5;
             // 
             // Root
             // 
@@ -134,45 +131,27 @@
             Root.AppearanceItemCaption.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Far;
             Root.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True;
             Root.GroupBordersVisible = false;
-            Root.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlItem1, layoutControlItem5, layoutControlItem4, layoutControlItem9, layoutControlItem2 });
+            Root.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlItem5, layoutControlItem9, layoutControlItem2, layoutControlItem3, layoutControlItem10 });
             Root.Name = "Root";
-            Root.Size = new Size(412, 100);
+            Root.Size = new Size(400, 98);
             Root.TextVisible = false;
-            // 
-            // layoutControlItem1
-            // 
-            layoutControlItem1.Control = txtElev;
-            layoutControlItem1.Location = new Point(0, 0);
-            layoutControlItem1.Name = "layoutControlItem1";
-            layoutControlItem1.Size = new Size(196, 24);
-            layoutControlItem1.Text = "鏍囬珮:";
-            layoutControlItem1.TextSize = new Size(52, 14);
             // 
             // layoutControlItem5
             // 
             layoutControlItem5.Control = txtLowerLimit;
-            layoutControlItem5.Location = new Point(196, 24);
+            layoutControlItem5.Location = new Point(189, 24);
             layoutControlItem5.Name = "layoutControlItem5";
-            layoutControlItem5.Size = new Size(196, 24);
+            layoutControlItem5.Size = new Size(191, 24);
             layoutControlItem5.Text = "鏈�灏忓帇鍔�:";
             layoutControlItem5.TextSize = new Size(52, 14);
-            // 
-            // layoutControlItem4
-            // 
-            layoutControlItem4.Control = txtMinorLoss;
-            layoutControlItem4.Location = new Point(196, 0);
-            layoutControlItem4.Name = "layoutControlItem4";
-            layoutControlItem4.Size = new Size(196, 24);
-            layoutControlItem4.Text = "灞�闃荤郴鏁�:";
-            layoutControlItem4.TextSize = new Size(52, 14);
             // 
             // layoutControlItem9
             // 
             layoutControlItem9.Control = txtCoefficient;
             layoutControlItem9.Location = new Point(0, 24);
             layoutControlItem9.Name = "layoutControlItem9";
-            layoutControlItem9.Size = new Size(196, 24);
-            layoutControlItem9.Text = "鍠峰皠绯绘暟:";
+            layoutControlItem9.Size = new Size(189, 24);
+            layoutControlItem9.Text = "娴侀噺绯绘暟:";
             layoutControlItem9.TextSize = new Size(52, 14);
             // 
             // layoutControlItem2
@@ -180,15 +159,33 @@
             layoutControlItem2.Control = generalOkAndCancelCtrl1;
             layoutControlItem2.Location = new Point(0, 48);
             layoutControlItem2.Name = "layoutControlItem2";
-            layoutControlItem2.Size = new Size(392, 32);
+            layoutControlItem2.Size = new Size(380, 30);
             layoutControlItem2.TextSize = new Size(0, 0);
             layoutControlItem2.TextVisible = false;
+            // 
+            // layoutControlItem3
+            // 
+            layoutControlItem3.Control = txtMaterial;
+            layoutControlItem3.Location = new Point(0, 0);
+            layoutControlItem3.Name = "layoutControlItem3";
+            layoutControlItem3.Size = new Size(189, 24);
+            layoutControlItem3.Text = "鏉愯川:";
+            layoutControlItem3.TextSize = new Size(52, 14);
+            // 
+            // layoutControlItem10
+            // 
+            layoutControlItem10.Control = txtCaliber;
+            layoutControlItem10.Location = new Point(189, 0);
+            layoutControlItem10.Name = "layoutControlItem10";
+            layoutControlItem10.Size = new Size(191, 24);
+            layoutControlItem10.Text = "鍙e緞:";
+            layoutControlItem10.TextSize = new Size(52, 14);
             // 
             // SetHydroCoolingDlg
             // 
             AutoScaleDimensions = new SizeF(7F, 14F);
             AutoScaleMode = AutoScaleMode.Font;
-            ClientSize = new Size(412, 100);
+            ClientSize = new Size(400, 98);
             Controls.Add(layoutControl1);
             MaximizeBox = false;
             Name = "SetHydroCoolingDlg";
@@ -196,28 +193,24 @@
             Text = "璁剧疆";
             ((ISupportInitialize)layoutControl1).EndInit();
             layoutControl1.ResumeLayout(false);
+            ((ISupportInitialize)txtCaliber.Properties).EndInit();
+            ((ISupportInitialize)txtMaterial.Properties).EndInit();
             ((ISupportInitialize)txtCoefficient.Properties).EndInit();
             ((ISupportInitialize)txtLowerLimit.Properties).EndInit();
-            ((ISupportInitialize)txtMinorLoss.Properties).EndInit();
-            ((ISupportInitialize)txtElev.Properties).EndInit();
             ((ISupportInitialize)Root).EndInit();
-            ((ISupportInitialize)layoutControlItem1).EndInit();
             ((ISupportInitialize)layoutControlItem5).EndInit();
-            ((ISupportInitialize)layoutControlItem4).EndInit();
             ((ISupportInitialize)layoutControlItem9).EndInit();
             ((ISupportInitialize)layoutControlItem2).EndInit();
+            ((ISupportInitialize)layoutControlItem3).EndInit();
+            ((ISupportInitialize)layoutControlItem10).EndInit();
             ResumeLayout(false);
         }
 
         #endregion
 
         private DevExpress.XtraLayout.LayoutControl layoutControl1;
-        private DevExpress.XtraEditors.TextEdit txtElev;
         private DevExpress.XtraLayout.LayoutControlGroup Root;
-        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1;
         private DevExpress.XtraEditors.TextEdit txtLowerLimit;
-        private DevExpress.XtraEditors.TextEdit txtMinorLoss;
-        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem4;
         private DevExpress.XtraLayout.LayoutControlItem layoutControlItem5;
         private DevExpress.XtraLayout.LayoutControlItem layoutControlItem6;
         private DevExpress.XtraLayout.LayoutControlItem layoutControlItem7;
@@ -226,5 +219,9 @@
         private DevExpress.XtraLayout.LayoutControlItem layoutControlItem9;
         private GeneralOkAndCancelCtrl generalOkAndCancelCtrl1;
         private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2;
+        private DevExpress.XtraEditors.TextEdit txtCaliber;
+        private DevExpress.XtraEditors.TextEdit txtMaterial;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem3;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem10;
     }
 }
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/11-cooling/SetHydroCoolingDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/11-cooling/SetHydroCoolingDlg.cs
index c98c68f..e6336c8 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/11-cooling/SetHydroCoolingDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/11-cooling/SetHydroCoolingDlg.cs
@@ -15,29 +15,43 @@
         /// </summary>
         public event Action<List<Yw.Model.HydroCoolingInfo>> ReloadDataEvent;
 
-        //鎵�鏈夋瀯浠跺垪琛�
-        private List<Yw.Model.HydroCoolingInfo> _allVisualList = null;
+
+        private List<Yw.Model.HydroCoolingInfo> _allVisualList = null; //鎵�鏈夋瀯浠跺垪琛�
+        private HydroChangeHelper _changeHelper = null;//鏀瑰彉杈呭姪绫�
+        private HydroPropStatusHelper _propStatusHelper = null;//灞炴�х姸鎬佽緟鍔╃被
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroCoolingInfo visual)
+        public void SetBindingData
+            (
+                Yw.Model.HydroCoolingInfo visual,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             var allVisualList = visual == null ? null : new List<Yw.Model.HydroCoolingInfo>() { visual };
-            SetBindingData(allVisualList);
+            SetBindingData(allVisualList, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<Yw.Model.HydroCoolingInfo> allVisualList)
+        public void SetBindingData
+            (
+                List<Yw.Model.HydroCoolingInfo> allVisualList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allVisualList = allVisualList;
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             if (_allVisualList != null && _allVisualList.Count == 1)
             {
                 var parter = _allVisualList.First();
-                this.txtElev.EditValue = Math.Round(parter.Elev, 4);
-                this.txtMinorLoss.EditValue = parter.MinorLoss;
+                this.txtMaterial.EditValue = parter.Material;
+                this.txtCaliber.EditValue = parter.Caliber;
                 this.txtCoefficient.EditValue = parter.Coefficient;
                 this.txtLowerLimit.EditValue = parter.LowerLimit;
             }
@@ -50,26 +64,46 @@
             {
                 return;
             }
-            double? elev = this.txtElev.EditValue == null ? null : double.Parse(this.txtElev.EditValue.ToString());
-            double? minorLoss = this.txtMinorLoss.EditValue == null ? null : double.Parse(this.txtMinorLoss.EditValue.ToString());
+            string material = this.txtMaterial.Text.Trim();
+            double? caliber = this.txtCaliber.EditValue == null ? null : double.Parse(this.txtCaliber.EditValue.ToString());
             double? coefficient = this.txtCoefficient.EditValue == null ? null : double.Parse(this.txtCoefficient.EditValue.ToString());
             double? lowerLimit = this.txtLowerLimit.EditValue == null ? null : double.Parse(this.txtLowerLimit.EditValue.ToString());
             _allVisualList.ForEach(x =>
             {
-                if (elev.HasValue)
+                if (!string.IsNullOrEmpty(material))
                 {
-                    x.Elev = elev.Value;
+                    if (x.Material != material)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.Material), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
+                    x.Material = material;
                 }
-                if (minorLoss.HasValue)
+                if (caliber.HasValue)
                 {
-                    x.MinorLoss = minorLoss.Value;
+                    if (x.Caliber != caliber.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.Caliber), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
+                    x.Caliber = caliber.Value;
                 }
                 if (coefficient.HasValue)
                 {
+                    if (x.Coefficient != coefficient.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.Coefficient), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.Coefficient = coefficient.Value;
                 }
                 if (lowerLimit.HasValue)
                 {
+                    if (x.LowerLimit != lowerLimit.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.LowerLimit), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.LowerLimit = lowerLimit.Value;
                 }
             });
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/11-cooling/SetHydroCoolingListDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/11-cooling/SetHydroCoolingListDlg.cs
index 00c27d9..41faf68 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/11-cooling/SetHydroCoolingListDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/11-cooling/SetHydroCoolingListDlg.cs
@@ -12,7 +12,6 @@
             this.hydroCoolingListCtrl1.HydroClickViewEvent += HydroCoolingListCtrl1_HydroClickViewEvent;
             this.hydroCoolingListCtrl1.HydroChangedInfoEvent += HydroCoolingListCtrl1_HydroChangedInfoEvent;
             this.hydroCoolingListCtrl1.HydroChangedViewEvent += HydroCoolingListCtrl1_HydroChangedViewEvent;
-            this.hydroCoolingListCtrl1.ParterChangedEvent += HydroCoolingListCtrl1_ParterChangedEvent;
         }
 
 
@@ -32,26 +31,33 @@
         /// 姘村姏鏀瑰彉瑙嗗浘浜嬩欢
         /// </summary>
         public event Action<List<HydroVisualViewModel>> HydroChangedViewEvent;
-        /// <summary>
-        /// 鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
+
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.hydroCoolingListCtrl1.SetBindingData(hydroInfo);
+            this.hydroCoolingListCtrl1.SetBindingData(hydroInfo, changeHelper, propStatusHelper);
             this.hydroCoolingListCtrl1.SetBulkView();
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList)
+        public void SetBindingData
+            (
+                List<HydroVisualViewModel> allVisualViewModelList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.hydroCoolingListCtrl1.SetBindingData(allVisualViewModelList);
+            this.hydroCoolingListCtrl1.SetBindingData(allVisualViewModelList, changeHelper, propStatusHelper);
             this.hydroCoolingListCtrl1.SetBulkView();
         }
 
@@ -79,11 +85,7 @@
             this.HydroChangedViewEvent?.Invoke(obj);
         }
 
-        //姘村姏鏀瑰彉浜嬩欢
-        private void HydroCoolingListCtrl1_ParterChangedEvent(HydroParterInfo arg1, eChangeType arg2)
-        {
-            this.ParterChangedEvent?.Invoke(arg1, arg2);
-        }
+
 
     }
 }
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/12-meter/HydroMeterListCtrl.Designer.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/12-meter/HydroMeterListCtrl.Designer.cs
index 69a5193..884903e 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/12-meter/HydroMeterListCtrl.Designer.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/12-meter/HydroMeterListCtrl.Designer.cs
@@ -102,6 +102,7 @@
             gridView1.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] { colDbLocked, colName, colCode, colModelType, colElev, colMinorLoss, colHasDb, colFlags, colDescription, colCalcuPress, colCalcuHead, colCalcuDemand, colSet });
             gridView1.GridControl = gridControl1;
             gridView1.Name = "gridView1";
+            gridView1.RowCellClick += gridView1_RowCellClick;
             // 
             // colDbLocked
             // 
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/12-meter/HydroMeterListCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/12-meter/HydroMeterListCtrl.cs
index 1a85864..3b1c249 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/12-meter/HydroMeterListCtrl.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/12-meter/HydroMeterListCtrl.cs
@@ -31,10 +31,7 @@
         /// 姘村姏鏀瑰彉瑙嗗浘浜嬩欢
         /// </summary>
         public event Action<List<HydroVisualViewModel>> HydroChangedViewEvent;
-        /// <summary>
-        /// 鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
+
 
         /// <summary>
         /// 鏄惁鎷ユ湁姘村姏鍒楄〃
@@ -44,34 +41,54 @@
             get { return _allList != null && _allList.Count > 0; }
         }
 
-        //鎵�鏈夊垪琛�
-        private List<HydroMeterViewModel> _allList = null;
-        //鎵�鏈夌粦瀹氬垪琛�
-        private List<HydroMeterViewModel> _allBindingList = null;
+
+        private List<HydroMeterViewModel> _allList = null; //鎵�鏈夊垪琛�
+        private List<HydroMeterViewModel> _allBindingList = null;//鎵�鏈夌粦瀹氬垪琛�
+        private HydroChangeHelper _changeHelper = null;//鏀瑰彉杈呭姪绫�
+        private HydroPropStatusHelper _propStatusHelper = null;//灞炴�х姸鎬佽緟鍔╃被
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            SetBindingData(hydroInfo, allCalcuResultVisualDict: null);
+            SetBindingData(hydroInfo, allCalcuResultVisualDict: null, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, List<HydroCalcuVisualResult> allCalcuResultList)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                List<HydroCalcuVisualResult> allCalcuResultList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             var allCalcuResultVisualDict = allCalcuResultList?.ToDictionary(x => x.Code);
-            SetBindingData(hydroInfo, allCalcuResultVisualDict);
+            SetBindingData(hydroInfo, allCalcuResultVisualDict, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(HydroModelInfo hydroInfo, Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict)
+        public void SetBindingData
+            (
+                HydroModelInfo hydroInfo,
+                Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allList = new List<HydroMeterViewModel>();
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             if (hydroInfo != null && hydroInfo.Meters != null && hydroInfo.Meters.Count > 0)
             {
                 foreach (var visual in hydroInfo.Meters)
@@ -91,9 +108,16 @@
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList)
+        public void SetBindingData
+            (
+                List<HydroVisualViewModel> allVisualViewModelList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allList = new List<HydroMeterViewModel>();
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             allVisualViewModelList?.ForEach(x =>
             {
                 if (x.Vmo.Catalog == Yw.Hydro.ParterCatalog.Meter)
@@ -248,7 +272,7 @@
                 return;
             }
             var dlg = new SetHydroMeterDlg();
-            dlg.SetBindingData(_allBindingList.Select(x => x.Vmo).ToList());
+            dlg.SetBindingData(_allBindingList.Select(x => x.Vmo).ToList(), _changeHelper, _propStatusHelper);
             dlg.ReloadDataEvent += (list) =>
             {
                 if (list == null || list.Count < 1)
@@ -261,7 +285,6 @@
                 this.HydroChangedViewEvent?.Invoke(allVisualViewModelList);
                 var allVisualInfoList = allVisualViewModelList.Select(x => x.Vmo).ToList();
                 this.HydroChangedInfoEvent?.Invoke(allVisualInfoList);
-                list.ForEach(x => this.ParterChangedEvent?.Invoke(x, eChangeType.Update));
             };
             dlg.ShowDialog();
         }
@@ -277,7 +300,7 @@
             if (e.Column == this.colSet)
             {
                 var dlg = new SetHydroMeterDlg();
-                dlg.SetBindingData(row.Vmo);
+                dlg.SetBindingData(row.Vmo, _changeHelper, _propStatusHelper);
                 dlg.ReloadDataEvent += (list) =>
                 {
                     if (list == null || list.Count < 1)
@@ -288,7 +311,6 @@
                     this.gridView1.RefreshRow(e.RowHandle);
                     this.HydroChangedViewEvent?.Invoke(new List<HydroVisualViewModel>() { row });
                     this.HydroChangedInfoEvent?.Invoke(new List<HydroVisualInfo>() { row.Vmo });
-                    this.ParterChangedEvent?.Invoke(row.Vmo, eChangeType.Update);
                 };
                 dlg.ShowDialog();
             }
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/12-meter/SetHydroMeterDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/12-meter/SetHydroMeterDlg.cs
index 31f894c..e5e22de 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/12-meter/SetHydroMeterDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/12-meter/SetHydroMeterDlg.cs
@@ -17,28 +17,42 @@
         /// </summary>
         public event Action<List<Yw.Model.HydroMeterInfo>> ReloadDataEvent;
 
-        //鎵�鏈夋瀯浠跺垪琛�
-        private List<Yw.Model.HydroMeterInfo> _allVisualList = null;
+
+        private List<Yw.Model.HydroMeterInfo> _allVisualList = null;//鎵�鏈夋瀯浠跺垪琛�
+        private HydroChangeHelper _changeHelper = null;//鏀瑰彉杈呭姪绫�
+        private HydroPropStatusHelper _propStatusHelper = null;//灞炴�х姸鎬佽緟鍔╃被
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroMeterInfo visual)
+        public void SetBindingData
+            (
+                Yw.Model.HydroMeterInfo visual,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             var allVisualList = visual == null ? null : new List<Yw.Model.HydroMeterInfo>() { visual };
-            SetBindingData(allVisualList);
+            SetBindingData(allVisualList, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<Yw.Model.HydroMeterInfo> allVisualList)
+        public void SetBindingData
+            (
+                List<Yw.Model.HydroMeterInfo> allVisualList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allVisualList = allVisualList;
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             if (_allVisualList != null && _allVisualList.Count == 1)
             {
                 var visual = _allVisualList.First();
-                this.txtElev.EditValue = visual.Elev;
+                this.txtElev.EditValue = Math.Round(visual.Elev, 4);
                 this.txtMinorLoss.EditValue = visual.MinorLoss;
                 this.txtDemand.EditValue = visual.Demand;
             }
@@ -58,14 +72,29 @@
             {
                 if (elev.HasValue)
                 {
+                    if (x.Elev != elev.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.Elev), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.Elev = elev.Value;
                 }
                 if (minorLoss.HasValue)
                 {
+                    if (x.MinorLoss != minorLoss.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.MinorLoss), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.MinorLoss = minorLoss.Value;
                 }
                 if (demand.HasValue)
                 {
+                    if (x.Demand != demand.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.Demand), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.Demand = demand.Value;
                 }
             });
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/12-meter/SetHydroMeterListDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/12-meter/SetHydroMeterListDlg.cs
index 27b5acb..76fa3aa 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/12-meter/SetHydroMeterListDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/12-meter/SetHydroMeterListDlg.cs
@@ -12,7 +12,6 @@
             this.hydroMeterListCtrl1.HydroClickViewEvent += HydroMeterListCtrl1_HydroClickViewEvent;
             this.hydroMeterListCtrl1.HydroChangedInfoEvent += HydroMeterListCtrl1_HydroChangedInfoEvent;
             this.hydroMeterListCtrl1.HydroChangedViewEvent += HydroMeterListCtrl1_HydroChangedViewEvent;
-            this.hydroMeterListCtrl1.ParterChangedEvent += HydroMeterListCtrl1_ParterChangedEvent;
         }
 
 
@@ -32,26 +31,32 @@
         /// 姘村姏鏀瑰彉瑙嗗浘浜嬩欢
         /// </summary>
         public event Action<List<HydroVisualViewModel>> HydroChangedViewEvent;
-        /// <summary>
-        /// 鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.hydroMeterListCtrl1.SetBindingData(hydroInfo);
+            this.hydroMeterListCtrl1.SetBindingData(hydroInfo, changeHelper, propStatusHelper);
             this.hydroMeterListCtrl1.SetBulkView();
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList)
+        public void SetBindingData
+            (
+                List<HydroVisualViewModel> allVisualViewModelList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.hydroMeterListCtrl1.SetBindingData(allVisualViewModelList);
+            this.hydroMeterListCtrl1.SetBindingData(allVisualViewModelList, changeHelper, propStatusHelper);
             this.hydroMeterListCtrl1.SetBulkView();
         }
 
@@ -79,11 +84,7 @@
             this.HydroChangedViewEvent?.Invoke(obj);
         }
 
-        //姘村姏鏀瑰彉浜嬩欢
-        private void HydroMeterListCtrl1_ParterChangedEvent(HydroParterInfo arg1, eChangeType arg2)
-        {
-            this.ParterChangedEvent?.Invoke(arg1, arg2);
-        }
+
 
     }
 }
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/13-flowmeter/HydroFlowmeterListCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/13-flowmeter/HydroFlowmeterListCtrl.cs
index 9014d9a..7c8c16a 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/13-flowmeter/HydroFlowmeterListCtrl.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/13-flowmeter/HydroFlowmeterListCtrl.cs
@@ -31,10 +31,6 @@
         /// 姘村姏鏀瑰彉瑙嗗浘浜嬩欢
         /// </summary>
         public event Action<List<HydroVisualViewModel>> HydroChangedViewEvent;
-        /// <summary>
-        /// 鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
 
         /// <summary>
         /// 鏄惁鎷ユ湁姘村姏鍒楄〃
@@ -44,34 +40,54 @@
             get { return _allList != null && _allList.Count > 0; }
         }
 
-        //鎵�鏈夊垪琛�
-        private List<HydroFlowmeterViewModel> _allList = null;
-        //鎵�鏈夌粦瀹氬垪琛�
-        private List<HydroFlowmeterViewModel> _allBindingList = null;
+
+        private List<HydroFlowmeterViewModel> _allList = null;//鎵�鏈夊垪琛�
+        private List<HydroFlowmeterViewModel> _allBindingList = null;//鎵�鏈夌粦瀹氬垪琛�
+        private HydroChangeHelper _changeHelper = null;//鏀瑰彉杈呭姪绫�
+        private HydroPropStatusHelper _propStatusHelper = null;//灞炴�х姸鎬佽緟鍔╃被
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            SetBindingData(hydroInfo, allCalcuResultVisualDict: null);
+            SetBindingData(hydroInfo, allCalcuResultVisualDict: null, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, List<HydroCalcuVisualResult> allCalcuResultList)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                List<HydroCalcuVisualResult> allCalcuResultList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             var allCalcuResultVisualDict = allCalcuResultList?.ToDictionary(x => x.Code);
-            SetBindingData(hydroInfo, allCalcuResultVisualDict);
+            SetBindingData(hydroInfo, allCalcuResultVisualDict, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(HydroModelInfo hydroInfo, Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict)
+        public void SetBindingData
+            (
+                HydroModelInfo hydroInfo,
+                Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allList = new List<HydroFlowmeterViewModel>();
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             if (hydroInfo != null && hydroInfo.Flowmeters != null && hydroInfo.Flowmeters.Count > 0)
             {
                 foreach (var visual in hydroInfo.Flowmeters)
@@ -91,9 +107,16 @@
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList)
+        public void SetBindingData
+            (
+                List<HydroVisualViewModel> allVisualViewModelList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allList = new List<HydroFlowmeterViewModel>();
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             allVisualViewModelList?.ForEach(x =>
             {
                 if (x.Vmo.Catalog == Yw.Hydro.ParterCatalog.Flowmeter)
@@ -248,7 +271,7 @@
                 return;
             }
             var dlg = new SetHydroFlowmeterDlg();
-            dlg.SetBindingData(_allBindingList.Select(x => x.Vmo).ToList());
+            dlg.SetBindingData(_allBindingList.Select(x => x.Vmo).ToList(), _changeHelper, _propStatusHelper);
             dlg.ReloadDataEvent += (list) =>
             {
                 if (list == null || list.Count < 1)
@@ -261,7 +284,6 @@
                 this.HydroChangedViewEvent?.Invoke(allVisualViewModelList);
                 var allVisualInfoList = allVisualViewModelList.Select(x => x.Vmo).ToList();
                 this.HydroChangedInfoEvent?.Invoke(allVisualInfoList);
-                list.ForEach(x => this.ParterChangedEvent?.Invoke(x, eChangeType.Update));
             };
             dlg.ShowDialog();
         }
@@ -278,7 +300,7 @@
             if (e.Column == this.colSet)
             {
                 var dlg = new SetHydroFlowmeterDlg();
-                dlg.SetBindingData(row.Vmo);
+                dlg.SetBindingData(row.Vmo, _changeHelper, _propStatusHelper);
                 dlg.ReloadDataEvent += (list) =>
                 {
                     if (list == null || list.Count < 1)
@@ -289,7 +311,6 @@
                     this.gridView1.RefreshRow(e.RowHandle);
                     this.HydroChangedViewEvent?.Invoke(new List<HydroVisualViewModel>() { row });
                     this.HydroChangedInfoEvent?.Invoke(new List<HydroVisualInfo>() { row.Vmo });
-                    this.ParterChangedEvent?.Invoke(row.Vmo, eChangeType.Update);
                 };
                 dlg.ShowDialog();
             }
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/13-flowmeter/SetHydroFlowmeterDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/13-flowmeter/SetHydroFlowmeterDlg.cs
index 3715ab6..c24a71e 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/13-flowmeter/SetHydroFlowmeterDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/13-flowmeter/SetHydroFlowmeterDlg.cs
@@ -15,28 +15,42 @@
         /// </summary>
         public event Action<List<Yw.Model.HydroFlowmeterInfo>> ReloadDataEvent;
 
-        //鎵�鏈夋瀯浠跺垪琛�
-        private List<Yw.Model.HydroFlowmeterInfo> _allVisualList = null;
+
+        private List<Yw.Model.HydroFlowmeterInfo> _allVisualList = null;//鎵�鏈夋瀯浠跺垪琛�
+        private HydroChangeHelper _changeHelper = null;//鏀瑰彉杈呭姪绫�
+        private HydroPropStatusHelper _propStatusHelper = null;//灞炴�х姸鎬佽緟鍔╃被
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroFlowmeterInfo visual)
+        public void SetBindingData
+            (
+                Yw.Model.HydroFlowmeterInfo visual,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             var allVisualList = visual == null ? null : new List<Yw.Model.HydroFlowmeterInfo>() { visual };
-            SetBindingData(allVisualList);
+            SetBindingData(allVisualList, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<Yw.Model.HydroFlowmeterInfo> allVisualList)
+        public void SetBindingData
+            (
+                List<Yw.Model.HydroFlowmeterInfo> allVisualList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allVisualList = allVisualList;
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             if (_allVisualList != null && _allVisualList.Count == 1)
             {
                 var meter = _allVisualList.First();
-                this.txtElev.EditValue = meter.Elev;
+                this.txtElev.EditValue = Math.Round(meter.Elev, 4);
                 this.txtMinorLoss.EditValue = meter.MinorLoss;
             }
         }
@@ -53,10 +67,20 @@
             {
                 if (elev.HasValue)
                 {
+                    if (x.Elev != elev.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.Elev), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.Elev = elev.Value;
                 }
                 if (minorLoss.HasValue)
                 {
+                    if (x.MinorLoss != minorLoss.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.MinorLoss), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.MinorLoss = minorLoss.Value;
                 }
             });
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/13-flowmeter/SetHydroFlowmeterListDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/13-flowmeter/SetHydroFlowmeterListDlg.cs
index a76202e..6ed791f 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/13-flowmeter/SetHydroFlowmeterListDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/13-flowmeter/SetHydroFlowmeterListDlg.cs
@@ -12,7 +12,6 @@
             this.hydroFlowmeterListCtrl1.HydroClickViewEvent += HydroFlowmeterListCtrl1_HydroClickViewEvent;
             this.hydroFlowmeterListCtrl1.HydroChangedInfoEvent += HydroFlowmeterListCtrl1_HydroChangedInfoEvent;
             this.hydroFlowmeterListCtrl1.HydroChangedViewEvent += HydroFlowmeterListCtrl1_HydroChangedViewEvent;
-            this.hydroFlowmeterListCtrl1.ParterChangedEvent += HydroFlowmeterListCtrl1_ParterChangedEvent;
         }
 
         /// <summary>
@@ -31,26 +30,33 @@
         /// 姘村姏鏀瑰彉瑙嗗浘浜嬩欢
         /// </summary>
         public event Action<List<HydroVisualViewModel>> HydroChangedViewEvent;
-        /// <summary>
-        /// 鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
+
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.hydroFlowmeterListCtrl1.SetBindingData(hydroInfo);
+            this.hydroFlowmeterListCtrl1.SetBindingData(hydroInfo, changeHelper, propStatusHelper);
             this.hydroFlowmeterListCtrl1.SetBulkView();
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList)
+        public void SetBindingData
+            (
+                List<HydroVisualViewModel> allVisualViewModelList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.hydroFlowmeterListCtrl1.SetBindingData(allVisualViewModelList);
+            this.hydroFlowmeterListCtrl1.SetBindingData(allVisualViewModelList, changeHelper, propStatusHelper);
             this.hydroFlowmeterListCtrl1.SetBulkView();
         }
 
@@ -78,11 +84,6 @@
             this.HydroChangedViewEvent?.Invoke(obj);
         }
 
-        //姘村姏鏀瑰彉浜嬩欢
-        private void HydroFlowmeterListCtrl1_ParterChangedEvent(HydroParterInfo arg1, eChangeType arg2)
-        {
-            this.ParterChangedEvent?.Invoke(arg1, arg2);
-        }
 
 
     }
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/14-pressmeter/HydroPressmeterListCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/14-pressmeter/HydroPressmeterListCtrl.cs
index 4cdda42..5e8330b 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/14-pressmeter/HydroPressmeterListCtrl.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/14-pressmeter/HydroPressmeterListCtrl.cs
@@ -31,10 +31,6 @@
         /// 姘村姏鏀瑰彉瑙嗗浘浜嬩欢
         /// </summary>
         public event Action<List<HydroVisualViewModel>> HydroChangedViewEvent;
-        /// <summary>
-        /// 鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
 
         /// <summary>
         /// 鏄惁鎷ユ湁姘村姏鍒楄〃
@@ -44,34 +40,54 @@
             get { return _allList != null && _allList.Count > 0; }
         }
 
-        //鎵�鏈夊垪琛�
-        private List<HydroPressmeterViewModel> _allList = null;
-        //鎵�鏈夌粦瀹氬垪琛�
-        private List<HydroPressmeterViewModel> _allBindingList = null;
+
+        private List<HydroPressmeterViewModel> _allList = null;//鎵�鏈夊垪琛�
+        private List<HydroPressmeterViewModel> _allBindingList = null;//鎵�鏈夌粦瀹氬垪琛�
+        private HydroChangeHelper _changeHelper = null;//鏀瑰彉杈呭姪绫�
+        private HydroPropStatusHelper _propStatusHelper = null;//灞炴�х姸鎬佽緟鍔╃被
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            SetBindingData(hydroInfo, allCalcuResultVisualDict: null);
+            SetBindingData(hydroInfo, allCalcuResultVisualDict: null, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, List<HydroCalcuVisualResult> allCalcuResultList)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                List<HydroCalcuVisualResult> allCalcuResultList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             var allCalcuResultVisualDict = allCalcuResultList?.ToDictionary(x => x.Code);
-            SetBindingData(hydroInfo, allCalcuResultVisualDict);
+            SetBindingData(hydroInfo, allCalcuResultVisualDict, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(HydroModelInfo hydroInfo, Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict)
+        public void SetBindingData
+            (
+                HydroModelInfo hydroInfo,
+                Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allList = new List<HydroPressmeterViewModel>();
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             if (hydroInfo != null && hydroInfo.Pressmeters != null && hydroInfo.Pressmeters.Count > 0)
             {
                 foreach (var visual in hydroInfo.Pressmeters)
@@ -86,15 +102,21 @@
                 }
             }
             Search();
-
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList)
+        public void SetBindingData
+            (
+                List<HydroVisualViewModel> allVisualViewModelList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allList = new List<HydroPressmeterViewModel>();
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             allVisualViewModelList?.ForEach(x =>
             {
                 if (x.Vmo.Catalog == Yw.Hydro.ParterCatalog.Pressmeter)
@@ -249,7 +271,7 @@
                 return;
             }
             var dlg = new SetHydroPressmeterDlg();
-            dlg.SetBindingData(_allBindingList.Select(x => x.Vmo).ToList());
+            dlg.SetBindingData(_allBindingList.Select(x => x.Vmo).ToList(), _changeHelper, _propStatusHelper);
             dlg.ReloadDataEvent += (list) =>
             {
                 if (list == null || list.Count < 1)
@@ -262,7 +284,6 @@
                 this.HydroChangedViewEvent?.Invoke(allVisualViewModelList);
                 var allVisualInfoList = allVisualViewModelList.Select(x => x.Vmo).ToList();
                 this.HydroChangedInfoEvent?.Invoke(allVisualInfoList);
-                list.ForEach(x => this.ParterChangedEvent?.Invoke(x, eChangeType.Update));
             };
             dlg.ShowDialog();
         }
@@ -279,7 +300,7 @@
             if (e.Column == this.colSet)
             {
                 var dlg = new SetHydroPressmeterDlg();
-                dlg.SetBindingData(row.Vmo);
+                dlg.SetBindingData(row.Vmo, _changeHelper, _propStatusHelper);
                 dlg.ReloadDataEvent += (list) =>
                 {
                     if (list == null || list.Count < 1)
@@ -290,7 +311,6 @@
                     this.gridView1.RefreshRow(e.RowHandle);
                     this.HydroChangedViewEvent?.Invoke(new List<HydroVisualViewModel>() { row });
                     this.HydroChangedInfoEvent?.Invoke(new List<HydroVisualInfo>() { row.Vmo });
-                    this.ParterChangedEvent?.Invoke(row.Vmo, eChangeType.Update);
                 };
                 dlg.ShowDialog();
             }
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/14-pressmeter/SetHydroPressmeterDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/14-pressmeter/SetHydroPressmeterDlg.cs
index d009779..f84a48a 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/14-pressmeter/SetHydroPressmeterDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/14-pressmeter/SetHydroPressmeterDlg.cs
@@ -15,28 +15,42 @@
         /// </summary>
         public event Action<List<Yw.Model.HydroPressmeterInfo>> ReloadDataEvent;
 
-        //鎵�鏈夋瀯浠跺垪琛�
-        private List<Yw.Model.HydroPressmeterInfo> _allVisualList = null;
+
+        private List<Yw.Model.HydroPressmeterInfo> _allVisualList = null;//鎵�鏈夋瀯浠跺垪琛�
+        private HydroChangeHelper _changeHelper = null;//鏀瑰彉杈呭姪绫�
+        private HydroPropStatusHelper _propStatusHelper = null;//灞炴�х姸鎬佽緟鍔╃被
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroPressmeterInfo visual)
+        public void SetBindingData
+            (
+                Yw.Model.HydroPressmeterInfo visual,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             var allVisualList = visual == null ? null : new List<Yw.Model.HydroPressmeterInfo>() { visual };
-            SetBindingData(allVisualList);
+            SetBindingData(allVisualList, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<Yw.Model.HydroPressmeterInfo> allVisualList)
+        public void SetBindingData
+            (
+                List<Yw.Model.HydroPressmeterInfo> allVisualList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allVisualList = allVisualList;
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             if (_allVisualList != null && _allVisualList.Count == 1)
             {
                 var visual = _allVisualList.First();
-                this.txtElev.EditValue = visual.Elev;
+                this.txtElev.EditValue = Math.Round(visual.Elev, 4);
                 this.txtMinorLoss.EditValue = visual.MinorLoss;
             }
         }
@@ -53,10 +67,20 @@
             {
                 if (elev.HasValue)
                 {
+                    if (x.Elev != elev.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.Elev), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.Elev = elev.Value;
                 }
                 if (minorLoss.HasValue)
                 {
+                    if (x.MinorLoss != minorLoss.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.MinorLoss), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.MinorLoss = minorLoss.Value;
                 }
             });
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/14-pressmeter/SetHydroPressmeterListDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/14-pressmeter/SetHydroPressmeterListDlg.cs
index 2260ab6..b14817d 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/14-pressmeter/SetHydroPressmeterListDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/14-pressmeter/SetHydroPressmeterListDlg.cs
@@ -12,7 +12,6 @@
             this.hydroPressmeterListCtrl1.HydroClickViewEvent += HydroPressmeterListCtrl1_HydroClickViewEvent;
             this.hydroPressmeterListCtrl1.HydroChangedInfoEvent += HydroPressmeterListCtrl1_HydroChangedInfoEvent;
             this.hydroPressmeterListCtrl1.HydroChangedViewEvent += HydroPressmeterListCtrl1_HydroChangedViewEvent;
-            this.hydroPressmeterListCtrl1.ParterChangedEvent += HydroPressmeterListCtrl1_ParterChangedEvent;
         }
 
 
@@ -32,26 +31,32 @@
         /// 姘村姏鏀瑰彉瑙嗗浘浜嬩欢
         /// </summary>
         public event Action<List<HydroVisualViewModel>> HydroChangedViewEvent;
-        /// <summary>
-        /// 鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.hydroPressmeterListCtrl1.SetBindingData(hydroInfo);
+            this.hydroPressmeterListCtrl1.SetBindingData(hydroInfo, changeHelper, propStatusHelper);
             this.hydroPressmeterListCtrl1.SetBulkView();
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList)
+        public void SetBindingData
+            (
+                List<HydroVisualViewModel> allVisualViewModelList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.hydroPressmeterListCtrl1.SetBindingData(allVisualViewModelList);
+            this.hydroPressmeterListCtrl1.SetBindingData(allVisualViewModelList, changeHelper, propStatusHelper);
             this.hydroPressmeterListCtrl1.SetBulkView();
         }
 
@@ -79,11 +84,7 @@
             this.HydroChangedViewEvent?.Invoke(obj);
         }
 
-        //姘村姏鏀瑰彉浜嬩欢
-        private void HydroPressmeterListCtrl1_ParterChangedEvent(HydroParterInfo arg1, eChangeType arg2)
-        {
-            this.ParterChangedEvent?.Invoke(arg1, arg2);
-        }
+
 
     }
 }
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/15-pipe/HydroPipeListCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/15-pipe/HydroPipeListCtrl.cs
index d2434cb..420a7a2 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/15-pipe/HydroPipeListCtrl.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/15-pipe/HydroPipeListCtrl.cs
@@ -31,10 +31,7 @@
         /// 姘村姏鏀瑰彉瑙嗗浘浜嬩欢
         /// </summary>
         public event Action<List<HydroVisualViewModel>> HydroChangedViewEvent;
-        /// <summary>
-        /// 鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
+
 
         /// <summary>
         /// 鏄惁鎷ユ湁姘村姏鍒楄〃
@@ -44,34 +41,54 @@
             get { return _allList != null && _allList.Count > 0; }
         }
 
-        //鎵�鏈夊垪琛�
-        private List<HydroPipeViewModel> _allList = null;
-        //鎵�鏈夌粦瀹氬垪琛�
-        private List<HydroPipeViewModel> _allBindingList = null;
+
+        private List<HydroPipeViewModel> _allList = null;//鎵�鏈夊垪琛�
+        private List<HydroPipeViewModel> _allBindingList = null;//鎵�鏈夌粦瀹氬垪琛�
+        private HydroChangeHelper _changeHelper = null;//鏀瑰彉杈呭姪绫�
+        private HydroPropStatusHelper _propStatusHelper = null;//灞炴�х姸鎬佽緟鍔╃被
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            SetBindingData(hydroInfo, allCalcuResultVisualDict: null);
+            SetBindingData(hydroInfo, allCalcuResultVisualDict: null, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, List<HydroCalcuVisualResult> allCalcuResultList)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                List<HydroCalcuVisualResult> allCalcuResultList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             var allCalcuResultVisualDict = allCalcuResultList?.ToDictionary(x => x.Code);
-            SetBindingData(hydroInfo, allCalcuResultVisualDict);
+            SetBindingData(hydroInfo, allCalcuResultVisualDict, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict)
+        public void SetBindingData
+            (
+                HydroModelInfo hydroInfo,
+                Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allList = new List<HydroPipeViewModel>();
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             if (hydroInfo != null && hydroInfo.Pipes != null && hydroInfo.Pipes.Count > 0)
             {
                 foreach (var visual in hydroInfo.Pipes)
@@ -91,9 +108,16 @@
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList)
+        public void SetBindingData
+            (
+                List<HydroVisualViewModel> allVisualViewModelList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allList = new List<HydroPipeViewModel>();
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             allVisualViewModelList?.ForEach(x =>
             {
                 if (x.Vmo.Catalog == Yw.Hydro.ParterCatalog.Pipe)
@@ -248,7 +272,7 @@
                 return;
             }
             var dlg = new SetHydroPipeDlg();
-            dlg.SetBindingData(_allBindingList.Select(x => x.Vmo).ToList());
+            dlg.SetBindingData(_allBindingList.Select(x => x.Vmo).ToList(), _changeHelper, _propStatusHelper);
             dlg.ReloadDataEvent += (list) =>
             {
                 if (list == null || list.Count < 1)
@@ -261,12 +285,11 @@
                 this.HydroChangedViewEvent?.Invoke(allVisualViewModelList);
                 var allVisualInfoList = allVisualViewModelList.Select(x => x.Vmo).ToList();
                 this.HydroChangedInfoEvent?.Invoke(allVisualInfoList);
-                list.ForEach(x => this.ParterChangedEvent?.Invoke(x, eChangeType.Update));
             };
             dlg.ShowDialog();
         }
 
-
+        //琛屽崟鍏冪偣鍑讳簨浠�
         private void gridView1_RowCellClick(object sender, DevExpress.XtraGrid.Views.Grid.RowCellClickEventArgs e)
         {
             var row = this.gridView1.GetRow(e.RowHandle) as HydroPipeViewModel;
@@ -278,7 +301,7 @@
             if (e.Column == this.colSet)
             {
                 var dlg = new SetHydroPipeDlg();
-                dlg.SetBindingData(row.Vmo);
+                dlg.SetBindingData(row.Vmo, _changeHelper, _propStatusHelper);
                 dlg.ReloadDataEvent += (list) =>
                 {
                     if (list == null || list.Count < 1)
@@ -289,7 +312,6 @@
                     this.gridView1.RefreshRow(e.RowHandle);
                     this.HydroChangedViewEvent?.Invoke(new List<HydroVisualViewModel>() { row });
                     this.HydroChangedInfoEvent?.Invoke(new List<HydroVisualInfo>() { row.Vmo });
-                    this.ParterChangedEvent?.Invoke(row.Vmo, eChangeType.Update);
                 };
                 dlg.ShowDialog();
             }
@@ -435,5 +457,7 @@
             this.colCalcuQ.Visible = true;
             this.colSet.Visible = false;
         }
+
+
     }
 }
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/15-pipe/SetHydroPipeDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/15-pipe/SetHydroPipeDlg.cs
index 74a3803..508840f 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/15-pipe/SetHydroPipeDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/15-pipe/SetHydroPipeDlg.cs
@@ -15,24 +15,38 @@
         /// </summary>
         public event Action<List<Yw.Model.HydroPipeInfo>> ReloadDataEvent;
 
-        //鎵�鏈夐儴浠跺垪琛�
-        private List<Yw.Model.HydroPipeInfo> _allVisualList = null;
+
+        private List<Yw.Model.HydroPipeInfo> _allVisualList = null;//鎵�鏈夐儴浠跺垪琛�
+        private HydroChangeHelper _changeHelper = null;//鏀瑰彉杈呭姪绫�
+        private HydroPropStatusHelper _propStatusHelper = null;//灞炴�х姸鎬佽緟鍔╃被
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroPipeInfo visual)
+        public void SetBindingData
+            (
+                Yw.Model.HydroPipeInfo visual,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             var allParterList = visual == null ? null : new List<Yw.Model.HydroPipeInfo>() { visual };
-            this.SetBindingData(allParterList);
+            this.SetBindingData(allParterList, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<Yw.Model.HydroPipeInfo> allVisualList)
+        public void SetBindingData
+            (
+                List<Yw.Model.HydroPipeInfo> allVisualList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allVisualList = allVisualList;
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             if (_allVisualList != null && _allVisualList.Count == 1)
             {
                 var visual = _allVisualList.First();
@@ -60,22 +74,47 @@
             {
                 if (!string.IsNullOrEmpty(material))
                 {
+                    if (x.Material != material)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.Material), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.Material = material;
                 }
                 if (diameter.HasValue)
                 {
+                    if (x.Diameter != diameter)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.Diameter), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.Diameter = diameter.Value;
                 }
                 if (length.HasValue)
                 {
+                    if (x.Length != length)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.Length), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.Length = length.Value;
                 }
                 if (roughness.HasValue)
                 {
+                    if (x.Roughness != roughness)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.Roughness), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.Roughness = roughness.Value;
                 }
                 if (minorLoss.HasValue)
                 {
+                    if (x.MinorLoss != minorLoss)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.MinorLoss), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.MinorLoss = minorLoss.Value;
                 }
             });
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/15-pipe/SetHydroPipeListDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/15-pipe/SetHydroPipeListDlg.cs
index 678e7ab..b89562d 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/15-pipe/SetHydroPipeListDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/15-pipe/SetHydroPipeListDlg.cs
@@ -12,7 +12,6 @@
             this.hydroPipeListCtrl1.HydroClickViewEvent += HydroPipeListCtrl1_HydroClickViewEvent;
             this.hydroPipeListCtrl1.HydroChangedInfoEvent += HydroPipeListCtrl1_HydroChangedInfoEvent;
             this.hydroPipeListCtrl1.HydroChangedViewEvent += HydroPipeListCtrl1_HydroChangedViewEvent;
-            this.hydroPipeListCtrl1.ParterChangedEvent += HydroPipeListCtrl1_ParterChangedEvent;
         }
 
 
@@ -32,26 +31,32 @@
         /// 姘村姏鏀瑰彉瑙嗗浘浜嬩欢
         /// </summary>
         public event Action<List<HydroVisualViewModel>> HydroChangedViewEvent;
-        /// <summary>
-        /// 鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.hydroPipeListCtrl1.SetBindingData(hydroInfo);
+            this.hydroPipeListCtrl1.SetBindingData(hydroInfo, changeHelper, propStatusHelper);
             this.hydroPipeListCtrl1.SetBulkView();
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList)
+        public void SetBindingData
+            (
+                List<HydroVisualViewModel> allVisualViewModelList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.hydroPipeListCtrl1.SetBindingData(allVisualViewModelList);
+            this.hydroPipeListCtrl1.SetBindingData(allVisualViewModelList, changeHelper, propStatusHelper);
             this.hydroPipeListCtrl1.SetBulkView();
         }
 
@@ -79,11 +84,7 @@
             this.HydroChangedViewEvent?.Invoke(obj);
         }
 
-        // 姘村姏鏀瑰彉浜嬩欢
-        private void HydroPipeListCtrl1_ParterChangedEvent(HydroParterInfo arg1, eChangeType arg2)
-        {
-            this.ParterChangedEvent?.Invoke(arg1, arg2);
-        }
+
 
     }
 }
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/16-translation/HydroTranslationListCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/16-translation/HydroTranslationListCtrl.cs
index 7673b19..6492f41 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/16-translation/HydroTranslationListCtrl.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/16-translation/HydroTranslationListCtrl.cs
@@ -31,10 +31,6 @@
         /// 姘村姏鏀瑰彉瑙嗗浘浜嬩欢
         /// </summary>
         public event Action<List<HydroVisualViewModel>> HydroChangedViewEvent;
-        /// <summary>
-        /// 鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
 
         /// <summary>
         /// 鏄惁鎷ユ湁姘村姏鍒楄〃
@@ -44,34 +40,54 @@
             get { return _allList != null && _allList.Count > 0; }
         }
 
-        //鎵�鏈夊垪琛�
-        private List<HydroTranslationViewModel> _allList = null;
-        //鎵�鏈夌粦瀹氬垪琛�
-        private List<HydroTranslationViewModel> _allBindingList = null;
+
+        private List<HydroTranslationViewModel> _allList = null;//鎵�鏈夊垪琛�
+        private List<HydroTranslationViewModel> _allBindingList = null; //鎵�鏈夌粦瀹氬垪琛�
+        private HydroChangeHelper _changeHelper = null;//鏀瑰彉杈呭姪绫�
+        private HydroPropStatusHelper _propStatusHelper = null;//灞炴�х姸鎬佽緟鍔╃被
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            SetBindingData(hydroInfo, allCalcuResultVisualDict: null);
+            SetBindingData(hydroInfo, allCalcuResultVisualDict: null, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, List<HydroCalcuVisualResult> allCalcuResultList)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                List<HydroCalcuVisualResult> allCalcuResultList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             var allCalcuResultVisualDict = allCalcuResultList?.ToDictionary(x => x.Code);
-            SetBindingData(hydroInfo, allCalcuResultVisualDict);
+            SetBindingData(hydroInfo, allCalcuResultVisualDict, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict)
+        public void SetBindingData
+            (
+                HydroModelInfo hydroInfo,
+                Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allList = new List<HydroTranslationViewModel>();
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             if (hydroInfo != null && hydroInfo.Translations != null && hydroInfo.Translations.Count > 0)
             {
                 foreach (var visual in hydroInfo.Translations)
@@ -91,9 +107,16 @@
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList)
+        public void SetBindingData
+            (
+                List<HydroVisualViewModel> allVisualViewModelList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allList = new List<HydroTranslationViewModel>();
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             allVisualViewModelList?.ForEach(x =>
             {
                 if (x.Vmo.Catalog == Yw.Hydro.ParterCatalog.Translation)
@@ -248,7 +271,7 @@
                 return;
             }
             var dlg = new SetHydroTranslationDlg();
-            dlg.SetBindingData(_allBindingList.Select(x => x.Vmo).ToList());
+            dlg.SetBindingData(_allBindingList.Select(x => x.Vmo).ToList(), _changeHelper, _propStatusHelper);
             dlg.ReloadDataEvent += (list) =>
             {
                 if (list == null || list.Count < 1)
@@ -261,7 +284,6 @@
                 this.HydroChangedViewEvent?.Invoke(allVisualViewModelList);
                 var allVisualInfoList = allVisualViewModelList.Select(x => x.Vmo).ToList();
                 this.HydroChangedInfoEvent?.Invoke(allVisualInfoList);
-                list.ForEach(x => this.ParterChangedEvent?.Invoke(x, eChangeType.Update));
             };
             dlg.ShowDialog();
         }
@@ -278,7 +300,7 @@
             if (e.Column == this.colSet)
             {
                 var dlg = new SetHydroTranslationDlg();
-                dlg.SetBindingData(row.Vmo);
+                dlg.SetBindingData(row.Vmo, _changeHelper, _propStatusHelper);
                 dlg.ReloadDataEvent += (list) =>
                 {
                     if (list == null || list.Count < 1)
@@ -289,7 +311,6 @@
                     this.gridView1.RefreshRow(e.RowHandle);
                     this.HydroChangedViewEvent?.Invoke(new List<HydroVisualViewModel>() { row });
                     this.HydroChangedInfoEvent?.Invoke(new List<HydroVisualInfo>() { row.Vmo });
-                    this.ParterChangedEvent?.Invoke(row.Vmo, eChangeType.Update);
                 };
                 dlg.ShowDialog();
             }
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/16-translation/SetHydroTranslationDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/16-translation/SetHydroTranslationDlg.cs
index 0ee4a38..260c607 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/16-translation/SetHydroTranslationDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/16-translation/SetHydroTranslationDlg.cs
@@ -15,24 +15,38 @@
         /// </summary>
         public event Action<List<Yw.Model.HydroTranslationInfo>> ReloadDataEvent;
 
-        //鎵�鏈夐儴浠跺垪琛�
-        private List<Yw.Model.HydroTranslationInfo> _allVisualList = null;
+
+        private List<Yw.Model.HydroTranslationInfo> _allVisualList = null;//鎵�鏈夐儴浠跺垪琛�
+        private HydroChangeHelper _changeHelper = null;//鏀瑰彉杈呭姪绫�
+        private HydroPropStatusHelper _propStatusHelper = null;//灞炴�х姸鎬佽緟鍔╃被
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroTranslationInfo parter)
+        public void SetBindingData
+            (
+                Yw.Model.HydroTranslationInfo visual,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            var allParterList = parter == null ? null : new List<Yw.Model.HydroTranslationInfo>() { parter };
-            this.SetBindingData(allParterList);
+            var allVisualList = visual == null ? null : new List<Yw.Model.HydroTranslationInfo>() { visual };
+            this.SetBindingData(allVisualList, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<Yw.Model.HydroTranslationInfo> allVisualList)
+        public void SetBindingData
+            (
+                List<Yw.Model.HydroTranslationInfo> allVisualList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allVisualList = allVisualList;
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             if (_allVisualList != null && _allVisualList.Count == 1)
             {
                 var visual = _allVisualList.First();
@@ -61,22 +75,47 @@
             {
                 if (!string.IsNullOrEmpty(material))
                 {
+                    if (x.Material != material)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.Material), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.Material = material;
                 }
                 if (diameter.HasValue)
                 {
+                    if (x.Diameter != diameter)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.Diameter), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.Diameter = diameter.Value;
                 }
                 if (length.HasValue)
                 {
+                    if (x.Length != length)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.Length), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.Length = length.Value;
                 }
                 if (roughness.HasValue)
                 {
+                    if (x.Roughness != roughness)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.Roughness), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.Roughness = roughness.Value;
                 }
                 if (minorLoss.HasValue)
                 {
+                    if (x.MinorLoss != minorLoss)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.MinorLoss), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.MinorLoss = minorLoss.Value;
                 }
             });
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/16-translation/SetHydroTranslationListDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/16-translation/SetHydroTranslationListDlg.cs
index 31a822a..a139ab8 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/16-translation/SetHydroTranslationListDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/16-translation/SetHydroTranslationListDlg.cs
@@ -12,7 +12,6 @@
             this.hydroTranslationListCtrl1.HydroClickViewEvent += HydroTranslationListCtrl1_HydroClickViewEvent;
             this.hydroTranslationListCtrl1.HydroChangedInfoEvent += HydroTranslationListCtrl1_HydroChangedInfoEvent;
             this.hydroTranslationListCtrl1.HydroChangedViewEvent += HydroTranslationListCtrl1_HydroChangedViewEvent;
-            this.hydroTranslationListCtrl1.ParterChangedEvent += HydroTranslationListCtrl1_ParterChangedEvent;
         }
 
 
@@ -32,26 +31,33 @@
         /// 姘村姏鏀瑰彉瑙嗗浘浜嬩欢
         /// </summary>
         public event Action<List<HydroVisualViewModel>> HydroChangedViewEvent;
-        /// <summary>
-        /// 鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
+
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.hydroTranslationListCtrl1.SetBindingData(hydroInfo);
+            this.hydroTranslationListCtrl1.SetBindingData(hydroInfo, changeHelper, propStatusHelper);
             this.hydroTranslationListCtrl1.SetBulkView();
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList)
+        public void SetBindingData
+            (
+                List<HydroVisualViewModel> allVisualViewModelList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.hydroTranslationListCtrl1.SetBindingData(allVisualViewModelList);
+            this.hydroTranslationListCtrl1.SetBindingData(allVisualViewModelList, changeHelper, propStatusHelper);
             this.hydroTranslationListCtrl1.SetBulkView();
         }
 
@@ -79,11 +85,7 @@
             this.HydroChangedViewEvent?.Invoke(obj);
         }
 
-        // 姘村姏鏀瑰彉閮ㄤ欢浜嬩欢
-        private void HydroTranslationListCtrl1_ParterChangedEvent(HydroParterInfo arg1, eChangeType arg2)
-        {
-            this.ParterChangedEvent?.Invoke(arg1, arg2);
-        }
+
 
     }
 }
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-pump/HydroPumpListCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-pump/HydroPumpListCtrl.cs
index d3a1021..2028dd7 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-pump/HydroPumpListCtrl.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-pump/HydroPumpListCtrl.cs
@@ -31,10 +31,6 @@
         /// 姘村姏鏀瑰彉瑙嗗浘浜嬩欢
         /// </summary>
         public event Action<List<HydroVisualViewModel>> HydroChangedViewEvent;
-        /// <summary>
-        /// 鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
 
 
         /// <summary>
@@ -45,34 +41,54 @@
             get { return _allList != null && _allList.Count > 0; }
         }
 
-        //鎵�鏈夊垪琛�
-        private List<HydroPumpViewModel> _allList = null;
-        //鎵�鏈夌粦瀹氬垪琛�
-        private List<HydroPumpViewModel> _allBindingList = null;
+
+        private List<HydroPumpViewModel> _allList = null;//鎵�鏈夊垪琛�
+        private List<HydroPumpViewModel> _allBindingList = null;//鎵�鏈夌粦瀹氬垪琛�
+        private HydroChangeHelper _changeHelper = null;//鏀瑰彉杈呭姪绫�
+        private HydroPropStatusHelper _propStatusHelper = null;//灞炴�х姸鎬佽緟鍔╃被
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            SetBindingData(hydroInfo, allCalcuResultVisualDict: null);
+            SetBindingData(hydroInfo, allCalcuResultVisualDict: null, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, List<HydroCalcuVisualResult> allCalcuResultList)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                List<HydroCalcuVisualResult> allCalcuResultList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             var allCalcuResultVisualDict = allCalcuResultList?.ToDictionary(x => x.Code);
-            SetBindingData(hydroInfo, allCalcuResultVisualDict);
+            SetBindingData(hydroInfo, allCalcuResultVisualDict, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict)
+        public void SetBindingData
+            (
+                HydroModelInfo hydroInfo,
+                Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allList = new List<HydroPumpViewModel>();
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             if (hydroInfo != null && hydroInfo.Pumps != null && hydroInfo.Pumps.Count > 0)
             {
                 foreach (var visual in hydroInfo.Pumps)
@@ -92,9 +108,16 @@
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList)
+        public void SetBindingData
+            (
+                List<HydroVisualViewModel> allVisualViewModelList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allList = new List<HydroPumpViewModel>();
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             allVisualViewModelList?.ForEach(x =>
             {
                 if (x.Vmo.Catalog == Yw.Hydro.ParterCatalog.Pump)
@@ -249,7 +272,7 @@
                 return;
             }
             var dlg = new SetHydroPumpDlg();
-            dlg.SetBindingData(_allBindingList.Select(x => x.Vmo).ToList());
+            dlg.SetBindingData(_allBindingList.Select(x => x.Vmo).ToList(), _changeHelper, _propStatusHelper);
             dlg.ReloadDataEvent += (list) =>
             {
                 if (list == null || list.Count < 1)
@@ -262,7 +285,6 @@
                 this.HydroChangedViewEvent?.Invoke(allVisualViewModelList);
                 var allVisualInfoList = allVisualViewModelList.Select(x => x.Vmo).ToList();
                 this.HydroChangedInfoEvent?.Invoke(allVisualInfoList);
-                list.ForEach(x => this.ParterChangedEvent?.Invoke(x, eChangeType.Update));
             };
             dlg.ShowDialog();
         }
@@ -279,7 +301,7 @@
             if (e.Column == this.colSet)
             {
                 var dlg = new SetHydroPumpDlg();
-                dlg.SetBindingData(row.Vmo);
+                dlg.SetBindingData(row.Vmo, _changeHelper, _propStatusHelper);
                 dlg.ReloadDataEvent += (list) =>
                 {
                     if (list == null || list.Count < 1)
@@ -290,7 +312,6 @@
                     this.gridView1.RefreshRow(e.RowHandle);
                     this.HydroChangedViewEvent?.Invoke(new List<HydroVisualViewModel>() { row });
                     this.HydroChangedInfoEvent?.Invoke(new List<HydroVisualInfo>() { row.Vmo });
-                    this.ParterChangedEvent?.Invoke(row.Vmo, eChangeType.Update);
                 };
                 dlg.ShowDialog();
             }
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-pump/SetHydroPumpDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-pump/SetHydroPumpDlg.cs
index 78bf0a4..0ed56d3 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-pump/SetHydroPumpDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-pump/SetHydroPumpDlg.cs
@@ -16,24 +16,38 @@
         /// </summary>
         public event Action<List<Yw.Model.HydroPumpInfo>> ReloadDataEvent;
 
-        //鎵�鏈夐儴浠跺垪琛�
-        private List<Yw.Model.HydroPumpInfo> _allVisualList = null;
+
+        private List<Yw.Model.HydroPumpInfo> _allVisualList = null;//鎵�鏈夐儴浠跺垪琛�
+        private HydroChangeHelper _changeHelper = null;//鏀瑰彉杈呭姪绫�
+        private HydroPropStatusHelper _propStatusHelper = null;//灞炴�х姸鎬佽緟鍔╃被
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroPumpInfo visual)
+        public void SetBindingData
+            (
+                Yw.Model.HydroPumpInfo visual,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             var allVisualList = visual == null ? null : new List<Model.HydroPumpInfo>() { visual };
-            SetBindingData(allVisualList);
+            SetBindingData(allVisualList, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<Yw.Model.HydroPumpInfo> allVisualList)
+        public void SetBindingData
+            (
+                List<Yw.Model.HydroPumpInfo> allVisualList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allVisualList = allVisualList;
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             if (_allVisualList != null && _allVisualList.Count == 1)
             {
                 var visual = _allVisualList.First();
@@ -73,26 +87,57 @@
             {
                 if (!string.IsNullOrEmpty(linkStatus))
                 {
+                    if (x.LinkStatus != linkStatus)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.LinkStatus), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.LinkStatus = linkStatus;
                 }
                 if (currentHz.HasValue)
                 {
-                    x.SpeedRatio = currentHz.Value / x.RatedHz;
+                    var speedRatio = currentHz.Value / x.RatedHz;
+                    if (x.SpeedRatio != speedRatio)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.SpeedRatio), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
+                    x.SpeedRatio = speedRatio;
                 }
                 if (ratedQ.HasValue)
                 {
+                    if (x.RatedQ != ratedQ.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.RatedQ), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.RatedQ = ratedQ.Value;
                 }
                 if (ratedH.HasValue)
                 {
+                    if (x.RatedH != ratedH.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.RatedH), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.RatedH = ratedH.Value;
                 }
                 if (ratedP.HasValue)
                 {
+                    if (x.RatedP != ratedP.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.RatedP), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.RatedP = ratedP.Value;
                 }
                 if (ratedN.HasValue)
                 {
+                    if (x.RatedN != ratedN.Value)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.RatedN), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.RatedN = ratedN.Value;
                 }
             });
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-pump/SetHydroPumpListDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-pump/SetHydroPumpListDlg.cs
index 7268b7c..8cbc8ab 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-pump/SetHydroPumpListDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-pump/SetHydroPumpListDlg.cs
@@ -12,7 +12,6 @@
             this.hydroPumpListCtrl1.HydroClickViewEvent += HydroPumpListCtrl1_HydroClickViewEvent;
             this.hydroPumpListCtrl1.HydroChangedInfoEvent += HydroPumpListCtrl1_HydroChangedInfoEvent;
             this.hydroPumpListCtrl1.HydroChangedViewEvent += HydroPumpListCtrl1_HydroChangedViewEvent;
-            this.hydroPumpListCtrl1.ParterChangedEvent += HydroPumpListCtrl1_ParterChangedEvent;
         }
 
 
@@ -32,26 +31,33 @@
         /// 姘村姏鏀瑰彉瑙嗗浘浜嬩欢
         /// </summary>
         public event Action<List<HydroVisualViewModel>> HydroChangedViewEvent;
-        /// <summary>
-        /// 鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
+
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.hydroPumpListCtrl1.SetBindingData(hydroInfo);
+            this.hydroPumpListCtrl1.SetBindingData(hydroInfo, changeHelper, propStatusHelper);
             this.hydroPumpListCtrl1.SetBulkView();
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList)
+        public void SetBindingData
+            (
+                List<HydroVisualViewModel> allVisualViewModelList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.hydroPumpListCtrl1.SetBindingData(allVisualViewModelList);
+            this.hydroPumpListCtrl1.SetBindingData(allVisualViewModelList, changeHelper, propStatusHelper);
             this.hydroPumpListCtrl1.SetBulkView();
         }
 
@@ -79,11 +85,7 @@
             this.HydroChangedViewEvent?.Invoke(obj);
         }
 
-        //姘村姏鏀瑰彉浜嬩欢
-        private void HydroPumpListCtrl1_ParterChangedEvent(HydroParterInfo arg1, eChangeType arg2)
-        {
-            this.ParterChangedEvent?.Invoke(arg1, arg2);
-        }
+
 
     }
 }
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/18-valve/HydroValveListCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/18-valve/HydroValveListCtrl.cs
index 8aca587..df4680b 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/18-valve/HydroValveListCtrl.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/18-valve/HydroValveListCtrl.cs
@@ -31,10 +31,6 @@
         /// 姘村姏鏀瑰彉瑙嗗浘浜嬩欢
         /// </summary>
         public event Action<List<HydroVisualViewModel>> HydroChangedViewEvent;
-        /// <summary>
-        /// 鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
 
         /// <summary>
         /// 鏄惁鎷ユ湁姘村姏鍒楄〃
@@ -44,33 +40,54 @@
             get { return _allList != null && _allList.Count > 0; }
         }
 
-        //鎵�鏈夊垪琛�
-        private List<HydroValveViewModel> _allList = null;
-        //鎵�鏈夌粦瀹氬垪琛�
-        private List<HydroValveViewModel> _allBindingList = null;
+
+        private List<HydroValveViewModel> _allList = null; //鎵�鏈夊垪琛�
+        private List<HydroValveViewModel> _allBindingList = null;//鎵�鏈夌粦瀹氬垪琛�
+        private HydroChangeHelper _changeHelper = null;//鏀瑰彉杈呭姪绫�
+        private HydroPropStatusHelper _propStatusHelper = null;//灞炴�х姸鎬佽緟鍔╃被
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            SetBindingData(hydroInfo, allCalcuResultVisualDict: null);
+            SetBindingData(hydroInfo, allCalcuResultVisualDict: null, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, List<HydroCalcuVisualResult> allCalcuResultList)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                List<HydroCalcuVisualResult> allCalcuResultList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             var allCalcuResultVisualDict = allCalcuResultList?.ToDictionary(x => x.Code);
-            SetBindingData(hydroInfo, allCalcuResultVisualDict);
+            SetBindingData(hydroInfo, allCalcuResultVisualDict, changeHelper, propStatusHelper);
         }
 
+        /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict)
+        public void SetBindingData
+            (
+                HydroModelInfo hydroInfo,
+                Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allList = new List<HydroValveViewModel>();
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             if (hydroInfo != null && hydroInfo.Valves != null && hydroInfo.Valves.Count > 0)
             {
                 foreach (var visual in hydroInfo.Valves)
@@ -90,9 +107,16 @@
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList)
+        public void SetBindingData
+            (
+                List<HydroVisualViewModel> allVisualViewModelList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allList = new List<HydroValveViewModel>();
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             allVisualViewModelList?.ForEach(x =>
             {
                 if (x.Vmo.Catalog == Yw.Hydro.ParterCatalog.Valve)
@@ -247,7 +271,7 @@
                 return;
             }
             var dlg = new SetHydroValveDlg();
-            dlg.SetBindingData(_allBindingList.Select(x => x.Vmo).ToList());
+            dlg.SetBindingData(_allBindingList.Select(x => x.Vmo).ToList(), _changeHelper, _propStatusHelper);
             dlg.ReloadDataEvent += (list) =>
             {
                 if (list == null || list.Count < 1)
@@ -260,7 +284,6 @@
                 this.HydroChangedViewEvent?.Invoke(allVisualViewModelList);
                 var allVisualInfoList = allVisualViewModelList.Select(x => x.Vmo).ToList();
                 this.HydroChangedInfoEvent?.Invoke(allVisualInfoList);
-                list.ForEach(x => this.ParterChangedEvent?.Invoke(x, eChangeType.Update));
             };
             dlg.ShowDialog();
         }
@@ -277,7 +300,7 @@
             if (e.Column == this.colSet)
             {
                 var dlg = new SetHydroValveDlg();
-                dlg.SetBindingData(row.Vmo);
+                dlg.SetBindingData(row.Vmo, _changeHelper, _propStatusHelper);
                 dlg.ReloadDataEvent += (list) =>
                 {
                     if (list == null || list.Count < 1)
@@ -288,7 +311,6 @@
                     this.gridView1.RefreshRow(e.RowHandle);
                     this.HydroChangedViewEvent?.Invoke(new List<HydroVisualViewModel>() { row });
                     this.HydroChangedInfoEvent?.Invoke(new List<HydroVisualInfo>() { row.Vmo });
-                    this.ParterChangedEvent?.Invoke(row.Vmo, eChangeType.Update);
                 };
                 dlg.ShowDialog();
             }
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/18-valve/SetHydroValveDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/18-valve/SetHydroValveDlg.cs
index 9788b75..0a1f872 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/18-valve/SetHydroValveDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/18-valve/SetHydroValveDlg.cs
@@ -16,24 +16,38 @@
         /// </summary>
         public event Action<List<Yw.Model.HydroValveInfo>> ReloadDataEvent;
 
-        //鎵�鏈夋瀯浠跺垪琛�
-        private List<Yw.Model.HydroValveInfo> _allVisualList = null;
+
+        private List<Yw.Model.HydroValveInfo> _allVisualList = null;//鎵�鏈夋瀯浠跺垪琛�
+        private HydroChangeHelper _changeHelper = null;//鏀瑰彉杈呭姪绫�
+        private HydroPropStatusHelper _propStatusHelper = null;//灞炴�х姸鎬佽緟鍔╃被
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroValveInfo visial)
+        public void SetBindingData
+            (
+                Yw.Model.HydroValveInfo visial,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             var allVisualList = visial == null ? null : new List<Yw.Model.HydroValveInfo>() { visial };
-            this.SetBindingData(allVisualList);
+            this.SetBindingData(allVisualList, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<Yw.Model.HydroValveInfo> allVisualList)
+        public void SetBindingData
+            (
+                List<Yw.Model.HydroValveInfo> allVisualList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allVisualList = allVisualList;
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             if (_allVisualList != null && _allVisualList.Count == 1)
             {
                 var visual = _allVisualList.First();
@@ -71,18 +85,38 @@
             {
                 if (!string.IsNullOrEmpty(linkStatus))
                 {
+                    if (x.LinkStatus != linkStatus)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.LinkStatus), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.LinkStatus = linkStatus;
                 }
                 if (!string.IsNullOrEmpty(material))
                 {
+                    if (x.Material != material)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.Material), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.Material = material;
                 }
                 if (diameter.HasValue)
                 {
+                    if (x.Diameter != diameter)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.Diameter), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.Diameter = diameter.Value;
                 }
                 if (minorLoss.HasValue)
                 {
+                    if (x.MinorLoss != minorLoss)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.MinorLoss), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.MinorLoss = minorLoss.Value;
                 }
                 if (x.LinkStatus == Yw.Hydro.ValveStatus.Closed)
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/18-valve/SetHydroValveListDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/18-valve/SetHydroValveListDlg.cs
index 44ffe09..a18c588 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/18-valve/SetHydroValveListDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/18-valve/SetHydroValveListDlg.cs
@@ -12,7 +12,6 @@
             this.hydroValveListCtrl1.HydroClickViewEvent += HydroValveListCtrl1_HydroClickViewEvent;
             this.hydroValveListCtrl1.HydroChangedInfoEvent += HydroValveListCtrl1_HydroChangedInfoEvent;
             this.hydroValveListCtrl1.HydroChangedViewEvent += HydroValveListCtrl1_HydroChangedViewEvent;
-            this.hydroValveListCtrl1.ParterChangedEvent += HydroValveListCtrl1_ParterChangedEvent;
         }
 
 
@@ -32,26 +31,32 @@
         /// 姘村姏鏀瑰彉瑙嗗浘浜嬩欢
         /// </summary>
         public event Action<List<HydroVisualViewModel>> HydroChangedViewEvent;
-        /// <summary>
-        /// 鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.hydroValveListCtrl1.SetBindingData(hydroInfo);
+            this.hydroValveListCtrl1.SetBindingData(hydroInfo, changeHelper, propStatusHelper);
             this.hydroValveListCtrl1.SetBulkView();
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList)
+        public void SetBindingData
+            (
+                List<HydroVisualViewModel> allVisualViewModelList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.hydroValveListCtrl1.SetBindingData(allVisualViewModelList);
+            this.hydroValveListCtrl1.SetBindingData(allVisualViewModelList, changeHelper, propStatusHelper);
             this.hydroValveListCtrl1.SetBulkView();
         }
 
@@ -79,11 +84,7 @@
             this.HydroChangedViewEvent?.Invoke(obj);
         }
 
-        //鏋勪欢鏀瑰彉浜嬩欢
-        private void HydroValveListCtrl1_ParterChangedEvent(HydroParterInfo arg1, eChangeType arg2)
-        {
-            this.ParterChangedEvent?.Invoke(arg1, arg2);
-        }
+
 
 
     }
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/19-exchanger/HydroExchangerListCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/19-exchanger/HydroExchangerListCtrl.cs
index 5334ace..b22afc4 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/19-exchanger/HydroExchangerListCtrl.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/19-exchanger/HydroExchangerListCtrl.cs
@@ -31,10 +31,6 @@
         /// 姘村姏鏀瑰彉瑙嗗浘浜嬩欢
         /// </summary>
         public event Action<List<HydroVisualViewModel>> HydroChangedViewEvent;
-        /// <summary>
-        /// 鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
 
         /// <summary>
         /// 鏄惁鎷ユ湁姘村姏鍒楄〃
@@ -44,34 +40,54 @@
             get { return _allList != null && _allList.Count > 0; }
         }
 
-        //鎵�鏈夊垪琛�
-        private List<HydroExchangerViewModel> _allList = null;
-        //鎵�鏈夌粦瀹氬垪琛�
-        private List<HydroExchangerViewModel> _allBindingList = null;
+
+        private List<HydroExchangerViewModel> _allList = null;//鎵�鏈夊垪琛�
+        private List<HydroExchangerViewModel> _allBindingList = null; //鎵�鏈夌粦瀹氬垪琛�
+        private HydroChangeHelper _changeHelper = null;//鏀瑰彉杈呭姪绫�
+        private HydroPropStatusHelper _propStatusHelper = null;//灞炴�х姸鎬佽緟鍔╃被
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            SetBindingData(hydroInfo, allCalcuResultVisualDict: null);
+            SetBindingData(hydroInfo, allCalcuResultVisualDict: null, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, List<HydroCalcuVisualResult> allCalcuResultList)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                List<HydroCalcuVisualResult> allCalcuResultList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             var allCalcuResultVisualDict = allCalcuResultList?.ToDictionary(x => x.Code);
-            SetBindingData(hydroInfo, allCalcuResultVisualDict);
+            SetBindingData(hydroInfo, allCalcuResultVisualDict, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(HydroModelInfo hydroInfo, Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict)
+        public void SetBindingData
+            (
+                HydroModelInfo hydroInfo,
+                Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allList = new List<HydroExchangerViewModel>();
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             if (hydroInfo != null && hydroInfo.Exchangers != null && hydroInfo.Exchangers.Count > 0)
             {
                 foreach (var visual in hydroInfo.Exchangers)
@@ -91,9 +107,16 @@
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList)
+        public void SetBindingData
+            (
+                List<HydroVisualViewModel> allVisualViewModelList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allList = new List<HydroExchangerViewModel>();
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             allVisualViewModelList?.ForEach(x =>
             {
                 if (x.Vmo.Catalog == Yw.Hydro.ParterCatalog.Exchanger)
@@ -248,7 +271,7 @@
                 return;
             }
             var dlg = new SetHydroExchangerDlg();
-            dlg.SetBindingData(_allBindingList.Select(x => x.Vmo).ToList());
+            dlg.SetBindingData(_allBindingList.Select(x => x.Vmo).ToList(), _changeHelper, _propStatusHelper);
             dlg.ReloadDataEvent += (list) =>
             {
                 if (list == null || list.Count < 1)
@@ -261,7 +284,6 @@
                 this.HydroChangedViewEvent?.Invoke(allVisualViewModelList);
                 var allVisualInfoList = allVisualViewModelList.Select(x => x.Vmo).ToList();
                 this.HydroChangedInfoEvent?.Invoke(allVisualInfoList);
-                list.ForEach(x => this.ParterChangedEvent?.Invoke(x, eChangeType.Update));
             };
             dlg.ShowDialog();
         }
@@ -278,7 +300,7 @@
             if (e.Column == this.colSet)
             {
                 var dlg = new SetHydroExchangerDlg();
-                dlg.SetBindingData(row.Vmo);
+                dlg.SetBindingData(row.Vmo, _changeHelper, _propStatusHelper);
                 dlg.ReloadDataEvent += (list) =>
                 {
                     if (list == null || list.Count < 1)
@@ -289,7 +311,6 @@
                     this.gridView1.RefreshRow(e.RowHandle);
                     this.HydroChangedViewEvent?.Invoke(new List<HydroVisualViewModel>() { row });
                     this.HydroChangedInfoEvent?.Invoke(new List<HydroVisualInfo>() { row.Vmo });
-                    this.ParterChangedEvent?.Invoke(row.Vmo, eChangeType.Update);
                 };
                 dlg.ShowDialog();
             }
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/19-exchanger/SetHydroExchangerDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/19-exchanger/SetHydroExchangerDlg.cs
index 8a9fb53..be84db3 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/19-exchanger/SetHydroExchangerDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/19-exchanger/SetHydroExchangerDlg.cs
@@ -16,24 +16,38 @@
         /// </summary>
         public event Action<List<Yw.Model.HydroExchangerInfo>> ReloadDataEvent;
 
-        //鎵�鏈夐儴浠跺垪琛�
-        private List<Yw.Model.HydroExchangerInfo> _allVisualList = null;
+
+        private List<Yw.Model.HydroExchangerInfo> _allVisualList = null;//鎵�鏈夐儴浠跺垪琛�
+        private HydroChangeHelper _changeHelper = null;//鏀瑰彉杈呭姪绫�
+        private HydroPropStatusHelper _propStatusHelper = null;//灞炴�х姸鎬佽緟鍔╃被
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroExchangerInfo visual)
+        public void SetBindingData
+            (
+                Yw.Model.HydroExchangerInfo visual,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             var allVisualList = visual == null ? null : new List<Yw.Model.HydroExchangerInfo>() { visual };
-            this.SetBindingData(allVisualList);
+            this.SetBindingData(allVisualList, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<Yw.Model.HydroExchangerInfo> allVisualList)
+        public void SetBindingData
+            (
+                List<Yw.Model.HydroExchangerInfo> allVisualList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allVisualList = allVisualList;
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             if (_allVisualList != null && _allVisualList.Count == 1)
             {
                 var visual = _allVisualList.First();
@@ -71,18 +85,38 @@
             {
                 if (!string.IsNullOrEmpty(linkStatus))
                 {
+                    if (x.LinkStatus != linkStatus)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.LinkStatus), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.LinkStatus = linkStatus;
                 }
                 if (!string.IsNullOrEmpty(material))
                 {
+                    if (x.Material != material)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.Material), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.Material = material;
                 }
                 if (diameter.HasValue)
                 {
+                    if (x.Diameter != diameter)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.Diameter), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.Diameter = diameter.Value;
                 }
                 if (minorLoss.HasValue)
                 {
+                    if (x.MinorLoss != minorLoss)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.MinorLoss), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.MinorLoss = minorLoss.Value;
                 }
             });
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/19-exchanger/SetHydroExchangerListDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/19-exchanger/SetHydroExchangerListDlg.cs
index 2fe6aca..969e027 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/19-exchanger/SetHydroExchangerListDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/19-exchanger/SetHydroExchangerListDlg.cs
@@ -12,7 +12,6 @@
             this.hydroExchangerListCtrl1.HydroClickViewEvent += HydroExchangerListCtrl1_HydroClickViewEvent;
             this.hydroExchangerListCtrl1.HydroChangedInfoEvent += HydroExchangerListCtrl1_HydroChangedInfoEvent;
             this.hydroExchangerListCtrl1.HydroChangedViewEvent += HydroExchangerListCtrl1_HydroChangedViewEvent;
-            this.hydroExchangerListCtrl1.ParterChangedEvent += HydroExchangerListCtrl1_ParterChangedEvent;
         }
 
 
@@ -32,26 +31,33 @@
         /// 姘村姏鏀瑰彉瑙嗗浘浜嬩欢
         /// </summary>
         public event Action<List<HydroVisualViewModel>> HydroChangedViewEvent;
-        /// <summary>
-        /// 鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
+
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.hydroExchangerListCtrl1.SetBindingData(hydroInfo);
+            this.hydroExchangerListCtrl1.SetBindingData(hydroInfo, changeHelper, propStatusHelper);
             this.hydroExchangerListCtrl1.SetBulkView();
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList)
+        public void SetBindingData
+            (
+                List<HydroVisualViewModel> allVisualViewModelList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.hydroExchangerListCtrl1.SetBindingData(allVisualViewModelList);
+            this.hydroExchangerListCtrl1.SetBindingData(allVisualViewModelList, changeHelper, propStatusHelper);
             this.hydroExchangerListCtrl1.SetBulkView();
         }
 
@@ -79,11 +85,7 @@
             this.HydroChangedViewEvent?.Invoke(obj);
         }
 
-        //鏋勪欢鏀瑰彉浜嬩欢
-        private void HydroExchangerListCtrl1_ParterChangedEvent(HydroParterInfo arg1, eChangeType arg2)
-        {
-            this.ParterChangedEvent?.Invoke(arg1, arg2);
-        }
+
 
 
 
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/20-compressor/HydroCompressorListCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/20-compressor/HydroCompressorListCtrl.cs
index c9203e2..f7c13e9 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/20-compressor/HydroCompressorListCtrl.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/20-compressor/HydroCompressorListCtrl.cs
@@ -31,10 +31,7 @@
         /// 姘村姏鏀瑰彉瑙嗗浘浜嬩欢
         /// </summary>
         public event Action<List<HydroVisualViewModel>> HydroChangedViewEvent;
-        /// <summary>
-        /// 鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
+
 
         /// <summary>
         /// 鏄惁鎷ユ湁姘村姏鍒楄〃
@@ -44,35 +41,55 @@
             get { return _allList != null && _allList.Count > 0; }
         }
 
-        //鎵�鏈夊垪琛�
-        private List<HydroCompressorViewModel> _allList = null;
-        //鎵�鏈夌粦瀹氬垪琛�
-        private List<HydroCompressorViewModel> _allBindingList = null;
+
+        private List<HydroCompressorViewModel> _allList = null;//鎵�鏈夊垪琛�
+        private List<HydroCompressorViewModel> _allBindingList = null; //鎵�鏈夌粦瀹氬垪琛�
+        private HydroChangeHelper _changeHelper = null;//鏀瑰彉杈呭姪绫�
+        private HydroPropStatusHelper _propStatusHelper = null;//灞炴�х姸鎬佽緟鍔╃被
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            SetBindingData(hydroInfo, allCalcuResultVisualDict: null);
+            SetBindingData(hydroInfo, allCalcuResultVisualDict: null, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, List<HydroCalcuVisualResult> allCalcuResultList)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                List<HydroCalcuVisualResult> allCalcuResultList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             var allCalcuResultVisualDict = allCalcuResultList?.ToDictionary(x => x.Code);
-            SetBindingData(hydroInfo, allCalcuResultVisualDict);
+            SetBindingData(hydroInfo, allCalcuResultVisualDict, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(HydroModelInfo hydroInfo, Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict)
+        public void SetBindingData
+            (
+                HydroModelInfo hydroInfo,
+                Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allList = new List<HydroCompressorViewModel>();
-            if (hydroInfo != null && hydroInfo.Exchangers != null && hydroInfo.Exchangers.Count > 0)
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
+            if (hydroInfo != null && hydroInfo.Compressors != null && hydroInfo.Compressors.Count > 0)
             {
                 foreach (var visual in hydroInfo.Compressors)
                 {
@@ -91,9 +108,16 @@
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList)
+        public void SetBindingData
+            (
+                List<HydroVisualViewModel> allVisualViewModelList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allList = new List<HydroCompressorViewModel>();
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             allVisualViewModelList?.ForEach(x =>
             {
                 if (x.Vmo.Catalog == Yw.Hydro.ParterCatalog.Compressor)
@@ -248,7 +272,7 @@
                 return;
             }
             var dlg = new SetHydroCompressorDlg();
-            dlg.SetBindingData(_allBindingList.Select(x => x.Vmo).ToList());
+            dlg.SetBindingData(_allBindingList.Select(x => x.Vmo).ToList(), _changeHelper, _propStatusHelper);
             dlg.ReloadDataEvent += (list) =>
             {
                 if (list == null || list.Count < 1)
@@ -261,7 +285,6 @@
                 this.HydroChangedViewEvent?.Invoke(allVisualViewModelList);
                 var allVisualInfoList = allVisualViewModelList.Select(x => x.Vmo).ToList();
                 this.HydroChangedInfoEvent?.Invoke(allVisualInfoList);
-                list.ForEach(x => this.ParterChangedEvent?.Invoke(x, eChangeType.Update));
             };
             dlg.ShowDialog();
         }
@@ -278,7 +301,7 @@
             if (e.Column == this.colSet)
             {
                 var dlg = new SetHydroCompressorDlg();
-                dlg.SetBindingData(row.Vmo);
+                dlg.SetBindingData(row.Vmo, _changeHelper, _propStatusHelper);
                 dlg.ReloadDataEvent += (list) =>
                 {
                     if (list == null || list.Count < 1)
@@ -289,7 +312,6 @@
                     this.gridView1.RefreshRow(e.RowHandle);
                     this.HydroChangedViewEvent?.Invoke(new List<HydroVisualViewModel>() { row });
                     this.HydroChangedInfoEvent?.Invoke(new List<HydroVisualInfo>() { row.Vmo });
-                    this.ParterChangedEvent?.Invoke(row.Vmo, eChangeType.Update);
                 };
                 dlg.ShowDialog();
             }
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/20-compressor/SetHydroCompressorDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/20-compressor/SetHydroCompressorDlg.cs
index 25b966f..b0bf9fb 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/20-compressor/SetHydroCompressorDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/20-compressor/SetHydroCompressorDlg.cs
@@ -16,24 +16,38 @@
         /// </summary>
         public event Action<List<Yw.Model.HydroCompressorInfo>> ReloadDataEvent;
 
-        //鎵�鏈夐儴浠跺垪琛�
-        private List<Yw.Model.HydroCompressorInfo> _allVisualList = null;
+
+        private List<Yw.Model.HydroCompressorInfo> _allVisualList = null;//鎵�鏈夐儴浠跺垪琛�
+        private HydroChangeHelper _changeHelper = null;//鏀瑰彉杈呭姪绫�
+        private HydroPropStatusHelper _propStatusHelper = null;//灞炴�х姸鎬佽緟鍔╃被
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroCompressorInfo visual)
+        public void SetBindingData
+            (
+                Yw.Model.HydroCompressorInfo visual,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             var allVisualList = visual == null ? null : new List<Yw.Model.HydroCompressorInfo>() { visual };
-            this.SetBindingData(allVisualList);
+            this.SetBindingData(allVisualList, changeHelper, propStatusHelper);
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<Yw.Model.HydroCompressorInfo> allVisualList)
+        public void SetBindingData
+            (
+                List<Yw.Model.HydroCompressorInfo> allVisualList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
             _allVisualList = allVisualList;
+            _changeHelper = changeHelper;
+            _propStatusHelper = propStatusHelper;
             if (_allVisualList != null && _allVisualList.Count == 1)
             {
                 var visual = _allVisualList.First();
@@ -71,18 +85,38 @@
             {
                 if (!string.IsNullOrEmpty(linkStatus))
                 {
+                    if (x.LinkStatus != linkStatus)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.LinkStatus), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.LinkStatus = linkStatus;
                 }
                 if (!string.IsNullOrEmpty(material))
                 {
+                    if (x.Material != material)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.Material), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.Material = material;
                 }
                 if (diameter.HasValue)
                 {
+                    if (x.Diameter != diameter)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.Diameter), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.Diameter = diameter.Value;
                 }
                 if (minorLoss.HasValue)
                 {
+                    if (x.MinorLoss != minorLoss)
+                    {
+                        _changeHelper.Append(x, eChangeType.Update);
+                        _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.MinorLoss), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
+                    }
                     x.MinorLoss = minorLoss.Value;
                 }
             });
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/20-compressor/SetHydroCompressorListDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/20-compressor/SetHydroCompressorListDlg.cs
index 7423209..ca5ea4e 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/20-compressor/SetHydroCompressorListDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/20-compressor/SetHydroCompressorListDlg.cs
@@ -12,7 +12,6 @@
             this.hydroCompressorListCtrl1.HydroClickViewEvent += HydroCompressorListCtrl1_HydroClickViewEvent;
             this.hydroCompressorListCtrl1.HydroChangedInfoEvent += HydroCompressorListCtrl1_HydroChangedInfoEvent;
             this.hydroCompressorListCtrl1.HydroChangedViewEvent += HydroCompressorListCtrl1_HydroChangedViewEvent;
-            this.hydroCompressorListCtrl1.ParterChangedEvent += HydroCompressorListCtrl1_ParterChangedEvent;
         }
 
         /// <summary>
@@ -31,26 +30,33 @@
         /// 姘村姏鏀瑰彉瑙嗗浘浜嬩欢
         /// </summary>
         public event Action<List<HydroVisualViewModel>> HydroChangedViewEvent;
-        /// <summary>
-        /// 鏋勪欢鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<HydroParterInfo, eChangeType> ParterChangedEvent;
+
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.hydroCompressorListCtrl1.SetBindingData(hydroInfo);
+            this.hydroCompressorListCtrl1.SetBindingData(hydroInfo, changeHelper, propStatusHelper);
             this.hydroCompressorListCtrl1.SetBulkView();
         }
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData(List<HydroVisualViewModel> allVisualViewModelList)
+        public void SetBindingData
+            (
+                List<HydroVisualViewModel> allVisualViewModelList,
+                HydroChangeHelper changeHelper = null,
+                HydroPropStatusHelper propStatusHelper = null
+            )
         {
-            this.hydroCompressorListCtrl1.SetBindingData(allVisualViewModelList);
+            this.hydroCompressorListCtrl1.SetBindingData(allVisualViewModelList, changeHelper, propStatusHelper);
             this.hydroCompressorListCtrl1.SetBulkView();
         }
 
@@ -78,11 +84,7 @@
             this.HydroChangedViewEvent?.Invoke(obj);
         }
 
-        //鏋勪欢鏀瑰彉浜嬩欢
-        private void HydroCompressorListCtrl1_ParterChangedEvent(HydroParterInfo arg1, eChangeType arg2)
-        {
-            this.ParterChangedEvent?.Invoke(arg1, arg2);
-        }
+
 
 
 
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 149861d..d34ff83 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj
@@ -53,7 +53,7 @@
 	<ItemGroup>
 		<PackageReference Include="DevExpress.Win.Design" Version="23.2.4" />
 		<PackageReference Include="Yw.BLL.Basic.Core" Version="3.3.0" />
-		<PackageReference Include="Yw.BLL.Hydro.Core" Version="3.8.0" />
+		<PackageReference Include="Yw.BLL.Hydro.Core" Version="3.8.1" />
 		<PackageReference Include="Yw.Pump.Core" Version="3.2.1" />
 	</ItemGroup>
 

--
Gitblit v1.9.3