From f460fd2c628ab56db7450d70f3b7ad4b3524e6c8 Mon Sep 17 00:00:00 2001
From: lixiaojun <1287241240@qq.com>
Date: 星期一, 02 十二月 2024 14:33:48 +0800
Subject: [PATCH] 水泵界面控件

---
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-valve/SetHydroValveDlg.cs                                            |   11 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/05-state/HydroPumpListStateEditCtrl.cs                                    |   54 +
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-list/HydroPumpListStateViewCtrl.Designer.cs                            |   70 -
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/03-query/HydroPumpQueryPointListGridCtrl.resx                             |   32 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/DataSources/Yw.WinFrmUI.HydroPumpQueryPointViewModel.datasource        |   10 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroNodeLossViewModel.cs                                        |    6 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/DataSources/Yw.WinFrmUI.HydroPumpDesignPointViewModel.datasource       |   10 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/09-energy/SimulationSingleWorkingEnergyCtrl.Designer.cs         |   16 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/01-parallel/SimulationPumpParallelCtrl.resx             |   68 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/HydroPumpListExtendGridCtrl.Designer.cs                         |  160 +++
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/05-state/HydroPumpListStateEditCtrl.resx                                  |   32 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/01-parallel/SimulationPumpParallelCtrl.Designer.cs      |  384 ++++++++
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/03-query/HydroPumpQueryPointViewModel.cs                                  |   45 +
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/HydroPumpListExtendGridCtrl.resx                                |   32 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/09-energy/SimulationSingleWorkingEnergyCtrl.cs                  |    4 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/HStation.WinFrmUI.Xhs.Core.csproj.user                                        |    3 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/03-helper/HydroValveStatusHelper.cs                                       |   43 +
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/01-parallel/SimulationPumpParallelDlg.resx              |   33 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs                   |   14 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/02-feat/SimulationPumpFeatDlg.resx                      |   33 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/04-design/HydroPumpDesignPointViewModel.cs                                |   45 +
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj.user                                                |   11 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/06-converter/HydroValveStatusConverter.cs                            |   10 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-valve/SetHydroValveDlg.Designer.cs                                   |   13 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/05-state/HydroPumpListItemStateViewModel.cs                               |   84 +
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-list/HydroPumpListStateViewCtrl.resx                                   |   32 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-list/HydroPumpListViewItemStateViewModel.cs                            |   14 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/05-state/HydroPumpListStateEditCtrl.Designer.cs                           |   79 -
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/DataSources/Yw.WinFrmUI.HydroPumpListItemStateViewModel.datasource     |   10 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/00-core/HydroPumpCurveColorHelper.cs                                      |   35 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/04-link/00-core/HydroLinkViewModel.cs                                |    1 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/DataSources/Yw.WinFrmUI.HydroPumpListViewItemStateViewModel.datasource |   10 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/01-parallel/SimulationPumpParallelCtrl.cs               |   67 +
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/03-query/HydroPumpQueryPointListGridCtrl.Designer.cs                      |  132 +++
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-valve/HydroValveListCtrl.resx                                        |   92 --
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-valve/SetHydroValveDlg.resx                                          |    3 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/04-design/HydroPumpDesignPointListGridCtrl.resx                           |   32 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/06-converter/HydroElbowTypeConverter.cs                              |   38 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/HydroPumpListExtendGridCtrl.cs                                  |   75 +
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/DataSources/Yw.WinFrmUI.HydroPumpListItemExtendViewModel.datasource    |   10 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/02-feat/SimulationPumpFeatDlg.Designer.cs               |   94 ++
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/02-feat/SimulationPumpFeatDlg.cs                        |   18 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/04-design/HydroPumpDesignPointListGridCtrl.cs                             |   37 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/HStation.WinFrmUI.Xhs.Core.csproj                                             |    6 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/01-parallel/SimulationPumpParallelDlg.Designer.cs       |   94 ++
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/01-parallel/SimulationPumpParallelSaveItemViewModel.cs  |   23 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-list/HydroPumpListStateViewCtrl.cs                                     |   53 +
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj                                                     |    3 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/01-parallel/SimulationPumpParallelDlg.cs                |   15 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/HydroPumpListItemExtendViewModel.cs                             |   69 +
 /dev/null                                                                                                         |   10 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/04-design/HydroPumpDesignPointListGridCtrl.Designer.cs                    |  132 +++
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-valve/HydroValveListCtrl.Designer.cs                                 |   58 -
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-valve/HydroValveListCtrl.cs                                          |   32 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/04-link/03-valve/HydroValveViewModel.cs                              |   27 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/03-query/HydroPumpQueryPointListGridCtrl.cs                               |   36 
 56 files changed, 1,997 insertions(+), 563 deletions(-)

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 2962264..9231ef3 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
@@ -2022,7 +2022,9 @@
         //鎬ц兘鏇茬嚎
         private void barBtnPumpCurve_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
         {
-
+            var dlg = new SimulationPumpFeatDlg();
+            dlg.SetBindingData(_hydroInfo);
+            dlg.ShowDialog();
         }
 
         #region 骞惰仈妯℃嫙
@@ -2101,7 +2103,9 @@
         //骞惰仈妯℃嫙
         private void barBtnPumpParallel_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
         {
-            PumpParallel();
+            var dlg = new SimulationPumpParallelDlg();
+            dlg.ShowDialog();
+            // PumpParallel();
         }
 
         #endregion
@@ -2180,6 +2184,12 @@
 
                 #endregion
 
+                #region 褰撳墠鏋勪欢
+
+                SelectVisual(_visual, eVisualSource.Calcu);
+
+                #endregion
+
                 #region 鏋勪欢鏄庣粏
 
                 UpdateVisualListCtrl();
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/09-energy/SimulationSingleWorkingEnergyCtrl.Designer.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/09-energy/SimulationSingleWorkingEnergyCtrl.Designer.cs
index afc9477..7b60c64 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/09-energy/SimulationSingleWorkingEnergyCtrl.Designer.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/09-energy/SimulationSingleWorkingEnergyCtrl.Designer.cs
@@ -35,7 +35,7 @@
             txtP = new TextEdit();
             txtH = new TextEdit();
             txtQ = new TextEdit();
-            hydroPumpRunStatusListCtrl1 = new HydroPumpRunListViewCtrl();
+            hydroPumpListStateViewCtrl1 = new HydroPumpListStateViewCtrl();
             hydroEnergyTotalViewCtrl1 = new HydroEnergyTotalViewCtrl();
             Root = new DevExpress.XtraLayout.LayoutControlGroup();
             splitterItem1 = new DevExpress.XtraLayout.SplitterItem();
@@ -80,7 +80,7 @@
             layoutControl1.Controls.Add(txtP);
             layoutControl1.Controls.Add(txtH);
             layoutControl1.Controls.Add(txtQ);
-            layoutControl1.Controls.Add(hydroPumpRunStatusListCtrl1);
+            layoutControl1.Controls.Add(hydroPumpListStateViewCtrl1);
             layoutControl1.Controls.Add(hydroEnergyTotalViewCtrl1);
             layoutControl1.Dock = DockStyle.Fill;
             layoutControl1.Location = new Point(0, 0);
@@ -152,10 +152,10 @@
             // 
             // hydroPumpRunStatusListCtrl1
             // 
-            hydroPumpRunStatusListCtrl1.Location = new Point(5, 148);
-            hydroPumpRunStatusListCtrl1.Name = "hydroPumpRunStatusListCtrl1";
-            hydroPumpRunStatusListCtrl1.Size = new Size(210, 450);
-            hydroPumpRunStatusListCtrl1.TabIndex = 6;
+            hydroPumpListStateViewCtrl1.Location = new Point(5, 148);
+            hydroPumpListStateViewCtrl1.Name = "hydroPumpRunStatusListCtrl1";
+            hydroPumpListStateViewCtrl1.Size = new Size(210, 450);
+            hydroPumpListStateViewCtrl1.TabIndex = 6;
             // 
             // hydroEnergyTotalViewCtrl1
             // 
@@ -194,7 +194,7 @@
             // 
             // layoutControlItem2
             // 
-            layoutControlItem2.Control = hydroPumpRunStatusListCtrl1;
+            layoutControlItem2.Control = hydroPumpListStateViewCtrl1;
             layoutControlItem2.Location = new Point(0, 0);
             layoutControlItem2.Name = "layoutControlItem2";
             layoutControlItem2.Size = new Size(214, 454);
@@ -338,7 +338,7 @@
         private TextEdit txtP;
         private TextEdit txtH;
         private TextEdit txtQ;
-        private HydroPumpRunListViewCtrl hydroPumpRunStatusListCtrl1;
+        private HydroPumpListStateViewCtrl hydroPumpListStateViewCtrl1;
         private HydroEnergyTotalViewCtrl hydroEnergyTotalViewCtrl1;
         private DevExpress.XtraLayout.SplitterItem splitterItem1;
         private DevExpress.XtraLayout.LayoutControlGroup layoutControlGroup2;
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/09-energy/SimulationSingleWorkingEnergyCtrl.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/09-energy/SimulationSingleWorkingEnergyCtrl.cs
index 834e2b2..0f83143 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/09-energy/SimulationSingleWorkingEnergyCtrl.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/09-energy/SimulationSingleWorkingEnergyCtrl.cs
@@ -19,7 +19,7 @@
         {
             InitializeComponent();
             this.layoutControl1.SetupLayoutControl();
-            this.hydroPumpRunStatusListCtrl1.SelectedChangedEvent += HydroPumpRunStatusListCtrl1_SelectedChangedEvent;
+            this.hydroPumpListStateViewCtrl1.SelectedChangedEvent += HydroPumpRunStatusListCtrl1_SelectedChangedEvent;
         }
 
         private Yw.Model.HydroModelInfo _hydroInfo = null;//姘村姏淇℃伅
@@ -62,7 +62,7 @@
             _hydroInfo = hydroInfo;
             _allCalcuResultVisualDict = allCalcuResultVisualDict;
             this.hydroEnergyTotalViewCtrl1.SetBindingData(hydroInfo, allCalcuResultVisualDict);
-            this.hydroPumpRunStatusListCtrl1.SetBindingData(hydroInfo);
+            this.hydroPumpListStateViewCtrl1.SetBindingData(hydroInfo);
         }
 
         //娉甸�夋嫨鏀瑰彉
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/01-parallel/SimulationPumpParallelCtrl.Designer.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/01-parallel/SimulationPumpParallelCtrl.Designer.cs
new file mode 100644
index 0000000..f6a75eb
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/01-parallel/SimulationPumpParallelCtrl.Designer.cs
@@ -0,0 +1,384 @@
+锘縩amespace HStation.WinFrmUI
+{
+    partial class SimulationPumpParallelCtrl
+    {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            ComponentResourceManager resources = new ComponentResourceManager(typeof(SimulationPumpParallelCtrl));
+            pictureEdit1 = new PictureEdit();
+            sidePanel1 = new SidePanel();
+            layoutControl1 = new DevExpress.XtraLayout.LayoutControl();
+            hydroPumpQueryPointListGridCtrl1 = new HydroPumpQueryPointListGridCtrl();
+            hydroPumpDesignPointListGridCtrl1 = new HydroPumpDesignPointListGridCtrl();
+            hydroPumpListExtendGridCtrl1 = new HydroPumpListExtendGridCtrl();
+            btnSave = new SimpleButton();
+            btnDesign = new SimpleButton();
+            txtDesignH = new TextEdit();
+            txtDesignQ = new TextEdit();
+            Root = new DevExpress.XtraLayout.LayoutControlGroup();
+            layoutControlGroup1 = new DevExpress.XtraLayout.LayoutControlGroup();
+            layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem3 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlGroup2 = new DevExpress.XtraLayout.LayoutControlGroup();
+            layoutControlItem4 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlGroup3 = new DevExpress.XtraLayout.LayoutControlGroup();
+            layoutControlItem5 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlGroup4 = new DevExpress.XtraLayout.LayoutControlGroup();
+            layoutControlItem6 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlGroup5 = new DevExpress.XtraLayout.LayoutControlGroup();
+            layoutControlItem7 = new DevExpress.XtraLayout.LayoutControlItem();
+            ((ISupportInitialize)pictureEdit1.Properties).BeginInit();
+            sidePanel1.SuspendLayout();
+            ((ISupportInitialize)layoutControl1).BeginInit();
+            layoutControl1.SuspendLayout();
+            ((ISupportInitialize)txtDesignH.Properties).BeginInit();
+            ((ISupportInitialize)txtDesignQ.Properties).BeginInit();
+            ((ISupportInitialize)Root).BeginInit();
+            ((ISupportInitialize)layoutControlGroup1).BeginInit();
+            ((ISupportInitialize)layoutControlItem1).BeginInit();
+            ((ISupportInitialize)layoutControlItem2).BeginInit();
+            ((ISupportInitialize)layoutControlItem3).BeginInit();
+            ((ISupportInitialize)layoutControlGroup2).BeginInit();
+            ((ISupportInitialize)layoutControlItem4).BeginInit();
+            ((ISupportInitialize)layoutControlGroup3).BeginInit();
+            ((ISupportInitialize)layoutControlItem5).BeginInit();
+            ((ISupportInitialize)layoutControlGroup4).BeginInit();
+            ((ISupportInitialize)layoutControlItem6).BeginInit();
+            ((ISupportInitialize)layoutControlGroup5).BeginInit();
+            ((ISupportInitialize)layoutControlItem7).BeginInit();
+            SuspendLayout();
+            // 
+            // pictureEdit1
+            // 
+            pictureEdit1.Dock = DockStyle.Fill;
+            pictureEdit1.Location = new Point(0, 0);
+            pictureEdit1.Name = "pictureEdit1";
+            pictureEdit1.Properties.ShowCameraMenuItem = CameraMenuItemVisibility.Auto;
+            pictureEdit1.Size = new Size(640, 663);
+            pictureEdit1.TabIndex = 0;
+            // 
+            // sidePanel1
+            // 
+            sidePanel1.Controls.Add(layoutControl1);
+            sidePanel1.Dock = DockStyle.Right;
+            sidePanel1.Location = new Point(640, 0);
+            sidePanel1.Name = "sidePanel1";
+            sidePanel1.Size = new Size(465, 663);
+            sidePanel1.TabIndex = 1;
+            sidePanel1.Text = "sidePanel1";
+            // 
+            // layoutControl1
+            // 
+            layoutControl1.Controls.Add(hydroPumpQueryPointListGridCtrl1);
+            layoutControl1.Controls.Add(hydroPumpDesignPointListGridCtrl1);
+            layoutControl1.Controls.Add(hydroPumpListExtendGridCtrl1);
+            layoutControl1.Controls.Add(btnSave);
+            layoutControl1.Controls.Add(btnDesign);
+            layoutControl1.Controls.Add(txtDesignH);
+            layoutControl1.Controls.Add(txtDesignQ);
+            layoutControl1.Dock = DockStyle.Fill;
+            layoutControl1.Location = new Point(1, 0);
+            layoutControl1.Name = "layoutControl1";
+            layoutControl1.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = new Rectangle(1270, 374, 650, 400);
+            layoutControl1.Root = Root;
+            layoutControl1.Size = new Size(464, 663);
+            layoutControl1.TabIndex = 0;
+            layoutControl1.Text = "layoutControl1";
+            // 
+            // hydroPumpQueryPointListGridCtrl1
+            // 
+            hydroPumpQueryPointListGridCtrl1.Location = new Point(0, 510);
+            hydroPumpQueryPointListGridCtrl1.Name = "hydroPumpQueryPointListGridCtrl1";
+            hydroPumpQueryPointListGridCtrl1.Size = new Size(464, 153);
+            hydroPumpQueryPointListGridCtrl1.TabIndex = 7;
+            // 
+            // hydroPumpDesignPointListGridCtrl1
+            // 
+            hydroPumpDesignPointListGridCtrl1.Location = new Point(0, 336);
+            hydroPumpDesignPointListGridCtrl1.Name = "hydroPumpDesignPointListGridCtrl1";
+            hydroPumpDesignPointListGridCtrl1.Size = new Size(464, 152);
+            hydroPumpDesignPointListGridCtrl1.TabIndex = 6;
+            // 
+            // hydroPumpListExtendGridCtrl1
+            // 
+            hydroPumpListExtendGridCtrl1.Location = new Point(0, 90);
+            hydroPumpListExtendGridCtrl1.Name = "hydroPumpListExtendGridCtrl1";
+            hydroPumpListExtendGridCtrl1.Size = new Size(464, 224);
+            hydroPumpListExtendGridCtrl1.TabIndex = 5;
+            // 
+            // btnSave
+            // 
+            btnSave.Appearance.BackColor = DevExpress.LookAndFeel.DXSkinColors.FillColors.Primary;
+            btnSave.Appearance.ForeColor = Color.White;
+            btnSave.Appearance.Options.UseBackColor = true;
+            btnSave.Appearance.Options.UseForeColor = true;
+            btnSave.ImageOptions.AllowGlyphSkinning = DevExpress.Utils.DefaultBoolean.True;
+            btnSave.ImageOptions.ImageToTextAlignment = ImageAlignToText.LeftCenter;
+            btnSave.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("btnSave.ImageOptions.SvgImage");
+            btnSave.ImageOptions.SvgImageSize = new Size(16, 16);
+            btnSave.Location = new Point(356, 34);
+            btnSave.Name = "btnSave";
+            btnSave.Size = new Size(96, 22);
+            btnSave.StyleController = layoutControl1;
+            btnSave.TabIndex = 4;
+            btnSave.Text = "淇濆瓨";
+            btnSave.Click += btnSave_Click;
+            // 
+            // btnDesign
+            // 
+            btnDesign.ImageOptions.AllowGlyphSkinning = DevExpress.Utils.DefaultBoolean.True;
+            btnDesign.ImageOptions.ImageToTextAlignment = ImageAlignToText.LeftCenter;
+            btnDesign.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("btnDesign.ImageOptions.SvgImage");
+            btnDesign.ImageOptions.SvgImageSize = new Size(16, 16);
+            btnDesign.Location = new Point(236, 34);
+            btnDesign.Name = "btnDesign";
+            btnDesign.Size = new Size(96, 22);
+            btnDesign.StyleController = layoutControl1;
+            btnDesign.TabIndex = 3;
+            btnDesign.Text = "璁剧疆";
+            // 
+            // txtDesignH
+            // 
+            txtDesignH.Location = new Point(164, 35);
+            txtDesignH.Name = "txtDesignH";
+            txtDesignH.Properties.AllowNullInput = DevExpress.Utils.DefaultBoolean.True;
+            txtDesignH.Properties.EditFormat.FormatType = DevExpress.Utils.FormatType.Numeric;
+            txtDesignH.Properties.MaskSettings.Set("MaskManagerType", typeof(DevExpress.Data.Mask.NumericMaskManager));
+            txtDesignH.Properties.NullValuePrompt = "m";
+            txtDesignH.Size = new Size(68, 20);
+            txtDesignH.StyleController = layoutControl1;
+            txtDesignH.TabIndex = 2;
+            // 
+            // txtDesignQ
+            // 
+            txtDesignQ.Location = new Point(52, 35);
+            txtDesignQ.Name = "txtDesignQ";
+            txtDesignQ.Properties.AllowNullInput = DevExpress.Utils.DefaultBoolean.True;
+            txtDesignQ.Properties.EditFormat.FormatType = DevExpress.Utils.FormatType.Numeric;
+            txtDesignQ.Properties.MaskSettings.Set("MaskManagerType", typeof(DevExpress.Data.Mask.NumericMaskManager));
+            txtDesignQ.Properties.NullValuePrompt = "m鲁/h";
+            txtDesignQ.Size = new Size(68, 20);
+            txtDesignQ.StyleController = layoutControl1;
+            txtDesignQ.TabIndex = 0;
+            // 
+            // Root
+            // 
+            Root.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True;
+            Root.GroupBordersVisible = false;
+            Root.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlGroup1, layoutControlGroup2, layoutControlGroup3, layoutControlGroup4, layoutControlGroup5 });
+            Root.Name = "Root";
+            Root.Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
+            Root.Size = new Size(464, 663);
+            Root.TextVisible = false;
+            // 
+            // layoutControlGroup1
+            // 
+            layoutControlGroup1.GroupStyle = DevExpress.Utils.GroupStyle.Title;
+            layoutControlGroup1.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlItem1, layoutControlItem2, layoutControlItem3 });
+            layoutControlGroup1.Location = new Point(0, 0);
+            layoutControlGroup1.Name = "layoutControlGroup1";
+            layoutControlGroup1.Size = new Size(344, 68);
+            layoutControlGroup1.Spacing = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
+            layoutControlGroup1.Text = "璁捐鐐�";
+            // 
+            // layoutControlItem1
+            // 
+            layoutControlItem1.ContentVertAlignment = DevExpress.Utils.VertAlignment.Center;
+            layoutControlItem1.Control = txtDesignQ;
+            layoutControlItem1.Location = new Point(0, 0);
+            layoutControlItem1.Name = "layoutControlItem1";
+            layoutControlItem1.Size = new Size(112, 26);
+            layoutControlItem1.Text = "娴侀噺:";
+            layoutControlItem1.TextSize = new Size(28, 14);
+            // 
+            // layoutControlItem2
+            // 
+            layoutControlItem2.ContentVertAlignment = DevExpress.Utils.VertAlignment.Center;
+            layoutControlItem2.Control = txtDesignH;
+            layoutControlItem2.Location = new Point(112, 0);
+            layoutControlItem2.Name = "layoutControlItem2";
+            layoutControlItem2.Size = new Size(112, 26);
+            layoutControlItem2.Text = "鎵▼:";
+            layoutControlItem2.TextSize = new Size(28, 14);
+            // 
+            // layoutControlItem3
+            // 
+            layoutControlItem3.ContentVertAlignment = DevExpress.Utils.VertAlignment.Center;
+            layoutControlItem3.Control = btnDesign;
+            layoutControlItem3.Location = new Point(224, 0);
+            layoutControlItem3.MaxSize = new Size(100, 26);
+            layoutControlItem3.MinSize = new Size(100, 26);
+            layoutControlItem3.Name = "layoutControlItem3";
+            layoutControlItem3.Size = new Size(100, 26);
+            layoutControlItem3.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
+            layoutControlItem3.TextSize = new Size(0, 0);
+            layoutControlItem3.TextVisible = false;
+            // 
+            // layoutControlGroup2
+            // 
+            layoutControlGroup2.GroupStyle = DevExpress.Utils.GroupStyle.Title;
+            layoutControlGroup2.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlItem4 });
+            layoutControlGroup2.Location = new Point(344, 0);
+            layoutControlGroup2.Name = "layoutControlGroup2";
+            layoutControlGroup2.Size = new Size(120, 68);
+            layoutControlGroup2.Spacing = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
+            layoutControlGroup2.Text = "鎿嶄綔";
+            // 
+            // layoutControlItem4
+            // 
+            layoutControlItem4.ContentVertAlignment = DevExpress.Utils.VertAlignment.Center;
+            layoutControlItem4.Control = btnSave;
+            layoutControlItem4.Location = new Point(0, 0);
+            layoutControlItem4.MaxSize = new Size(100, 26);
+            layoutControlItem4.MinSize = new Size(100, 26);
+            layoutControlItem4.Name = "layoutControlItem4";
+            layoutControlItem4.Size = new Size(100, 26);
+            layoutControlItem4.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
+            layoutControlItem4.TextSize = new Size(0, 0);
+            layoutControlItem4.TextVisible = false;
+            // 
+            // layoutControlGroup3
+            // 
+            layoutControlGroup3.GroupStyle = DevExpress.Utils.GroupStyle.Title;
+            layoutControlGroup3.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlItem5 });
+            layoutControlGroup3.Location = new Point(0, 68);
+            layoutControlGroup3.Name = "layoutControlGroup3";
+            layoutControlGroup3.Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
+            layoutControlGroup3.Size = new Size(464, 246);
+            layoutControlGroup3.Spacing = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
+            layoutControlGroup3.Text = "姘存车鍒楄〃";
+            // 
+            // layoutControlItem5
+            // 
+            layoutControlItem5.Control = hydroPumpListExtendGridCtrl1;
+            layoutControlItem5.Location = new Point(0, 0);
+            layoutControlItem5.Name = "layoutControlItem5";
+            layoutControlItem5.Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
+            layoutControlItem5.Size = new Size(464, 224);
+            layoutControlItem5.TextSize = new Size(0, 0);
+            layoutControlItem5.TextVisible = false;
+            // 
+            // layoutControlGroup4
+            // 
+            layoutControlGroup4.GroupStyle = DevExpress.Utils.GroupStyle.Title;
+            layoutControlGroup4.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlItem6 });
+            layoutControlGroup4.Location = new Point(0, 314);
+            layoutControlGroup4.Name = "layoutControlGroup4";
+            layoutControlGroup4.Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
+            layoutControlGroup4.Size = new Size(464, 174);
+            layoutControlGroup4.Spacing = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
+            layoutControlGroup4.Text = "璁捐鐐�";
+            // 
+            // layoutControlItem6
+            // 
+            layoutControlItem6.Control = hydroPumpDesignPointListGridCtrl1;
+            layoutControlItem6.Location = new Point(0, 0);
+            layoutControlItem6.Name = "layoutControlItem6";
+            layoutControlItem6.Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
+            layoutControlItem6.Size = new Size(464, 152);
+            layoutControlItem6.TextSize = new Size(0, 0);
+            layoutControlItem6.TextVisible = false;
+            // 
+            // layoutControlGroup5
+            // 
+            layoutControlGroup5.GroupStyle = DevExpress.Utils.GroupStyle.Title;
+            layoutControlGroup5.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlItem7 });
+            layoutControlGroup5.Location = new Point(0, 488);
+            layoutControlGroup5.Name = "layoutControlGroup5";
+            layoutControlGroup5.Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
+            layoutControlGroup5.Size = new Size(464, 175);
+            layoutControlGroup5.Spacing = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
+            layoutControlGroup5.Text = "鏌ヨ鐐�";
+            // 
+            // layoutControlItem7
+            // 
+            layoutControlItem7.Control = hydroPumpQueryPointListGridCtrl1;
+            layoutControlItem7.Location = new Point(0, 0);
+            layoutControlItem7.Name = "layoutControlItem7";
+            layoutControlItem7.Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
+            layoutControlItem7.Size = new Size(464, 153);
+            layoutControlItem7.TextSize = new Size(0, 0);
+            layoutControlItem7.TextVisible = false;
+            // 
+            // SimulationPumpParallelCtrl
+            // 
+            AutoScaleDimensions = new SizeF(7F, 14F);
+            AutoScaleMode = AutoScaleMode.Font;
+            Controls.Add(pictureEdit1);
+            Controls.Add(sidePanel1);
+            Name = "SimulationPumpParallelCtrl";
+            Size = new Size(1105, 663);
+            ((ISupportInitialize)pictureEdit1.Properties).EndInit();
+            sidePanel1.ResumeLayout(false);
+            ((ISupportInitialize)layoutControl1).EndInit();
+            layoutControl1.ResumeLayout(false);
+            ((ISupportInitialize)txtDesignH.Properties).EndInit();
+            ((ISupportInitialize)txtDesignQ.Properties).EndInit();
+            ((ISupportInitialize)Root).EndInit();
+            ((ISupportInitialize)layoutControlGroup1).EndInit();
+            ((ISupportInitialize)layoutControlItem1).EndInit();
+            ((ISupportInitialize)layoutControlItem2).EndInit();
+            ((ISupportInitialize)layoutControlItem3).EndInit();
+            ((ISupportInitialize)layoutControlGroup2).EndInit();
+            ((ISupportInitialize)layoutControlItem4).EndInit();
+            ((ISupportInitialize)layoutControlGroup3).EndInit();
+            ((ISupportInitialize)layoutControlItem5).EndInit();
+            ((ISupportInitialize)layoutControlGroup4).EndInit();
+            ((ISupportInitialize)layoutControlItem6).EndInit();
+            ((ISupportInitialize)layoutControlGroup5).EndInit();
+            ((ISupportInitialize)layoutControlItem7).EndInit();
+            ResumeLayout(false);
+        }
+
+        #endregion
+
+        private PictureEdit pictureEdit1;
+        private SidePanel sidePanel1;
+        private DevExpress.XtraLayout.LayoutControl layoutControl1;
+        private SimpleButton btnDesign;
+        private TextEdit txtDesignH;
+        private TextEdit txtDesignQ;
+        private DevExpress.XtraLayout.LayoutControlGroup Root;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem3;
+        private SimpleButton btnSave;
+        private DevExpress.XtraLayout.LayoutControlGroup layoutControlGroup1;
+        private DevExpress.XtraLayout.LayoutControlGroup layoutControlGroup2;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem4;
+        private HydroPumpListExtendGridCtrl hydroPumpListExtendGridCtrl1;
+        private DevExpress.XtraLayout.LayoutControlGroup layoutControlGroup3;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem5;
+        private HydroPumpQueryPointListGridCtrl hydroPumpQueryPointListGridCtrl1;
+        private HydroPumpDesignPointListGridCtrl hydroPumpDesignPointListGridCtrl1;
+        private DevExpress.XtraLayout.LayoutControlGroup layoutControlGroup4;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem6;
+        private DevExpress.XtraLayout.LayoutControlGroup layoutControlGroup5;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem7;
+    }
+}
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/01-parallel/SimulationPumpParallelCtrl.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/01-parallel/SimulationPumpParallelCtrl.cs
new file mode 100644
index 0000000..b7b9ffa
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/01-parallel/SimulationPumpParallelCtrl.cs
@@ -0,0 +1,67 @@
+锘縰sing DevExpress.PivotGrid.PivotTable;
+using DevExpress.XtraEditors;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace HStation.WinFrmUI
+{
+    public partial class SimulationPumpParallelCtrl : DevExpress.XtraEditors.XtraUserControl
+    {
+        public SimulationPumpParallelCtrl()
+        {
+            InitializeComponent();
+            this.layoutControl1.SetupLayoutControl();
+            this.hydroPumpListExtendGridCtrl1.StateChangedEvent += HydroPumpListExtendGridCtrl1_StateChangedEvent;
+        }
+
+        /// <summary>
+        /// 淇濆瓨浜嬩欢
+        /// </summary>
+        public event Action<List<SimulationPumpParallelSaveItemViewModel>> SaveEvent;
+
+        /// <summary>
+        /// 缁戝畾鍒楄〃
+        /// </summary>
+        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        {
+            this.hydroPumpListExtendGridCtrl1.SetBindingData(hydroInfo);
+        }
+
+        //鐘舵�佹敼鍙樹簨浠�
+        private void HydroPumpListExtendGridCtrl1_StateChangedEvent(List<HydroPumpListItemExtendViewModel> allPumpStateList)
+        {
+
+        }
+
+        //淇濆瓨
+        private void btnSave_Click(object sender, EventArgs e)
+        {
+            var result = XtraMessageBox.Show("鏄惁灏嗙幇鏈夋按娉电姸鎬佹洿鏂版ā鍨嬶紵", "璇㈤棶", MessageBoxButtons.YesNo) == DialogResult.Yes;
+            if (!result)
+            {
+                return;
+            }
+            var allStateList = this.hydroPumpListExtendGridCtrl1.GetStateList();
+            if (allStateList == null || allStateList.Count < 1)
+            {
+                return;
+            }
+            var allSaveList = allStateList.Select(x => new SimulationPumpParallelSaveItemViewModel()
+            {
+                Code = x.Code,
+                LinkStatus = x.RunStatus ? Yw.Hydro.PumpStatus.Open : Yw.Hydro.PumpStatus.Closed,
+                SpeedRatio = Math.Round(x.Hz / x.Vmo.RatedHz, 2)
+            }).ToList();
+            this.SaveEvent?.Invoke(allSaveList);
+        }
+
+
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListViewCtrl.resx b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/01-parallel/SimulationPumpParallelCtrl.resx
similarity index 63%
copy from WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListViewCtrl.resx
copy to WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/01-parallel/SimulationPumpParallelCtrl.resx
index 91d6a51..e4e9373 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListViewCtrl.resx
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/01-parallel/SimulationPumpParallelCtrl.resx
@@ -117,37 +117,45 @@
   <resheader name="writer">
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
-  <metadata name="hydroPumpRunViewModelBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>122, 17</value>
-  </metadata>
-  <metadata name="image32.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>17, 17</value>
-  </metadata>
-  <assembly alias="DevExpress.Utils.v23.2" name="DevExpress.Utils.v23.2, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
-  <data name="image32.ImageStream" type="DevExpress.Utils.ImageCollectionStreamer, DevExpress.Utils.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+  <assembly alias="DevExpress.Data.v23.2" name="DevExpress.Data.v23.2, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
+  <data name="btnSave.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLlV0aWxzLnYyMy4yLCBWZXJzaW9uPTIzLjIu
-        NC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEMAwAAAFFT
-        eXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRv
-        a2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAAChEZXZFeHByZXNzLlV0aWxzLkltYWdlQ29sbGVjdGlvblN0
-        cmVhbWVyAgAAAAlJbWFnZVNpemUERGF0YQQHE1N5c3RlbS5EcmF3aW5nLlNpemUDAAAAAgIAAAAF/P//
-        /xNTeXN0ZW0uRHJhd2luZy5TaXplAgAAAAV3aWR0aAZoZWlnaHQAAAgIAwAAACAAAAAgAAAACQUAAAAP
-        BQAAAJEDAAACvgEAAIlQTkcNChoKAAAADUlIRFIAAAAgAAAAIAgGAAAAc3p69AAAAARnQU1BAACxjwv8
-        YQUAAAF1SURBVFhH7VXbbcMwDDRgF3AzRUfpKB2lf2myREbpKBmlFUVKJi2Sotx++oADEok8nqiHpxMn
-        RrHeXz4uX/Pj9TY/kcvPKNfr8k5yMazX9Q2L6oKjHDIAwZpI5X35Hu1E2AC0WxPgpNAMjO+bCRnorpxI
-        4QKX2/KpxRZ2DcCea4kaKaUBmtC70TUgV+C3lFJUWJ1wDcjVz8885uxtTnKg5bkGuGv4TcNkTDGRbgHE
-        wTyFVuyNw3+assHvOw0JWG2FQsUExrRmQTuLeMB7jYI0JNAaYIVqrsE0TzI2esFbwc2gtlqLlGKjigUM
-        lJbzAj71rgp0t4B/E3JsfPUhA7zA/mT7Ty12xPtohQ4hFqEEuob5Wa6dabkXzvGK0aKnghfemES8wp5g
-        gtTstF834LNngF/ZXuwhA5BD6Q1wG0ps4PAdMmC86XzlXpzAfxhADXn4vC4JHDGQD6j5FsC1DKy84JAB
-        g6H7vsefDKQuQNFwu0+cqJimX0b9nRk3FaMvAAAAAElFTkSuQmCCywEAAIlQTkcNChoKAAAADUlIRFIA
-        AAAgAAAAIAgGAAAAc3p69AAAAARnQU1BAACxjwv8YQUAAAGCSURBVFhH7VXBEcMwCMsoHaWjdISM0E06
-        SkfpKK3kwz5MADvuN7rT5YIFVohDtgsXzmLf9wf4Aj/C7wLvUm4OSLiB3NQrtsJ5AxSbZMs3eLYTcwYg
-        ZLu9Ao0iLcA99TNmxgYoMkkuRd4B8afVGeYGIOA79xIPlJQDsEYTUTeGBvQTpC2VFBdYjzoRG8CifvqP
-        xMJ3W5ISQOPlpQa066eEqzGvGL8C5txE2oCYNf6QpRgQte9dQh0Qj9rKjYoJXKnxzL5KkQwQ8YlKQQl1
-        QNwa0BvV3IhvKRNjJEa8btgMqtiQkhIDolpsaACsLe82Seh2tQNEo1eg/wlnx/CUAb1Bd7Jxn43a0hEw
-        +2lNHUI9/8tniCvHcnbAusK4p94z2j7rA7CoN65kkWzjuCCAdV0zb78Rz3JkwB1qLiBYMRBONqzpv+nU
-        4Vsx4M50xO2wyv9+BER/G8A9a9jDN57/BIUmcYY8oNEsYGz85BUQrxiIOP7eLZD0jwF2gQNort0XLjRs
-        2w9oZulV76wILQAAAABJRU5ErkJgggs=
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAMICAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
+        MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsYWNre2ZpbGw6IzczNzM3NDt9Cgku
+        WWVsbG93e2ZpbGw6I0ZDQjAxQjt9CgkuR3JlZW57ZmlsbDojMTI5QzQ5O30KCS5CbHVle2ZpbGw6IzM4
+        N0NCNzt9CgkuUmVke2ZpbGw6I0QwMjEyNzt9CgkuV2hpdGV7ZmlsbDojRkZGRkZGO30KCS5zdDB7b3Bh
+        Y2l0eTowLjU7fQoJLnN0MXtvcGFjaXR5OjAuNzU7fQoJLnN0MntvcGFjaXR5OjAuMjU7fQoJLnN0M3tk
+        aXNwbGF5Om5vbmU7ZmlsbDojNzM3Mzc0O30KPC9zdHlsZT4NCiAgPHBhdGggZD0iTTI3LDRoLTN2MTBI
+        OFY0SDVDNC40LDQsNCw0LjQsNCw1djIyYzAsMC42LDAuNCwxLDEsMWgyMmMwLjYsMCwxLTAuNCwxLTFW
+        NUMyOCw0LjQsMjcuNiw0LDI3LDR6IE0yNCwyNEg4di02ICBoMTZWMjR6IE0xMCw0djhoMTBWNEgxMHog
+        TTE0LDEwaC0yVjZoMlYxMHoiIGNsYXNzPSJCbGFjayIgLz4NCjwvc3ZnPgs=
+</value>
+  </data>
+  <data name="btnDesign.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAB0DAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
+        MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5Z
+        ZWxsb3d7ZmlsbDojRkZCMTE1O30KCS5CbGFja3tmaWxsOiM3MjcyNzI7fQoJLkdyZWVue2ZpbGw6IzAz
+        OUMyMzt9CgkuUmVke2ZpbGw6I0QxMUMxQzt9Cgkuc3Qwe29wYWNpdHk6MC43NTt9Cgkuc3Qxe29wYWNp
+        dHk6MC41O30KPC9zdHlsZT4NCiAgPGcgaWQ9IkVkaXQiPg0KICAgIDxwYXRoIGQ9Ik0yNy42LDguMmwt
+        My44LTMuOGMtMC41LTAuNS0xLjQtMC41LTEuOSwwbC0yLjUsMi41bDUuOCw1LjhsMi41LTIuNUMyOC4x
+        LDkuNiwyOC4xLDguOCwyNy42LDguMnoiIGNsYXNzPSJCbHVlIiAvPg0KICAgIDxwb2x5Z29uIHBvaW50
+        cz0iNCwyOCA5LjgsMjggNCwyMi4yICAiIGNsYXNzPSJCbHVlIiAvPg0KICAgIDxyZWN0IHg9IjUuOCIg
+        eT0iMTMuNCIgd2lkdGg9IjE3LjYiIGhlaWdodD0iOC4yIiBjbGFzcz0iQmx1ZSIgdHJhbnNmb3JtPSJt
+        YXRyaXgoMC43MDcsIC0wLjcwNzIsIDAuNzA3MiwgMC43MDcsIC04LjA3MjEsIDE1LjQwNDgpIiAvPg0K
+        ICA8L2c+DQo8L3N2Zz4L
 </value>
   </data>
 </root>
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/01-parallel/SimulationPumpParallelDlg.Designer.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/01-parallel/SimulationPumpParallelDlg.Designer.cs
new file mode 100644
index 0000000..6f16092
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/01-parallel/SimulationPumpParallelDlg.Designer.cs
@@ -0,0 +1,94 @@
+锘縩amespace HStation.WinFrmUI
+{
+    partial class SimulationPumpParallelDlg
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            ribbon = new DevExpress.XtraBars.Ribbon.RibbonControl();
+            ribbonPage1 = new DevExpress.XtraBars.Ribbon.RibbonPage();
+            ribbonPageGroup1 = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
+            simulationPumpParallelCtrl1 = new HStation.WinFrmUI.SimulationPumpParallelCtrl();
+            ((ISupportInitialize)ribbon).BeginInit();
+            SuspendLayout();
+            // 
+            // ribbon
+            // 
+            ribbon.ExpandCollapseItem.Id = 0;
+            ribbon.Items.AddRange(new DevExpress.XtraBars.BarItem[] { ribbon.ExpandCollapseItem });
+            ribbon.Location = new Point(0, 0);
+            ribbon.MaxItemId = 1;
+            ribbon.Name = "ribbon";
+            ribbon.Pages.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPage[] { ribbonPage1 });
+            ribbon.RibbonCaptionAlignment = DevExpress.XtraBars.Ribbon.RibbonCaptionAlignment.Left;
+            ribbon.ShowDisplayOptionsMenuButton = DevExpress.Utils.DefaultBoolean.False;
+            ribbon.Size = new Size(996, 32);
+            // 
+            // ribbonPage1
+            // 
+            ribbonPage1.Groups.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPageGroup[] { ribbonPageGroup1 });
+            ribbonPage1.Name = "ribbonPage1";
+            ribbonPage1.Text = "ribbonPage1";
+            // 
+            // ribbonPageGroup1
+            // 
+            ribbonPageGroup1.Name = "ribbonPageGroup1";
+            ribbonPageGroup1.Text = "ribbonPageGroup1";
+            // 
+            // simulationPumpParallelCtrl1
+            // 
+            simulationPumpParallelCtrl1.Dock = DockStyle.Fill;
+            simulationPumpParallelCtrl1.Location = new Point(0, 32);
+            simulationPumpParallelCtrl1.Name = "simulationPumpParallelCtrl1";
+            simulationPumpParallelCtrl1.Size = new Size(996, 601);
+            simulationPumpParallelCtrl1.TabIndex = 1;
+            // 
+            // SimulationPumpParallelDlg
+            // 
+            AutoScaleDimensions = new SizeF(7F, 14F);
+            AutoScaleMode = AutoScaleMode.Font;
+            ClientSize = new Size(996, 633);
+            Controls.Add(simulationPumpParallelCtrl1);
+            Controls.Add(ribbon);
+            FormBorderStyle = FormBorderStyle.SizableToolWindow;
+            Name = "SimulationPumpParallelDlg";
+            Ribbon = ribbon;
+            RibbonVisibility = DevExpress.XtraBars.Ribbon.RibbonVisibility.Hidden;
+            StartPosition = FormStartPosition.CenterParent;
+            Text = "骞惰仈妯℃嫙";
+            ((ISupportInitialize)ribbon).EndInit();
+            ResumeLayout(false);
+            PerformLayout();
+        }
+
+        #endregion
+
+        private DevExpress.XtraBars.Ribbon.RibbonControl ribbon;
+        private DevExpress.XtraBars.Ribbon.RibbonPage ribbonPage1;
+        private DevExpress.XtraBars.Ribbon.RibbonPageGroup ribbonPageGroup1;
+        private HStation.WinFrmUI.SimulationPumpParallelCtrl simulationPumpParallelCtrl1;
+    }
+}
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/01-parallel/SimulationPumpParallelDlg.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/01-parallel/SimulationPumpParallelDlg.cs
new file mode 100644
index 0000000..e378297
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/01-parallel/SimulationPumpParallelDlg.cs
@@ -0,0 +1,15 @@
+锘縩amespace HStation.WinFrmUI
+{
+    public partial class SimulationPumpParallelDlg : DevExpress.XtraBars.Ribbon.RibbonForm
+    {
+        public SimulationPumpParallelDlg()
+        {
+            InitializeComponent();
+            this.IconOptions.Icon = Yw.WinFrmUI.GlobalParas.AppIcon;
+        }
+
+
+
+
+    }
+}
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListViewCtrl.resx b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/01-parallel/SimulationPumpParallelDlg.resx
similarity index 67%
copy from WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListViewCtrl.resx
copy to WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/01-parallel/SimulationPumpParallelDlg.resx
index 91d6a51..af32865 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListViewCtrl.resx
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/01-parallel/SimulationPumpParallelDlg.resx
@@ -117,37 +117,4 @@
   <resheader name="writer">
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
-  <metadata name="hydroPumpRunViewModelBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>122, 17</value>
-  </metadata>
-  <metadata name="image32.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>17, 17</value>
-  </metadata>
-  <assembly alias="DevExpress.Utils.v23.2" name="DevExpress.Utils.v23.2, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
-  <data name="image32.ImageStream" type="DevExpress.Utils.ImageCollectionStreamer, DevExpress.Utils.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLlV0aWxzLnYyMy4yLCBWZXJzaW9uPTIzLjIu
-        NC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEMAwAAAFFT
-        eXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRv
-        a2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAAChEZXZFeHByZXNzLlV0aWxzLkltYWdlQ29sbGVjdGlvblN0
-        cmVhbWVyAgAAAAlJbWFnZVNpemUERGF0YQQHE1N5c3RlbS5EcmF3aW5nLlNpemUDAAAAAgIAAAAF/P//
-        /xNTeXN0ZW0uRHJhd2luZy5TaXplAgAAAAV3aWR0aAZoZWlnaHQAAAgIAwAAACAAAAAgAAAACQUAAAAP
-        BQAAAJEDAAACvgEAAIlQTkcNChoKAAAADUlIRFIAAAAgAAAAIAgGAAAAc3p69AAAAARnQU1BAACxjwv8
-        YQUAAAF1SURBVFhH7VXbbcMwDDRgF3AzRUfpKB2lf2myREbpKBmlFUVKJi2Sotx++oADEok8nqiHpxMn
-        RrHeXz4uX/Pj9TY/kcvPKNfr8k5yMazX9Q2L6oKjHDIAwZpI5X35Hu1E2AC0WxPgpNAMjO+bCRnorpxI
-        4QKX2/KpxRZ2DcCea4kaKaUBmtC70TUgV+C3lFJUWJ1wDcjVz8885uxtTnKg5bkGuGv4TcNkTDGRbgHE
-        wTyFVuyNw3+assHvOw0JWG2FQsUExrRmQTuLeMB7jYI0JNAaYIVqrsE0TzI2esFbwc2gtlqLlGKjigUM
-        lJbzAj71rgp0t4B/E3JsfPUhA7zA/mT7Ty12xPtohQ4hFqEEuob5Wa6dabkXzvGK0aKnghfemES8wp5g
-        gtTstF834LNngF/ZXuwhA5BD6Q1wG0ps4PAdMmC86XzlXpzAfxhADXn4vC4JHDGQD6j5FsC1DKy84JAB
-        g6H7vsefDKQuQNFwu0+cqJimX0b9nRk3FaMvAAAAAElFTkSuQmCCywEAAIlQTkcNChoKAAAADUlIRFIA
-        AAAgAAAAIAgGAAAAc3p69AAAAARnQU1BAACxjwv8YQUAAAGCSURBVFhH7VXBEcMwCMsoHaWjdISM0E06
-        SkfpKK3kwz5MADvuN7rT5YIFVohDtgsXzmLf9wf4Aj/C7wLvUm4OSLiB3NQrtsJ5AxSbZMs3eLYTcwYg
-        ZLu9Ao0iLcA99TNmxgYoMkkuRd4B8afVGeYGIOA79xIPlJQDsEYTUTeGBvQTpC2VFBdYjzoRG8CifvqP
-        xMJ3W5ISQOPlpQa066eEqzGvGL8C5txE2oCYNf6QpRgQte9dQh0Qj9rKjYoJXKnxzL5KkQwQ8YlKQQl1
-        QNwa0BvV3IhvKRNjJEa8btgMqtiQkhIDolpsaACsLe82Seh2tQNEo1eg/wlnx/CUAb1Bd7Jxn43a0hEw
-        +2lNHUI9/8tniCvHcnbAusK4p94z2j7rA7CoN65kkWzjuCCAdV0zb78Rz3JkwB1qLiBYMRBONqzpv+nU
-        4Vsx4M50xO2wyv9+BER/G8A9a9jDN57/BIUmcYY8oNEsYGz85BUQrxiIOP7eLZD0jwF2gQNort0XLjRs
-        2w9oZulV76wILQAAAABJRU5ErkJgggs=
-</value>
-  </data>
 </root>
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/01-parallel/SimulationPumpParallelSaveItemViewModel.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/01-parallel/SimulationPumpParallelSaveItemViewModel.cs
new file mode 100644
index 0000000..0d250df
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/01-parallel/SimulationPumpParallelSaveItemViewModel.cs
@@ -0,0 +1,23 @@
+锘縩amespace HStation.WinFrmUI
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public class SimulationPumpParallelSaveItemViewModel
+    {
+        /// <summary>
+        /// 缂栫爜
+        /// </summary>
+        public string Code { get; set; }
+
+        /// <summary>
+        /// 杩愯鐘舵��
+        /// </summary>
+        public string LinkStatus { get; set; }
+
+        /// <summary>
+        /// 杞�熸瘮
+        /// </summary>
+        public double SpeedRatio { get; set; }
+    }
+}
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/02-feat/SimulationPumpFeatDlg.Designer.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/02-feat/SimulationPumpFeatDlg.Designer.cs
new file mode 100644
index 0000000..33be06f
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/02-feat/SimulationPumpFeatDlg.Designer.cs
@@ -0,0 +1,94 @@
+锘縩amespace HStation.WinFrmUI
+{
+    partial class SimulationPumpFeatDlg
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            ribbon = new DevExpress.XtraBars.Ribbon.RibbonControl();
+            ribbonPage1 = new DevExpress.XtraBars.Ribbon.RibbonPage();
+            ribbonPageGroup1 = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
+            hydroPumpListStateGridCtrl1 = new HydroPumpListStateEditCtrl();
+            ((ISupportInitialize)ribbon).BeginInit();
+            SuspendLayout();
+            // 
+            // ribbon
+            // 
+            ribbon.ExpandCollapseItem.Id = 0;
+            ribbon.Items.AddRange(new DevExpress.XtraBars.BarItem[] { ribbon.ExpandCollapseItem });
+            ribbon.Location = new Point(0, 0);
+            ribbon.MaxItemId = 1;
+            ribbon.Name = "ribbon";
+            ribbon.Pages.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPage[] { ribbonPage1 });
+            ribbon.RibbonCaptionAlignment = DevExpress.XtraBars.Ribbon.RibbonCaptionAlignment.Left;
+            ribbon.ShowDisplayOptionsMenuButton = DevExpress.Utils.DefaultBoolean.False;
+            ribbon.Size = new Size(996, 32);
+            // 
+            // ribbonPage1
+            // 
+            ribbonPage1.Groups.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPageGroup[] { ribbonPageGroup1 });
+            ribbonPage1.Name = "ribbonPage1";
+            ribbonPage1.Text = "ribbonPage1";
+            // 
+            // ribbonPageGroup1
+            // 
+            ribbonPageGroup1.Name = "ribbonPageGroup1";
+            ribbonPageGroup1.Text = "ribbonPageGroup1";
+            // 
+            // hydroPumpListStateGridCtrl1
+            // 
+            hydroPumpListStateGridCtrl1.Dock = DockStyle.Left;
+            hydroPumpListStateGridCtrl1.Location = new Point(0, 32);
+            hydroPumpListStateGridCtrl1.Name = "hydroPumpListStateGridCtrl1";
+            hydroPumpListStateGridCtrl1.Size = new Size(295, 601);
+            hydroPumpListStateGridCtrl1.TabIndex = 1;
+            // 
+            // SimulationPumpFeatDlg
+            // 
+            AutoScaleDimensions = new SizeF(7F, 14F);
+            AutoScaleMode = AutoScaleMode.Font;
+            ClientSize = new Size(996, 633);
+            Controls.Add(hydroPumpListStateGridCtrl1);
+            Controls.Add(ribbon);
+            FormBorderStyle = FormBorderStyle.SizableToolWindow;
+            Name = "SimulationPumpFeatDlg";
+            Ribbon = ribbon;
+            RibbonVisibility = DevExpress.XtraBars.Ribbon.RibbonVisibility.Hidden;
+            StartPosition = FormStartPosition.CenterParent;
+            Text = "骞惰仈妯℃嫙";
+            ((ISupportInitialize)ribbon).EndInit();
+            ResumeLayout(false);
+            PerformLayout();
+        }
+
+        #endregion
+
+        private DevExpress.XtraBars.Ribbon.RibbonControl ribbon;
+        private DevExpress.XtraBars.Ribbon.RibbonPage ribbonPage1;
+        private DevExpress.XtraBars.Ribbon.RibbonPageGroup ribbonPageGroup1;
+        private HydroPumpListStateEditCtrl hydroPumpListStateGridCtrl1;
+    }
+}
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/02-feat/SimulationPumpFeatDlg.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/02-feat/SimulationPumpFeatDlg.cs
new file mode 100644
index 0000000..33342dc
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/02-feat/SimulationPumpFeatDlg.cs
@@ -0,0 +1,18 @@
+锘縩amespace HStation.WinFrmUI
+{
+    public partial class SimulationPumpFeatDlg : DevExpress.XtraBars.Ribbon.RibbonForm
+    {
+        public SimulationPumpFeatDlg()
+        {
+            InitializeComponent();
+            this.IconOptions.Icon = Yw.WinFrmUI.GlobalParas.AppIcon;
+        }
+
+        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        {
+            this.hydroPumpListStateGridCtrl1.SetBindingData(hydroInfo);
+        }
+
+
+    }
+}
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListViewCtrl.resx b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/02-feat/SimulationPumpFeatDlg.resx
similarity index 67%
copy from WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListViewCtrl.resx
copy to WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/02-feat/SimulationPumpFeatDlg.resx
index 91d6a51..af32865 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListViewCtrl.resx
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/02-feat/SimulationPumpFeatDlg.resx
@@ -117,37 +117,4 @@
   <resheader name="writer">
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
-  <metadata name="hydroPumpRunViewModelBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>122, 17</value>
-  </metadata>
-  <metadata name="image32.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>17, 17</value>
-  </metadata>
-  <assembly alias="DevExpress.Utils.v23.2" name="DevExpress.Utils.v23.2, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
-  <data name="image32.ImageStream" type="DevExpress.Utils.ImageCollectionStreamer, DevExpress.Utils.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLlV0aWxzLnYyMy4yLCBWZXJzaW9uPTIzLjIu
-        NC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEMAwAAAFFT
-        eXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRv
-        a2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAAChEZXZFeHByZXNzLlV0aWxzLkltYWdlQ29sbGVjdGlvblN0
-        cmVhbWVyAgAAAAlJbWFnZVNpemUERGF0YQQHE1N5c3RlbS5EcmF3aW5nLlNpemUDAAAAAgIAAAAF/P//
-        /xNTeXN0ZW0uRHJhd2luZy5TaXplAgAAAAV3aWR0aAZoZWlnaHQAAAgIAwAAACAAAAAgAAAACQUAAAAP
-        BQAAAJEDAAACvgEAAIlQTkcNChoKAAAADUlIRFIAAAAgAAAAIAgGAAAAc3p69AAAAARnQU1BAACxjwv8
-        YQUAAAF1SURBVFhH7VXbbcMwDDRgF3AzRUfpKB2lf2myREbpKBmlFUVKJi2Sotx++oADEok8nqiHpxMn
-        RrHeXz4uX/Pj9TY/kcvPKNfr8k5yMazX9Q2L6oKjHDIAwZpI5X35Hu1E2AC0WxPgpNAMjO+bCRnorpxI
-        4QKX2/KpxRZ2DcCea4kaKaUBmtC70TUgV+C3lFJUWJ1wDcjVz8885uxtTnKg5bkGuGv4TcNkTDGRbgHE
-        wTyFVuyNw3+assHvOw0JWG2FQsUExrRmQTuLeMB7jYI0JNAaYIVqrsE0TzI2esFbwc2gtlqLlGKjigUM
-        lJbzAj71rgp0t4B/E3JsfPUhA7zA/mT7Ty12xPtohQ4hFqEEuob5Wa6dabkXzvGK0aKnghfemES8wp5g
-        gtTstF834LNngF/ZXuwhA5BD6Q1wG0ps4PAdMmC86XzlXpzAfxhADXn4vC4JHDGQD6j5FsC1DKy84JAB
-        g6H7vsefDKQuQNFwu0+cqJimX0b9nRk3FaMvAAAAAElFTkSuQmCCywEAAIlQTkcNChoKAAAADUlIRFIA
-        AAAgAAAAIAgGAAAAc3p69AAAAARnQU1BAACxjwv8YQUAAAGCSURBVFhH7VXBEcMwCMsoHaWjdISM0E06
-        SkfpKK3kwz5MADvuN7rT5YIFVohDtgsXzmLf9wf4Aj/C7wLvUm4OSLiB3NQrtsJ5AxSbZMs3eLYTcwYg
-        ZLu9Ao0iLcA99TNmxgYoMkkuRd4B8afVGeYGIOA79xIPlJQDsEYTUTeGBvQTpC2VFBdYjzoRG8CifvqP
-        xMJ3W5ISQOPlpQa066eEqzGvGL8C5txE2oCYNf6QpRgQte9dQh0Qj9rKjYoJXKnxzL5KkQwQ8YlKQQl1
-        QNwa0BvV3IhvKRNjJEa8btgMqtiQkhIDolpsaACsLe82Seh2tQNEo1eg/wlnx/CUAb1Bd7Jxn43a0hEw
-        +2lNHUI9/8tniCvHcnbAusK4p94z2j7rA7CoN65kkWzjuCCAdV0zb78Rz3JkwB1qLiBYMRBONqzpv+nU
-        4Vsx4M50xO2wyv9+BER/G8A9a9jDN57/BIUmcYY8oNEsYGz85BUQrxiIOP7eLZD0jwF2gQNort0XLjRs
-        2w9oZulV76wILQAAAABJRU5ErkJgggs=
-</value>
-  </data>
 </root>
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/HStation.WinFrmUI.Xhs.Core.csproj b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/HStation.WinFrmUI.Xhs.Core.csproj
index da5ff44..6460d78 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/HStation.WinFrmUI.Xhs.Core.csproj
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/HStation.WinFrmUI.Xhs.Core.csproj
@@ -186,6 +186,12 @@
     <Compile Update="03-simulation\10-analy\SimulationSingleWorkingAnalyDlg.cs">
       <SubType>Form</SubType>
     </Compile>
+    <Compile Update="03-simulation\11-pump\01-parallel\SimulationPumpParallelDlg.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Update="03-simulation\11-pump\02-feat\SimulationPumpFeatDlg.cs">
+      <SubType>Form</SubType>
+    </Compile>
     <Compile Update="04-pump\03-calc\SinglePumpCalcCtrl.cs">
       <SubType>Form</SubType>
     </Compile>
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/HStation.WinFrmUI.Xhs.Core.csproj.user b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/HStation.WinFrmUI.Xhs.Core.csproj.user
index 992d099..99d90ec 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/HStation.WinFrmUI.Xhs.Core.csproj.user
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/HStation.WinFrmUI.Xhs.Core.csproj.user
@@ -196,6 +196,9 @@
     <Compile Update="03-simulation\10-analy\SimulationSingleWorkingAnalyCtrl.cs">
       <SubType>UserControl</SubType>
     </Compile>
+    <Compile Update="03-simulation\11-pump\01-parallel\SimulationPumpParallelCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
     <Compile Update="03-simulation\XhsProjectSimulationMgrPage.cs">
       <SubType>UserControl</SubType>
     </Compile>
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/03-helper/HydroValveStatusHelper.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/03-helper/HydroValveStatusHelper.cs
new file mode 100644
index 0000000..747f062
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/03-helper/HydroValveStatusHelper.cs
@@ -0,0 +1,43 @@
+锘縩amespace Yw.WinFrmUI
+{
+    /// <summary>
+    /// 姘村姏闃�闂ㄧ姸鎬佽緟鍔╃被
+    /// </summary>
+    public class HydroValveStatusHelper
+    {
+
+        //瀛楀吀
+        private static readonly Dictionary<string, string> _dict = new Dictionary<string, string>()
+        {
+            { Yw.Hydro.ValveStatus.None,"榛樿"},
+            { Yw.Hydro.ValveStatus.Open,"寮�鍚�"},
+            { Yw.Hydro.ValveStatus.Closed,"鍏抽棴"}
+        };
+
+        /// <summary>
+        /// 鑾峰彇鐘舵�佸悕绉�
+        /// </summary>
+        public static string GetStatusName(string code)
+        {
+            if (_dict.ContainsKey(code))
+            {
+                return _dict[code];
+            }
+            return string.Empty;
+        }
+
+        /// <summary>
+        /// 鑾峰彇鐘舵�佺紪鐮�
+        /// </summary>
+        public static string GetStatusCode(string name)
+        {
+            if (_dict.ContainsValue(name))
+            {
+                return _dict.First(x => x.Value == name).Key;
+            }
+            return string.Empty;
+        }
+
+
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/04-link/00-core/HydroLinkViewModel.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/04-link/00-core/HydroLinkViewModel.cs
index edcc529..8ebd3a0 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/04-link/00-core/HydroLinkViewModel.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/04-link/00-core/HydroLinkViewModel.cs
@@ -170,7 +170,6 @@
         /// <summary>
         /// 鏇存柊璁$畻灞炴��
         /// </summary>
-        /// <param name="rhs"></param>
         public override void UpdateCalcuProperty(HydroCalcuVisualResult rhs)
         {
             base.UpdateCalcuProperty(rhs);
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/04-link/03-valve/HydroValveViewModel.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/04-link/03-valve/HydroValveViewModel.cs
index a49deac..baf07fb 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/04-link/03-valve/HydroValveViewModel.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/04-link/03-valve/HydroValveViewModel.cs
@@ -99,6 +99,33 @@
         [Browsable(true)]
         public string ValveSetting { get; set; }
 
+
+        /// <summary>
+        /// 姘村ご鎹熷け
+        /// </summary>
+        [Category("璁$畻缁撴灉")]
+        [DisplayName("姘村ご鎹熷け")]
+        [Display(Name = "姘村ご鎹熷け(m)")]
+        [PropertyOrder(10003)]
+        [DisplayUnit("m")]
+        [HydroCalcuPro]
+        [ShowEditor(false)]
+        [Browsable(false)]
+        public override double? CalcuHeadLoss { get; set; }
+
+        /// <summary>
+        /// 娌跨▼鎹熷け
+        /// </summary>
+        [Category("璁$畻缁撴灉")]
+        [DisplayName("娌跨▼鎹熷け")]
+        [Display(Name = "娌跨▼鎹熷け(m)")]
+        [PropertyOrder(10005)]
+        [DisplayUnit("m")]
+        [HydroCalcuPro]
+        [ShowEditor(false)]
+        [Browsable(false)]
+        public override double? CalcuFrictionLoss { get; set; }
+
         /// <summary>
         /// 
         /// </summary>
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/06-converter/HydroElbowTypeConverter.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/06-converter/HydroElbowTypeConverter.cs
new file mode 100644
index 0000000..841b038
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/06-converter/HydroElbowTypeConverter.cs
@@ -0,0 +1,38 @@
+锘縩amespace Yw.WinFrmUI
+{
+    /// <summary>
+    /// 姘村姏寮ご绫诲瀷杞崲鍣�
+    /// </summary>
+    public class HydroElbowTypeConverter : StringConverter
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
+        {
+            return true;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
+        {
+            var list = new List<string>
+            {
+                HydroValveStatusHelper.GetStatusName(Yw.Hydro.ValveStatus.None),
+                HydroValveStatusHelper.GetStatusName(Yw.Hydro.ValveStatus.Open),
+                HydroValveStatusHelper.GetStatusName(Yw.Hydro.ValveStatus.Closed)
+            };
+            return new StandardValuesCollection(list);
+        }
+
+        /// <summary>
+        /// 鍏佽鎵嬪姩杈撳叆
+        /// </summary>
+        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
+        {
+            return false;
+        }
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/06-converter/HydroValveStatusConverter.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/06-converter/HydroValveStatusConverter.cs
index dd2334b..2cea350 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/06-converter/HydroValveStatusConverter.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/06-converter/HydroValveStatusConverter.cs
@@ -1,6 +1,4 @@
-锘縰sing Yw.Hydro;
-
-namespace Yw.WinFrmUI
+锘縩amespace Yw.WinFrmUI
 {
     /// <summary>
     /// 姘村姏闃�闂ㄧ姸鎬佽浆鎹㈠櫒
@@ -22,9 +20,9 @@
         {
             var list = new List<string>
             {
-                HydroLinkStatusHelper.GetStatusName(ValveStatus.None),
-                HydroLinkStatusHelper.GetStatusName(ValveStatus.Open),
-                HydroLinkStatusHelper.GetStatusName(ValveStatus.Closed)
+                HydroValveStatusHelper.GetStatusName(Yw.Hydro.ValveStatus.None),
+                HydroValveStatusHelper.GetStatusName(Yw.Hydro.ValveStatus.Open),
+                HydroValveStatusHelper.GetStatusName(Yw.Hydro.ValveStatus.Closed)
             };
             return new StandardValuesCollection(list);
         }
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-valve/HydroValveListCtrl.Designer.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-valve/HydroValveListCtrl.Designer.cs
index 11fb7e4..cb738d0 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-valve/HydroValveListCtrl.Designer.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-valve/HydroValveListCtrl.Designer.cs
@@ -52,7 +52,7 @@
             colDescription = new DevExpress.XtraGrid.Columns.GridColumn();
             colCalcuFlow = new DevExpress.XtraGrid.Columns.GridColumn();
             colCalcuVelocity = new DevExpress.XtraGrid.Columns.GridColumn();
-            colCalcuHeadLoss = new DevExpress.XtraGrid.Columns.GridColumn();
+            colCalcuMinorLoss = new DevExpress.XtraGrid.Columns.GridColumn();
             colSet = new DevExpress.XtraGrid.Columns.GridColumn();
             repositoryItemButtonEdit1 = new DevExpress.XtraEditors.Repository.RepositoryItemButtonEdit();
             layoutControl1 = new DevExpress.XtraLayout.LayoutControl();
@@ -67,8 +67,6 @@
             layoutControlItem3 = new DevExpress.XtraLayout.LayoutControlItem();
             layoutControlItem5 = new DevExpress.XtraLayout.LayoutControlItem();
             layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
-            colCalcuMinorLoss = new DevExpress.XtraGrid.Columns.GridColumn();
-            colCalcuFrictionLoss = new DevExpress.XtraGrid.Columns.GridColumn();
             ((ISupportInitialize)gridControl1).BeginInit();
             ((ISupportInitialize)hydroValveViewModelBindingSource).BeginInit();
             ((ISupportInitialize)gridView1).BeginInit();
@@ -104,7 +102,7 @@
             // 
             // gridView1
             // 
-            gridView1.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] { colDbLocked, colName, colCode, colModelType, colValveType, colLinkStatus, colMaterial, colDiameter, colMinorLoss, colHasDb, colFlags, colDescription, colCalcuFlow, colCalcuVelocity, colCalcuHeadLoss, colCalcuMinorLoss, colCalcuFrictionLoss, colSet });
+            gridView1.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] { colDbLocked, colName, colCode, colModelType, colValveType, colLinkStatus, colMaterial, colDiameter, colMinorLoss, colHasDb, colFlags, colDescription, colCalcuFlow, colCalcuVelocity, colCalcuMinorLoss, colSet });
             gridView1.GridControl = gridControl1;
             gridView1.Name = "gridView1";
             gridView1.RowCellClick += gridView1_RowCellClick;
@@ -255,18 +253,18 @@
             colCalcuVelocity.VisibleIndex = 13;
             colCalcuVelocity.Width = 100;
             // 
-            // colCalcuHeadLoss
+            // colCalcuMinorLoss
             // 
-            colCalcuHeadLoss.FieldName = "CalcuHeadLoss";
-            colCalcuHeadLoss.Fixed = DevExpress.XtraGrid.Columns.FixedStyle.Right;
-            colCalcuHeadLoss.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("colCalcuHeadLoss.ImageOptions.SvgImage");
-            colCalcuHeadLoss.ImageOptions.SvgImageSize = new Size(16, 16);
-            colCalcuHeadLoss.MaxWidth = 100;
-            colCalcuHeadLoss.MinWidth = 100;
-            colCalcuHeadLoss.Name = "colCalcuHeadLoss";
-            colCalcuHeadLoss.Visible = true;
-            colCalcuHeadLoss.VisibleIndex = 14;
-            colCalcuHeadLoss.Width = 100;
+            colCalcuMinorLoss.FieldName = "CalcuMinorLoss";
+            colCalcuMinorLoss.Fixed = DevExpress.XtraGrid.Columns.FixedStyle.Right;
+            colCalcuMinorLoss.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("colCalcuMinorLoss.ImageOptions.SvgImage");
+            colCalcuMinorLoss.ImageOptions.SvgImageSize = new Size(16, 16);
+            colCalcuMinorLoss.MaxWidth = 100;
+            colCalcuMinorLoss.MinWidth = 100;
+            colCalcuMinorLoss.Name = "colCalcuMinorLoss";
+            colCalcuMinorLoss.Visible = true;
+            colCalcuMinorLoss.VisibleIndex = 14;
+            colCalcuMinorLoss.Width = 100;
             // 
             // colSet
             // 
@@ -277,7 +275,7 @@
             colSet.MinWidth = 60;
             colSet.Name = "colSet";
             colSet.Visible = true;
-            colSet.VisibleIndex = 17;
+            colSet.VisibleIndex = 15;
             colSet.Width = 60;
             // 
             // repositoryItemButtonEdit1
@@ -417,32 +415,6 @@
             layoutControlItem1.TextSize = new Size(0, 0);
             layoutControlItem1.TextVisible = false;
             // 
-            // colCalcuMinorLoss
-            // 
-            colCalcuMinorLoss.FieldName = "CalcuMinorLoss";
-            colCalcuMinorLoss.Fixed = DevExpress.XtraGrid.Columns.FixedStyle.Right;
-            colCalcuMinorLoss.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("colCalcuMinorLoss.ImageOptions.SvgImage");
-            colCalcuMinorLoss.ImageOptions.SvgImageSize = new Size(16, 16);
-            colCalcuMinorLoss.MaxWidth = 100;
-            colCalcuMinorLoss.MinWidth = 100;
-            colCalcuMinorLoss.Name = "colCalcuMinorLoss";
-            colCalcuMinorLoss.Visible = true;
-            colCalcuMinorLoss.VisibleIndex = 15;
-            colCalcuMinorLoss.Width = 100;
-            // 
-            // colCalcuFrictionLoss
-            // 
-            colCalcuFrictionLoss.FieldName = "CalcuFrictionLoss";
-            colCalcuFrictionLoss.Fixed = DevExpress.XtraGrid.Columns.FixedStyle.Right;
-            colCalcuFrictionLoss.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("colCalcuFrictionLoss.ImageOptions.SvgImage");
-            colCalcuFrictionLoss.ImageOptions.SvgImageSize = new Size(16, 16);
-            colCalcuFrictionLoss.MaxWidth = 100;
-            colCalcuFrictionLoss.MinWidth = 100;
-            colCalcuFrictionLoss.Name = "colCalcuFrictionLoss";
-            colCalcuFrictionLoss.Visible = true;
-            colCalcuFrictionLoss.VisibleIndex = 16;
-            colCalcuFrictionLoss.Width = 100;
-            // 
             // HydroValveListCtrl
             // 
             AutoScaleDimensions = new SizeF(7F, 14F);
@@ -485,7 +457,6 @@
         private DevExpress.XtraGrid.Columns.GridColumn colModelType;
         private DevExpress.XtraGrid.Columns.GridColumn colCalcuFlow;
         private DevExpress.XtraGrid.Columns.GridColumn colCalcuVelocity;
-        private DevExpress.XtraGrid.Columns.GridColumn colCalcuHeadLoss;
         private DevExpress.XtraGrid.Columns.GridColumn colHasDb;
         private DevExpress.XtraGrid.Columns.GridColumn colMaterial;
         private DevExpress.XtraLayout.LayoutControl layoutControl1;
@@ -504,6 +475,5 @@
         private GeneralSearchAndSetCtrl generalSearchAndSetCtrl1;
         private DevExpress.XtraLayout.LayoutControlItem layoutControlItem5;
         private DevExpress.XtraGrid.Columns.GridColumn colCalcuMinorLoss;
-        private DevExpress.XtraGrid.Columns.GridColumn colCalcuFrictionLoss;
     }
 }
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-valve/HydroValveListCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-valve/HydroValveListCtrl.cs
index a6d8058..a15d0c1 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-valve/HydroValveListCtrl.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-valve/HydroValveListCtrl.cs
@@ -300,12 +300,12 @@
             this.colMaterial.Visible = false;
             this.colDiameter.Visible = false;
             this.colMinorLoss.Visible = false;
-            this.colCalcuFlow.Visible = false;
-            this.colCalcuVelocity.Visible = false;
-            this.colCalcuHeadLoss.Visible = false;
             this.colHasDb.Visible = false;
             this.colFlags.Visible = true;
             this.colDescription.Visible = true;
+            this.colCalcuFlow.Visible = false;
+            this.colCalcuVelocity.Visible = false;
+            this.colCalcuMinorLoss.Visible = false;
             this.colSet.Visible = false;
         }
 
@@ -324,12 +324,12 @@
             this.colMaterial.Visible = true;
             this.colDiameter.Visible = true;
             this.colMinorLoss.Visible = true;
-            this.colCalcuFlow.Visible = false;
-            this.colCalcuVelocity.Visible = false;
-            this.colCalcuHeadLoss.Visible = false;
             this.colHasDb.Visible = true;
             this.colFlags.Visible = true;
             this.colDescription.Visible = true;
+            this.colCalcuFlow.Visible = false;
+            this.colCalcuVelocity.Visible = false;
+            this.colCalcuMinorLoss.Visible = false;
             this.colSet.Visible = true;
         }
 
@@ -348,12 +348,12 @@
             this.colMaterial.Visible = true;
             this.colDiameter.Visible = true;
             this.colMinorLoss.Visible = true;
-            this.colCalcuFlow.Visible = true;
-            this.colCalcuVelocity.Visible = true;
-            this.colCalcuHeadLoss.Visible = true;
             this.colHasDb.Visible = true;
             this.colFlags.Visible = true;
             this.colDescription.Visible = true;
+            this.colCalcuMinorLoss.Visible = true;
+            this.colCalcuVelocity.Visible = true;
+            this.colCalcuFlow.Visible = true;
             this.colSet.Visible = true;
         }
 
@@ -372,12 +372,12 @@
             this.colMaterial.Visible = true;
             this.colDiameter.Visible = true;
             this.colMinorLoss.Visible = true;
-            this.colCalcuFlow.Visible = false;
-            this.colCalcuVelocity.Visible = false;
-            this.colCalcuHeadLoss.Visible = false;
             this.colHasDb.Visible = true;
             this.colFlags.Visible = true;
             this.colDescription.Visible = true;
+            this.colCalcuFlow.Visible = false;
+            this.colCalcuVelocity.Visible = false;
+            this.colCalcuMinorLoss.Visible = false;
             this.colSet.Visible = true;
         }
 
@@ -399,10 +399,12 @@
             this.colHasDb.Visible = true;
             this.colFlags.Visible = true;
             this.colDescription.Visible = true;
-            this.colCalcuFlow.Visible = true;
+            this.colCalcuMinorLoss.Visible = true;
             this.colCalcuVelocity.Visible = true;
-            this.colCalcuHeadLoss.Visible = true;
-            this.colSet.Visible = false;
+            this.colCalcuFlow.Visible = true;
+            this.colSet.Visible = true;
         }
+
+
     }
 }
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-valve/HydroValveListCtrl.resx b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-valve/HydroValveListCtrl.resx
index 9c8c4fc..8b4aae1 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-valve/HydroValveListCtrl.resx
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-valve/HydroValveListCtrl.resx
@@ -213,99 +213,7 @@
         Pg0KICA8L2c+DQo8L3N2Zz4L
 </value>
   </data>
-  <data name="colCalcuHeadLoss.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
-        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
-        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAPwIAAAC77u/
-        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
-        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
-        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
-        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
-        MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLlllbGxvd3tmaWxsOiNGRkIxMTU7fQoJ
-        LlJlZHtmaWxsOiNEMTFDMUM7fQoJLkJsYWNre2ZpbGw6IzcyNzI3Mjt9CgkuQmx1ZXtmaWxsOiMxMTc3
-        RDc7fQoJLldoaXRle2ZpbGw6I0ZGRkZGRjt9CgkuR3JlZW57ZmlsbDojMDM5QzIzO30KCS5zdDB7b3Bh
-        Y2l0eTowLjc1O30KCS5zdDF7b3BhY2l0eTowLjU7fQoJLnN0MntvcGFjaXR5OjAuMjU7fQoJLnN0M3tm
-        aWxsOiNGRkIxMTU7fQo8L3N0eWxlPg0KICA8ZyBpZD0iQWRkQ2FsY3VsYXRlZEZpZWxkIj4NCiAgICA8
-        cGF0aCBkPSJNMTgsMjhIMWMtMC41LDAtMS0wLjUtMS0xVjNjMC0wLjUsMC41LTEsMS0xaDI2YzAuNSww
-        LDEsMC41LDEsMXYxNWgtMlY0SDJ2MjJoMTZWMjh6IE03LjcsMjEuOSAgIGMtMC4xLDAtMC4yLDAtMC4z
-        LTAuMWMtMC4xLDAtMC4yLTAuMS0wLjMtMC4zYy0wLjMtMC4zLTAuNS0wLjUtMC42LTAuNmMtMC4yLTAu
-        MS0wLjMtMC4yLTAuNS0wLjNjLTAuMi0wLjEtMC40LTAuMS0wLjUtMC4xICAgYy0wLjQsMC0wLjgsMC4x
-        LTEuMSwwLjRTNCwyMS42LDQsMjJjMCwwLjUsMC4zLDEsMC45LDEuNEM1LjQsMjMuOCw2LjEsMjQsNywy
-        NGMwLjksMCwxLjctMC4yLDIuMy0wLjVzMS4yLTAuOCwxLjctMS42ICAgYzAuNS0wLjcsMC45LTEuNiwx
-        LjEtMi42bDEuNy01LjNoMmwwLjUtMmgtMkwxNSw5LjZjMC4xLTAuNiwwLjMtMSwwLjQtMS4xYzAuMi0w
-        LjMsMC40LTAuNCwwLjctMC40YzAuMSwwLDAuMywwLDAuNCwwLjEgICBjMC4xLDAuMSwwLjMsMC4yLDAu
-        NiwwLjVjMC4yLDAuMywwLjQsMC40LDAuNywwLjVzMC41LDAuMiwwLjgsMC4yYzAuMywwLDAuNi0wLjEs
-        MC44LTAuMmMwLjItMC4xLDAuNC0wLjMsMC42LTAuNiAgIEMxOS45LDguNSwyMCw4LjIsMjAsOGMwLTAu
-        My0wLjEtMC43LTAuNC0xYy0wLjItMC4zLTAuNi0wLjYtMS0wLjdjLTAuNC0wLjItMS0wLjMtMS43LTAu
-        M2MtMS41LDAtMi43LDAuMy0zLjYsMSAgIGMtMC45LDAuNy0xLjcsMi42LTEuOSwzLjhMMTEuMSwxMkg5
-        LjVsLTAuNCwyaDEuNWwtMS44LDYuNEM4LjYsMjEuNCw4LjIsMjEuOSw3LjcsMjEuOXogTTE0LjQsMjEu
-        OWMwLjIsMC4xLDAuMywwLjEsMC41LDAuMSAgIGMwLjIsMCwwLjUtMC4xLDAuNy0wLjJjMC4zLTAuMSww
-        LjYtMC4zLDAuOS0wLjdjMC4zLTAuMywwLjctMC43LDEtMS4ybDAuMywwLjdjMC4yLDAuNCwwLjQsMC43
-        LDAuNiwwLjljMC4yLDAuMiwwLjQsMC4zLDAuNiwwLjQgICBjMC4yLDAuMSwwLjUsMC4xLDAuOCwwLjFj
-        MC43LDAsMS41LTAuMywyLjItMC45bC0wLjctMC43Yy0wLjMsMC4zLTAuNiwwLjQtMC45LDAuNGMtMC4y
-        LDAtMC4zLTAuMS0wLjUtMC4ycy0wLjQtMC41LTAuNi0wLjkgICBMMTkuMSwxOWMwLjQtMC41LDAuNi0w
-        LjgsMC43LTAuOGMwLjEtMC4xLDAuMi0wLjIsMC40LTAuM2MwLjEtMC4xLDAuMi0wLjEsMC4zLTAuMmMw
-        LjEsMCwwLjIsMCwwLjUtMC4xYzAuMiwwLDAuNCwwLDAuNCwwICAgYzAuMSwwLDAuMi0wLjEsMC4zLTAu
-        MnMwLjItMC4yLDAuMy0wLjNjMC4xLTAuMSwwLjEtMC4yLDAuMS0wLjRjMC0wLjItMC4xLTAuNC0wLjIt
-        MC41UzIxLjQsMTYsMjEuMSwxNmMtMC4yLDAtMC41LDAuMS0wLjcsMC4yICAgcy0wLjUsMC4zLTAuOCww
-        LjVjLTAuMiwwLjItMC41LDAuNi0xLjEsMS4zbC0wLjktMS45aC0wLjVjLTAuNCwwLjMtMC45LDAuNC0x
-        LjQsMC41bC0wLjIsMS4xaDAuOWwwLjYsMS4yYy0wLjQsMC41LTAuNiwwLjktMC44LDEgICBjLTAuMiww
-        LjItMC4zLDAuMy0wLjUsMC40Yy0wLjEsMC4xLTAuMywwLjEtMC42LDAuMWMtMC4zLDAtMC42LDAuMS0w
-        LjcsMC4xYy0wLjEsMC4xLTAuMiwwLjItMC4zLDAuM0MxNCwyMC45LDE0LDIxLjEsMTQsMjEuMiAgIGMw
-        LDAuMSwwLDAuMywwLjEsMC40QzE0LjIsMjEuNywxNC4zLDIxLjgsMTQuNCwyMS45eiIgY2xhc3M9IkJs
-        YWNrIiAvPg0KICAgIDxwb2x5Z29uIHBvaW50cz0iMzIsMjQgMjgsMjQgMjgsMjAgMjQsMjAgMjQsMjQg
-        MjAsMjQgMjAsMjggMjQsMjggMjQsMzIgMjgsMzIgMjgsMjggMzIsMjggICIgY2xhc3M9IkdyZWVuIiAv
-        Pg0KICA8L2c+DQo8L3N2Zz4L
-</value>
-  </data>
   <data name="colCalcuMinorLoss.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
-        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
-        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAPwIAAAC77u/
-        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
-        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
-        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
-        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
-        MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLlllbGxvd3tmaWxsOiNGRkIxMTU7fQoJ
-        LlJlZHtmaWxsOiNEMTFDMUM7fQoJLkJsYWNre2ZpbGw6IzcyNzI3Mjt9CgkuQmx1ZXtmaWxsOiMxMTc3
-        RDc7fQoJLldoaXRle2ZpbGw6I0ZGRkZGRjt9CgkuR3JlZW57ZmlsbDojMDM5QzIzO30KCS5zdDB7b3Bh
-        Y2l0eTowLjc1O30KCS5zdDF7b3BhY2l0eTowLjU7fQoJLnN0MntvcGFjaXR5OjAuMjU7fQoJLnN0M3tm
-        aWxsOiNGRkIxMTU7fQo8L3N0eWxlPg0KICA8ZyBpZD0iQWRkQ2FsY3VsYXRlZEZpZWxkIj4NCiAgICA8
-        cGF0aCBkPSJNMTgsMjhIMWMtMC41LDAtMS0wLjUtMS0xVjNjMC0wLjUsMC41LTEsMS0xaDI2YzAuNSww
-        LDEsMC41LDEsMXYxNWgtMlY0SDJ2MjJoMTZWMjh6IE03LjcsMjEuOSAgIGMtMC4xLDAtMC4yLDAtMC4z
-        LTAuMWMtMC4xLDAtMC4yLTAuMS0wLjMtMC4zYy0wLjMtMC4zLTAuNS0wLjUtMC42LTAuNmMtMC4yLTAu
-        MS0wLjMtMC4yLTAuNS0wLjNjLTAuMi0wLjEtMC40LTAuMS0wLjUtMC4xICAgYy0wLjQsMC0wLjgsMC4x
-        LTEuMSwwLjRTNCwyMS42LDQsMjJjMCwwLjUsMC4zLDEsMC45LDEuNEM1LjQsMjMuOCw2LjEsMjQsNywy
-        NGMwLjksMCwxLjctMC4yLDIuMy0wLjVzMS4yLTAuOCwxLjctMS42ICAgYzAuNS0wLjcsMC45LTEuNiwx
-        LjEtMi42bDEuNy01LjNoMmwwLjUtMmgtMkwxNSw5LjZjMC4xLTAuNiwwLjMtMSwwLjQtMS4xYzAuMi0w
-        LjMsMC40LTAuNCwwLjctMC40YzAuMSwwLDAuMywwLDAuNCwwLjEgICBjMC4xLDAuMSwwLjMsMC4yLDAu
-        NiwwLjVjMC4yLDAuMywwLjQsMC40LDAuNywwLjVzMC41LDAuMiwwLjgsMC4yYzAuMywwLDAuNi0wLjEs
-        MC44LTAuMmMwLjItMC4xLDAuNC0wLjMsMC42LTAuNiAgIEMxOS45LDguNSwyMCw4LjIsMjAsOGMwLTAu
-        My0wLjEtMC43LTAuNC0xYy0wLjItMC4zLTAuNi0wLjYtMS0wLjdjLTAuNC0wLjItMS0wLjMtMS43LTAu
-        M2MtMS41LDAtMi43LDAuMy0zLjYsMSAgIGMtMC45LDAuNy0xLjcsMi42LTEuOSwzLjhMMTEuMSwxMkg5
-        LjVsLTAuNCwyaDEuNWwtMS44LDYuNEM4LjYsMjEuNCw4LjIsMjEuOSw3LjcsMjEuOXogTTE0LjQsMjEu
-        OWMwLjIsMC4xLDAuMywwLjEsMC41LDAuMSAgIGMwLjIsMCwwLjUtMC4xLDAuNy0wLjJjMC4zLTAuMSww
-        LjYtMC4zLDAuOS0wLjdjMC4zLTAuMywwLjctMC43LDEtMS4ybDAuMywwLjdjMC4yLDAuNCwwLjQsMC43
-        LDAuNiwwLjljMC4yLDAuMiwwLjQsMC4zLDAuNiwwLjQgICBjMC4yLDAuMSwwLjUsMC4xLDAuOCwwLjFj
-        MC43LDAsMS41LTAuMywyLjItMC45bC0wLjctMC43Yy0wLjMsMC4zLTAuNiwwLjQtMC45LDAuNGMtMC4y
-        LDAtMC4zLTAuMS0wLjUtMC4ycy0wLjQtMC41LTAuNi0wLjkgICBMMTkuMSwxOWMwLjQtMC41LDAuNi0w
-        LjgsMC43LTAuOGMwLjEtMC4xLDAuMi0wLjIsMC40LTAuM2MwLjEtMC4xLDAuMi0wLjEsMC4zLTAuMmMw
-        LjEsMCwwLjIsMCwwLjUtMC4xYzAuMiwwLDAuNCwwLDAuNCwwICAgYzAuMSwwLDAuMi0wLjEsMC4zLTAu
-        MnMwLjItMC4yLDAuMy0wLjNjMC4xLTAuMSwwLjEtMC4yLDAuMS0wLjRjMC0wLjItMC4xLTAuNC0wLjIt
-        MC41UzIxLjQsMTYsMjEuMSwxNmMtMC4yLDAtMC41LDAuMS0wLjcsMC4yICAgcy0wLjUsMC4zLTAuOCww
-        LjVjLTAuMiwwLjItMC41LDAuNi0xLjEsMS4zbC0wLjktMS45aC0wLjVjLTAuNCwwLjMtMC45LDAuNC0x
-        LjQsMC41bC0wLjIsMS4xaDAuOWwwLjYsMS4yYy0wLjQsMC41LTAuNiwwLjktMC44LDEgICBjLTAuMiww
-        LjItMC4zLDAuMy0wLjUsMC40Yy0wLjEsMC4xLTAuMywwLjEtMC42LDAuMWMtMC4zLDAtMC42LDAuMS0w
-        LjcsMC4xYy0wLjEsMC4xLTAuMiwwLjItMC4zLDAuM0MxNCwyMC45LDE0LDIxLjEsMTQsMjEuMiAgIGMw
-        LDAuMSwwLDAuMywwLjEsMC40QzE0LjIsMjEuNywxNC4zLDIxLjgsMTQuNCwyMS45eiIgY2xhc3M9IkJs
-        YWNrIiAvPg0KICAgIDxwb2x5Z29uIHBvaW50cz0iMzIsMjQgMjgsMjQgMjgsMjAgMjQsMjAgMjQsMjQg
-        MjAsMjQgMjAsMjggMjQsMjggMjQsMzIgMjgsMzIgMjgsMjggMzIsMjggICIgY2xhc3M9IkdyZWVuIiAv
-        Pg0KICA8L2c+DQo8L3N2Zz4L
-</value>
-  </data>
-  <data name="colCalcuFrictionLoss.ImageOptions.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/17-valve/SetHydroValveDlg.Designer.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-valve/SetHydroValveDlg.Designer.cs
index 6ff8217..cf7fb0a 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-valve/SetHydroValveDlg.Designer.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-valve/SetHydroValveDlg.Designer.cs
@@ -28,7 +28,6 @@
         /// </summary>
         private void InitializeComponent()
         {
-            components = new Container();
             layoutControl1 = new DevExpress.XtraLayout.LayoutControl();
             generalOkAndCancelCtrl1 = new GeneralOkAndCancelCtrl();
             txtMaterial = new DevExpress.XtraEditors.TextEdit();
@@ -41,7 +40,6 @@
             layoutControlItem4 = new DevExpress.XtraLayout.LayoutControlItem();
             layoutControlItem5 = new DevExpress.XtraLayout.LayoutControlItem();
             layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
-            dxErrorProvider1 = new DevExpress.XtraEditors.DXErrorProvider.DXErrorProvider(components);
             ((ISupportInitialize)layoutControl1).BeginInit();
             layoutControl1.SuspendLayout();
             ((ISupportInitialize)txtMaterial.Properties).BeginInit();
@@ -54,7 +52,6 @@
             ((ISupportInitialize)layoutControlItem4).BeginInit();
             ((ISupportInitialize)layoutControlItem5).BeginInit();
             ((ISupportInitialize)layoutControlItem1).BeginInit();
-            ((ISupportInitialize)dxErrorProvider1).BeginInit();
             SuspendLayout();
             // 
             // layoutControl1
@@ -88,7 +85,6 @@
             // 
             txtMaterial.Location = new Point(297, 12);
             txtMaterial.Name = "txtMaterial";
-            txtMaterial.Properties.AllowNullInput = DevExpress.Utils.DefaultBoolean.True;
             txtMaterial.Size = new Size(154, 20);
             txtMaterial.StyleController = layoutControl1;
             txtMaterial.TabIndex = 2;
@@ -97,7 +93,6 @@
             // 
             txtMinorLoss.Location = new Point(297, 36);
             txtMinorLoss.Name = "txtMinorLoss";
-            txtMinorLoss.Properties.AllowNullInput = DevExpress.Utils.DefaultBoolean.True;
             txtMinorLoss.Properties.MaskSettings.Set("MaskManagerType", typeof(DevExpress.Data.Mask.NumericMaskManager));
             txtMinorLoss.Properties.MaskSettings.Set("MaskManagerSignature", "allowNull=False");
             txtMinorLoss.Size = new Size(154, 20);
@@ -108,7 +103,6 @@
             // 
             txtDiameter.Location = new Point(76, 36);
             txtDiameter.Name = "txtDiameter";
-            txtDiameter.Properties.AllowNullInput = DevExpress.Utils.DefaultBoolean.True;
             txtDiameter.Properties.DisplayFormat.FormatString = "{0}mm";
             txtDiameter.Properties.DisplayFormat.FormatType = DevExpress.Utils.FormatType.Custom;
             txtDiameter.Properties.MaskSettings.Set("MaskManagerType", typeof(DevExpress.Data.Mask.NumericMaskManager));
@@ -122,7 +116,6 @@
             // 
             imgCmbLinkStatus.Location = new Point(76, 12);
             imgCmbLinkStatus.Name = "imgCmbLinkStatus";
-            imgCmbLinkStatus.Properties.AllowNullInput = DevExpress.Utils.DefaultBoolean.True;
             imgCmbLinkStatus.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo) });
             imgCmbLinkStatus.Size = new Size(153, 20);
             imgCmbLinkStatus.StyleController = layoutControl1;
@@ -184,10 +177,6 @@
             layoutControlItem1.TextSize = new Size(0, 0);
             layoutControlItem1.TextVisible = false;
             // 
-            // dxErrorProvider1
-            // 
-            dxErrorProvider1.ContainerControl = this;
-            // 
             // SetHydroValveDlg
             // 
             AutoScaleDimensions = new SizeF(7F, 14F);
@@ -210,7 +199,6 @@
             ((ISupportInitialize)layoutControlItem4).EndInit();
             ((ISupportInitialize)layoutControlItem5).EndInit();
             ((ISupportInitialize)layoutControlItem1).EndInit();
-            ((ISupportInitialize)dxErrorProvider1).EndInit();
             ResumeLayout(false);
         }
 
@@ -218,7 +206,6 @@
 
         private DevExpress.XtraLayout.LayoutControl layoutControl1;
         private DevExpress.XtraLayout.LayoutControlGroup Root;
-        private DevExpress.XtraEditors.DXErrorProvider.DXErrorProvider dxErrorProvider1;
         private DevExpress.XtraLayout.LayoutControlItem layoutControlItem8;
         private DevExpress.XtraEditors.ImageComboBoxEdit imgCmbLinkStatus;
         private DevExpress.XtraLayout.LayoutControlItem layoutControlItem10;
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-valve/SetHydroValveDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-valve/SetHydroValveDlg.cs
index 3bd47f1..0d898e4 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-valve/SetHydroValveDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-valve/SetHydroValveDlg.cs
@@ -8,7 +8,6 @@
             this.IconOptions.Icon = Yw.WinFrmUI.GlobalParas.AppIcon;
             this.layoutControl1.SetupLayoutControl();
             this.generalOkAndCancelCtrl1.OkEvent += GeneralOkAndCancelCtrl1_OkEvent;
-            InitialLinkStatus();
         }
 
         /// <summary>
@@ -44,16 +43,6 @@
             }
         }
 
-        //鍒濆鍖栫娈电姸鎬�
-        private void InitialLinkStatus()
-        {
-            this.imgCmbLinkStatus.Properties.BeginUpdate();
-            this.imgCmbLinkStatus.Properties.Items.Clear();
-            this.imgCmbLinkStatus.Properties.Items.Add(HydroLinkStatusHelper.GetStatusName(Yw.Hydro.LinkStatus.None), Yw.Hydro.LinkStatus.None, -1);
-            this.imgCmbLinkStatus.Properties.Items.Add(HydroLinkStatusHelper.GetStatusName(Yw.Hydro.LinkStatus.Open), Yw.Hydro.LinkStatus.Open, -1);
-            this.imgCmbLinkStatus.Properties.Items.Add(HydroLinkStatusHelper.GetStatusName(Yw.Hydro.LinkStatus.Closed), Yw.Hydro.LinkStatus.Closed, -1);
-            this.imgCmbLinkStatus.Properties.EndUpdate();
-        }
 
         //纭畾
         private void GeneralOkAndCancelCtrl1_OkEvent()
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-valve/SetHydroValveDlg.resx b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-valve/SetHydroValveDlg.resx
index d438392..af32865 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-valve/SetHydroValveDlg.resx
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/17-valve/SetHydroValveDlg.resx
@@ -117,7 +117,4 @@
   <resheader name="writer">
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
-  <metadata name="dxErrorProvider1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>17, 17</value>
-  </metadata>
 </root>
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroNodeLossViewModel.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroNodeLossViewModel.cs
index 8f68a91..3cba04c 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroNodeLossViewModel.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroNodeLossViewModel.cs
@@ -16,9 +16,9 @@
         public HydroNodeLossViewModel(Yw.EPAnet.LossNode rhs)
         {
             this.Code = rhs.Id;
-            this.Elev = rhs.Elev;
-            this.StartHead = rhs.Head;
-            this.EndHead = rhs.Head - rhs.MinorLoss;
+            this.Elev = Math.Round(rhs.Elev, 2);
+            this.StartHead = Math.Round(rhs.Head, 2);
+            this.EndHead = Math.Round(rhs.Head - rhs.MinorLoss, 2);
             this.Distance = rhs.Distance;
         }
 
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/00-core/HydroPumpCurveColorHelper.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/00-core/HydroPumpCurveColorHelper.cs
new file mode 100644
index 0000000..1eb2d23
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/00-core/HydroPumpCurveColorHelper.cs
@@ -0,0 +1,35 @@
+锘縩amespace Yw.WinFrmUI
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public class HydroPumpCurveColorHelper
+    {
+        //缂撳瓨
+        private static List<Color> _cache = new List<Color>()
+        {
+            Color.Red, Color.Blue, Color.Green,Color.DodgerBlue,
+            Color.Fuchsia, Color.MidnightBlue,  Color.Maroon, Color.Aquamarine,
+            Color.Bisque,Color.BurlyWood
+        };
+
+        /// <summary>
+        /// 鑾峰彇闅忔満棰滆壊
+        /// </summary>
+        public static Color GetRandomColor(int index)
+        {
+            if (index <= _cache.Count - 1)
+            {
+                return _cache[index];
+            }
+            var random = new Random();
+            int r = random.Next(1, 256);
+            int g = random.Next(1, 256);
+            int b = random.Next(1, 256);
+            return Color.FromArgb(r, g, b);
+        }
+
+
+
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListViewCtrl.Designer.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-list/HydroPumpListStateViewCtrl.Designer.cs
similarity index 66%
rename from WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListViewCtrl.Designer.cs
rename to WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-list/HydroPumpListStateViewCtrl.Designer.cs
index 536d0c6..f88bf1e 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListViewCtrl.Designer.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-list/HydroPumpListStateViewCtrl.Designer.cs
@@ -1,6 +1,6 @@
 锘縩amespace Yw.WinFrmUI
 {
-    partial class HydroPumpRunListViewCtrl
+    partial class HydroPumpListStateViewCtrl
     {
         /// <summary> 
         /// Required designer variable.
@@ -37,52 +37,47 @@
             DevExpress.XtraEditors.TableLayout.TemplatedItemElement templatedItemElement2 = new DevExpress.XtraEditors.TableLayout.TemplatedItemElement();
             DevExpress.XtraEditors.TableLayout.TemplatedItemElement templatedItemElement3 = new DevExpress.XtraEditors.TableLayout.TemplatedItemElement();
             DevExpress.XtraEditors.TableLayout.TableRowDefinition tableRowDefinition1 = new DevExpress.XtraEditors.TableLayout.TableRowDefinition();
-            ComponentResourceManager resources = new ComponentResourceManager(typeof(HydroPumpRunListViewCtrl));
             imageListBoxControl1 = new DevExpress.XtraEditors.ImageListBoxControl();
-            hydroPumpRunViewModelBindingSource = new BindingSource(components);
-            image32 = new DevExpress.Utils.ImageCollection(components);
+            hydroPumpListViewItemStateViewModelBindingSource = new BindingSource(components);
             ((ISupportInitialize)imageListBoxControl1).BeginInit();
-            ((ISupportInitialize)hydroPumpRunViewModelBindingSource).BeginInit();
-            ((ISupportInitialize)image32).BeginInit();
+            ((ISupportInitialize)hydroPumpListViewItemStateViewModelBindingSource).BeginInit();
             SuspendLayout();
             // 
             // imageListBoxControl1
             // 
-            imageListBoxControl1.DataSource = hydroPumpRunViewModelBindingSource;
-            imageListBoxControl1.DisplayMember = "Name";
+            imageListBoxControl1.DataSource = hydroPumpListViewItemStateViewModelBindingSource;
             imageListBoxControl1.Dock = DockStyle.Fill;
-            imageListBoxControl1.ImageIndexMember = "ImageIndex";
-            imageListBoxControl1.ImageList = image32;
-            imageListBoxControl1.ImageMember = "ImageIndex";
-            imageListBoxControl1.ItemHeight = 36;
+            imageListBoxControl1.ItemHeight = 34;
             imageListBoxControl1.Location = new Point(0, 0);
             imageListBoxControl1.Name = "imageListBoxControl1";
             imageListBoxControl1.Size = new Size(285, 624);
             imageListBoxControl1.TabIndex = 0;
+            tableColumnDefinition1.Length.Type = DevExpress.XtraEditors.TableLayout.TableDefinitionLengthType.Pixel;
             tableColumnDefinition1.Length.Value = 40D;
-            tableColumnDefinition2.Length.Value = 171D;
-            tableColumnDefinition3.Length.Value = 70D;
+            tableColumnDefinition2.Length.Value = 175D;
+            tableColumnDefinition3.Length.Type = DevExpress.XtraEditors.TableLayout.TableDefinitionLengthType.Pixel;
+            tableColumnDefinition3.Length.Value = 72D;
             itemTemplateBase1.Columns.Add(tableColumnDefinition1);
             itemTemplateBase1.Columns.Add(tableColumnDefinition2);
             itemTemplateBase1.Columns.Add(tableColumnDefinition3);
-            templatedItemElement1.ColumnIndex = 1;
-            templatedItemElement1.FieldName = "Name";
+            templatedItemElement1.FieldName = "Image";
             templatedItemElement1.ImageOptions.ImageAlignment = DevExpress.XtraEditors.TileItemContentAlignment.MiddleCenter;
             templatedItemElement1.ImageOptions.ImageScaleMode = DevExpress.XtraEditors.TileItemImageScaleMode.ZoomInside;
-            templatedItemElement1.Text = "Name";
-            templatedItemElement1.TextAlignment = DevExpress.XtraEditors.TileItemContentAlignment.MiddleLeft;
-            templatedItemElement2.Appearance.Normal.ForeColor = Color.Silver;
-            templatedItemElement2.Appearance.Normal.Options.UseForeColor = true;
-            templatedItemElement2.ColumnIndex = 2;
-            templatedItemElement2.FieldName = "CurrentHz";
+            templatedItemElement1.ImageOptions.ImageSize = new Size(32, 32);
+            templatedItemElement1.Text = "Image";
+            templatedItemElement1.TextAlignment = DevExpress.XtraEditors.TileItemContentAlignment.MiddleCenter;
+            templatedItemElement2.ColumnIndex = 1;
+            templatedItemElement2.FieldName = "Name";
             templatedItemElement2.ImageOptions.ImageAlignment = DevExpress.XtraEditors.TileItemContentAlignment.MiddleCenter;
             templatedItemElement2.ImageOptions.ImageScaleMode = DevExpress.XtraEditors.TileItemImageScaleMode.ZoomInside;
-            templatedItemElement2.Text = "CurrentHz";
-            templatedItemElement2.TextAlignment = DevExpress.XtraEditors.TileItemContentAlignment.MiddleCenter;
-            templatedItemElement3.FieldName = "Image";
+            templatedItemElement2.Text = "Name";
+            templatedItemElement2.TextAlignment = DevExpress.XtraEditors.TileItemContentAlignment.MiddleLeft;
+            templatedItemElement2.TextLocation = new Point(10, 0);
+            templatedItemElement3.ColumnIndex = 2;
+            templatedItemElement3.FieldName = "CurrentHz";
             templatedItemElement3.ImageOptions.ImageAlignment = DevExpress.XtraEditors.TileItemContentAlignment.MiddleCenter;
             templatedItemElement3.ImageOptions.ImageScaleMode = DevExpress.XtraEditors.TileItemImageScaleMode.ZoomInside;
-            templatedItemElement3.Text = "Image";
+            templatedItemElement3.Text = "CurrentHz";
             templatedItemElement3.TextAlignment = DevExpress.XtraEditors.TileItemContentAlignment.MiddleCenter;
             itemTemplateBase1.Elements.Add(templatedItemElement1);
             itemTemplateBase1.Elements.Add(templatedItemElement2);
@@ -90,37 +85,26 @@
             itemTemplateBase1.Name = "template1";
             itemTemplateBase1.Rows.Add(tableRowDefinition1);
             imageListBoxControl1.Templates.Add(itemTemplateBase1);
-            imageListBoxControl1.ValueMember = "Code";
-            imageListBoxControl1.SelectedValueChanged += imageListBoxControl1_SelectedValueChanged;
             // 
-            // hydroPumpRunViewModelBindingSource
+            // hydroPumpListViewItemStateViewModelBindingSource
             // 
-            hydroPumpRunViewModelBindingSource.DataSource = typeof(HydroPumpRunViewModel);
+            hydroPumpListViewItemStateViewModelBindingSource.DataSource = typeof(HydroPumpListViewItemStateViewModel);
             // 
-            // image32
-            // 
-            image32.ImageSize = new Size(32, 32);
-            image32.ImageStream = (DevExpress.Utils.ImageCollectionStreamer)resources.GetObject("image32.ImageStream");
-            image32.Images.SetKeyName(0, "pump-run.png");
-            image32.Images.SetKeyName(1, "pump-shut.png");
-            // 
-            // HydroPumpRunListCtrl
+            // HydroPumpListStateViewCtrl
             // 
             AutoScaleDimensions = new SizeF(7F, 14F);
             AutoScaleMode = AutoScaleMode.Font;
             Controls.Add(imageListBoxControl1);
-            Name = "HydroPumpRunListCtrl";
+            Name = "HydroPumpListStateViewCtrl";
             Size = new Size(285, 624);
             ((ISupportInitialize)imageListBoxControl1).EndInit();
-            ((ISupportInitialize)hydroPumpRunViewModelBindingSource).EndInit();
-            ((ISupportInitialize)image32).EndInit();
+            ((ISupportInitialize)hydroPumpListViewItemStateViewModelBindingSource).EndInit();
             ResumeLayout(false);
         }
 
         #endregion
 
         private DevExpress.XtraEditors.ImageListBoxControl imageListBoxControl1;
-        private DevExpress.Utils.ImageCollection image32;
-        private BindingSource hydroPumpRunViewModelBindingSource;
+        private BindingSource hydroPumpListViewItemStateViewModelBindingSource;
     }
 }
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-list/HydroPumpListStateViewCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-list/HydroPumpListStateViewCtrl.cs
new file mode 100644
index 0000000..5042606
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-list/HydroPumpListStateViewCtrl.cs
@@ -0,0 +1,53 @@
+锘縩amespace Yw.WinFrmUI
+{
+    public partial class HydroPumpListStateViewCtrl : DevExpress.XtraEditors.XtraUserControl
+    {
+        public HydroPumpListStateViewCtrl()
+        {
+            InitializeComponent();
+        }
+
+        /// <summary>
+        /// 閫夋嫨鏀瑰彉浜嬩欢
+        /// </summary>
+        public event Action<Yw.Model.HydroPumpInfo> SelectedChangedEvent;
+
+        private List<HydroPumpListViewItemStateViewModel> _allBindingList = null;//缁戝畾鍒楄〃
+
+        /// <summary>
+        /// 缁戝畾鏁版嵁
+        /// </summary>
+        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        {
+            SetBindingData(hydroInfo.Pumps);
+        }
+
+        /// <summary>
+        /// 缁戝畾鏁版嵁
+        /// </summary>
+        public void SetBindingData(List<Yw.Model.HydroPumpInfo> pumps)
+        {
+            _allBindingList = new List<HydroPumpListViewItemStateViewModel>();
+            pumps?.ForEach(x => _allBindingList.Add(new HydroPumpListViewItemStateViewModel(x)));
+            this.hydroPumpListViewItemStateViewModelBindingSource.DataSource = _allBindingList;
+            this.hydroPumpListViewItemStateViewModelBindingSource.ResetBindings(false);
+        }
+
+        //閫夋嫨鏀瑰彉
+        private void imageListBoxControl1_SelectedValueChanged(object sender, EventArgs e)
+        {
+            if (_allBindingList == null || _allBindingList.Count < 1)
+            {
+                return;
+            }
+            var item = this.imageListBoxControl1.SelectedItem;
+            var pump = item as HydroPumpListViewItemStateViewModel;
+            if (pump == null)
+            {
+                return;
+            }
+            this.SelectedChangedEvent?.Invoke(pump.Vmo);
+        }
+
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListViewCtrl.resx b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-list/HydroPumpListStateViewCtrl.resx
similarity index 68%
rename from WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListViewCtrl.resx
rename to WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-list/HydroPumpListStateViewCtrl.resx
index 91d6a51..51518f3 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListViewCtrl.resx
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-list/HydroPumpListStateViewCtrl.resx
@@ -117,37 +117,7 @@
   <resheader name="writer">
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
-  <metadata name="hydroPumpRunViewModelBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+  <metadata name="hydroPumpListViewItemStateViewModelBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>122, 17</value>
   </metadata>
-  <metadata name="image32.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>17, 17</value>
-  </metadata>
-  <assembly alias="DevExpress.Utils.v23.2" name="DevExpress.Utils.v23.2, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
-  <data name="image32.ImageStream" type="DevExpress.Utils.ImageCollectionStreamer, DevExpress.Utils.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLlV0aWxzLnYyMy4yLCBWZXJzaW9uPTIzLjIu
-        NC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEMAwAAAFFT
-        eXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRv
-        a2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAAChEZXZFeHByZXNzLlV0aWxzLkltYWdlQ29sbGVjdGlvblN0
-        cmVhbWVyAgAAAAlJbWFnZVNpemUERGF0YQQHE1N5c3RlbS5EcmF3aW5nLlNpemUDAAAAAgIAAAAF/P//
-        /xNTeXN0ZW0uRHJhd2luZy5TaXplAgAAAAV3aWR0aAZoZWlnaHQAAAgIAwAAACAAAAAgAAAACQUAAAAP
-        BQAAAJEDAAACvgEAAIlQTkcNChoKAAAADUlIRFIAAAAgAAAAIAgGAAAAc3p69AAAAARnQU1BAACxjwv8
-        YQUAAAF1SURBVFhH7VXbbcMwDDRgF3AzRUfpKB2lf2myREbpKBmlFUVKJi2Sotx++oADEok8nqiHpxMn
-        RrHeXz4uX/Pj9TY/kcvPKNfr8k5yMazX9Q2L6oKjHDIAwZpI5X35Hu1E2AC0WxPgpNAMjO+bCRnorpxI
-        4QKX2/KpxRZ2DcCea4kaKaUBmtC70TUgV+C3lFJUWJ1wDcjVz8885uxtTnKg5bkGuGv4TcNkTDGRbgHE
-        wTyFVuyNw3+assHvOw0JWG2FQsUExrRmQTuLeMB7jYI0JNAaYIVqrsE0TzI2esFbwc2gtlqLlGKjigUM
-        lJbzAj71rgp0t4B/E3JsfPUhA7zA/mT7Ty12xPtohQ4hFqEEuob5Wa6dabkXzvGK0aKnghfemES8wp5g
-        gtTstF834LNngF/ZXuwhA5BD6Q1wG0ps4PAdMmC86XzlXpzAfxhADXn4vC4JHDGQD6j5FsC1DKy84JAB
-        g6H7vsefDKQuQNFwu0+cqJimX0b9nRk3FaMvAAAAAElFTkSuQmCCywEAAIlQTkcNChoKAAAADUlIRFIA
-        AAAgAAAAIAgGAAAAc3p69AAAAARnQU1BAACxjwv8YQUAAAGCSURBVFhH7VXBEcMwCMsoHaWjdISM0E06
-        SkfpKK3kwz5MADvuN7rT5YIFVohDtgsXzmLf9wf4Aj/C7wLvUm4OSLiB3NQrtsJ5AxSbZMs3eLYTcwYg
-        ZLu9Ao0iLcA99TNmxgYoMkkuRd4B8afVGeYGIOA79xIPlJQDsEYTUTeGBvQTpC2VFBdYjzoRG8CifvqP
-        xMJ3W5ISQOPlpQa066eEqzGvGL8C5txE2oCYNf6QpRgQte9dQh0Qj9rKjYoJXKnxzL5KkQwQ8YlKQQl1
-        QNwa0BvV3IhvKRNjJEa8btgMqtiQkhIDolpsaACsLe82Seh2tQNEo1eg/wlnx/CUAb1Bd7Jxn43a0hEw
-        +2lNHUI9/8tniCvHcnbAusK4p94z2j7rA7CoN65kkWzjuCCAdV0zb78Rz3JkwB1qLiBYMRBONqzpv+nU
-        4Vsx4M50xO2wyv9+BER/G8A9a9jDN57/BIUmcYY8oNEsYGz85BUQrxiIOP7eLZD0jwF2gQNort0XLjRs
-        2w9oZulV76wILQAAAABJRU5ErkJgggs=
-</value>
-  </data>
 </root>
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunViewModel.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-list/HydroPumpListViewItemStateViewModel.cs
similarity index 82%
rename from WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunViewModel.cs
rename to WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-list/HydroPumpListViewItemStateViewModel.cs
index 54a60ff..2982f70 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunViewModel.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-list/HydroPumpListViewItemStateViewModel.cs
@@ -1,25 +1,19 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Yw.WinFrmUI
+锘縩amespace Yw.WinFrmUI
 {
     /// <summary>
     /// 
     /// </summary>
-    public class HydroPumpRunViewModel
+    public class HydroPumpListViewItemStateViewModel
     {
         /// <summary>
         /// 
         /// </summary>
-        public HydroPumpRunViewModel() { }
+        public HydroPumpListViewItemStateViewModel() { }
 
         /// <summary>
         /// 
         /// </summary>
-        public HydroPumpRunViewModel(Yw.Model.HydroPumpInfo pump)
+        public HydroPumpListViewItemStateViewModel(Yw.Model.HydroPumpInfo pump)
         {
             this.Code = pump.Code;
             this.Name = pump.Name;
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListViewCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListViewCtrl.cs
deleted file mode 100644
index faa7ee8..0000000
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListViewCtrl.cs
+++ /dev/null
@@ -1,64 +0,0 @@
-锘縰sing DevExpress.XtraEditors;
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-
-namespace Yw.WinFrmUI
-{
-    public partial class HydroPumpRunListViewCtrl : DevExpress.XtraEditors.XtraUserControl
-    {
-        public HydroPumpRunListViewCtrl()
-        {
-            InitializeComponent();
-        }
-
-        /// <summary>
-        /// 閫夋嫨鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<Yw.Model.HydroPumpInfo> SelectedChangedEvent;
-
-        private List<HydroPumpRunViewModel> _allBindingList = null;//缁戝畾鍒楄〃
-
-        /// <summary>
-        /// 缁戝畾鏁版嵁
-        /// </summary>
-        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
-        {
-            SetBindingData(hydroInfo.Pumps);
-        }
-
-        /// <summary>
-        /// 缁戝畾鏁版嵁
-        /// </summary>
-        public void SetBindingData(List<Yw.Model.HydroPumpInfo> pumps)
-        {
-            _allBindingList = new List<HydroPumpRunViewModel>();
-            pumps?.ForEach(x => _allBindingList.Add(new HydroPumpRunViewModel(x)));
-            this.hydroPumpRunViewModelBindingSource.DataSource = _allBindingList;
-            this.hydroPumpRunViewModelBindingSource.ResetBindings(false);
-        }
-
-        //閫夋嫨鏀瑰彉
-        private void imageListBoxControl1_SelectedValueChanged(object sender, EventArgs e)
-        {
-            if (_allBindingList == null || _allBindingList.Count < 1)
-            {
-                return;
-            }
-            var item = this.imageListBoxControl1.SelectedItem;
-            var pump = item as HydroPumpRunViewModel;
-            if (pump == null)
-            {
-                return;
-            }
-            this.SelectedChangedEvent?.Invoke(pump.Vmo);
-        }
-
-    }
-}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/HydroPumpListExtendGridCtrl.Designer.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/HydroPumpListExtendGridCtrl.Designer.cs
new file mode 100644
index 0000000..3794a7d
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/HydroPumpListExtendGridCtrl.Designer.cs
@@ -0,0 +1,160 @@
+锘縩amespace Yw.WinFrmUI
+{
+    partial class HydroPumpListExtendGridCtrl
+    {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            components = new Container();
+            gridControl1 = new DevExpress.XtraGrid.GridControl();
+            hydroPumpListItemExtendViewModelBindingSource = new BindingSource(components);
+            gridView1 = new DevExpress.XtraGrid.Views.Grid.GridView();
+            colCode = new DevExpress.XtraGrid.Columns.GridColumn();
+            colName = new DevExpress.XtraGrid.Columns.GridColumn();
+            colColor = new DevExpress.XtraGrid.Columns.GridColumn();
+            colHz = new DevExpress.XtraGrid.Columns.GridColumn();
+            colExtend = new DevExpress.XtraGrid.Columns.GridColumn();
+            colRunStatus = new DevExpress.XtraGrid.Columns.GridColumn();
+            repColor = new DevExpress.XtraEditors.Repository.RepositoryItemColorEdit();
+            ((ISupportInitialize)gridControl1).BeginInit();
+            ((ISupportInitialize)hydroPumpListItemExtendViewModelBindingSource).BeginInit();
+            ((ISupportInitialize)gridView1).BeginInit();
+            ((ISupportInitialize)repColor).BeginInit();
+            SuspendLayout();
+            // 
+            // gridControl1
+            // 
+            gridControl1.DataSource = hydroPumpListItemExtendViewModelBindingSource;
+            gridControl1.Dock = DockStyle.Fill;
+            gridControl1.EmbeddedNavigator.Margin = new Padding(1);
+            gridControl1.Location = new Point(0, 0);
+            gridControl1.MainView = gridView1;
+            gridControl1.Margin = new Padding(2);
+            gridControl1.Name = "gridControl1";
+            gridControl1.RepositoryItems.AddRange(new DevExpress.XtraEditors.Repository.RepositoryItem[] { repColor });
+            gridControl1.Size = new Size(756, 456);
+            gridControl1.TabIndex = 7;
+            gridControl1.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] { gridView1 });
+            // 
+            // hydroPumpListItemExtendViewModelBindingSource
+            // 
+            hydroPumpListItemExtendViewModelBindingSource.DataSource = typeof(HydroPumpListItemExtendViewModel);
+            // 
+            // gridView1
+            // 
+            gridView1.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] { colCode, colName, colColor, colHz, colExtend, colRunStatus });
+            gridView1.DetailHeight = 223;
+            gridView1.GridControl = gridControl1;
+            gridView1.Name = "gridView1";
+            gridView1.OptionsEditForm.PopupEditFormWidth = 560;
+            gridView1.CellValueChanged += gridView1_CellValueChanged;
+            // 
+            // colCode
+            // 
+            colCode.FieldName = "Code";
+            colCode.Name = "colCode";
+            // 
+            // colName
+            // 
+            colName.FieldName = "Name";
+            colName.MinWidth = 50;
+            colName.Name = "colName";
+            colName.OptionsColumn.AllowEdit = false;
+            colName.Visible = true;
+            colName.VisibleIndex = 0;
+            colName.Width = 100;
+            // 
+            // colColor
+            // 
+            colColor.FieldName = "Color";
+            colColor.MinWidth = 50;
+            colColor.Name = "colColor";
+            colColor.Visible = true;
+            colColor.VisibleIndex = 1;
+            colColor.Width = 100;
+            // 
+            // colHz
+            // 
+            colHz.FieldName = "Hz";
+            colHz.MinWidth = 50;
+            colHz.Name = "colHz";
+            colHz.Visible = true;
+            colHz.VisibleIndex = 2;
+            colHz.Width = 100;
+            // 
+            // colExtend
+            // 
+            colExtend.FieldName = "Extend";
+            colExtend.MinWidth = 50;
+            colExtend.Name = "colExtend";
+            colExtend.Visible = true;
+            colExtend.VisibleIndex = 3;
+            colExtend.Width = 100;
+            // 
+            // colRunStatus
+            // 
+            colRunStatus.FieldName = "RunStatus";
+            colRunStatus.MinWidth = 50;
+            colRunStatus.Name = "colRunStatus";
+            colRunStatus.Visible = true;
+            colRunStatus.VisibleIndex = 4;
+            colRunStatus.Width = 100;
+            // 
+            // repColor
+            // 
+            repColor.AutoHeight = false;
+            repColor.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo) });
+            repColor.Name = "repColor";
+            repColor.NullColor = Color.Empty;
+            // 
+            // HydroPumpListExtendGridCtrl
+            // 
+            AutoScaleDimensions = new SizeF(7F, 14F);
+            AutoScaleMode = AutoScaleMode.Font;
+            Controls.Add(gridControl1);
+            Name = "HydroPumpListExtendGridCtrl";
+            Size = new Size(756, 456);
+            ((ISupportInitialize)gridControl1).EndInit();
+            ((ISupportInitialize)hydroPumpListItemExtendViewModelBindingSource).EndInit();
+            ((ISupportInitialize)gridView1).EndInit();
+            ((ISupportInitialize)repColor).EndInit();
+            ResumeLayout(false);
+        }
+
+        #endregion
+
+        private DevExpress.XtraGrid.GridControl gridControl1;
+        private DevExpress.XtraGrid.Views.Grid.GridView gridView1;
+        private DevExpress.XtraEditors.Repository.RepositoryItemColorEdit repColor;
+        private BindingSource hydroPumpListItemExtendViewModelBindingSource;
+        private DevExpress.XtraGrid.Columns.GridColumn colCode;
+        private DevExpress.XtraGrid.Columns.GridColumn colName;
+        private DevExpress.XtraGrid.Columns.GridColumn colColor;
+        private DevExpress.XtraGrid.Columns.GridColumn colHz;
+        private DevExpress.XtraGrid.Columns.GridColumn colExtend;
+        private DevExpress.XtraGrid.Columns.GridColumn colRunStatus;
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/HydroPumpListExtendGridCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/HydroPumpListExtendGridCtrl.cs
new file mode 100644
index 0000000..6a355c8
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/HydroPumpListExtendGridCtrl.cs
@@ -0,0 +1,75 @@
+锘縰sing DevExpress.Office.Utils;
+using DevExpress.Xpo.Helpers;
+using DevExpress.XtraEditors;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace Yw.WinFrmUI
+{
+    public partial class HydroPumpListExtendGridCtrl : DevExpress.XtraEditors.XtraUserControl
+    {
+        public HydroPumpListExtendGridCtrl()
+        {
+            InitializeComponent();
+            this.gridView1.SetNormalEditView();
+        }
+
+        /// <summary>
+        /// 鐘舵�佹敼鍙樹簨浠�
+        /// </summary>
+        public event Action<List<HydroPumpListItemExtendViewModel>> StateChangedEvent;
+
+        private BindingList<HydroPumpListItemExtendViewModel> _allBindingList = null;//缁戝畾鍒楄〃
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        {
+            SetBindingData(hydroInfo?.Pumps);
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public void SetBindingData(List<Yw.Model.HydroPumpInfo> allPumpList)
+        {
+            var list = allPumpList?.Select(x => new HydroPumpListItemExtendViewModel(x, allPumpList)).ToList();
+            SetBindingData(list);
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public void SetBindingData(List<HydroPumpListItemExtendViewModel> allList)
+        {
+            _allBindingList = new BindingList<HydroPumpListItemExtendViewModel>();
+            allList?.ForEach(x => _allBindingList.Add(x));
+            this.hydroPumpListItemExtendViewModelBindingSource.DataSource = _allBindingList;
+            this.hydroPumpListItemExtendViewModelBindingSource.ResetBindings(false);
+        }
+
+        /// <summary>
+        /// 鑾峰彇鐘舵�佸垪琛�
+        /// </summary>
+        public List<HydroPumpListItemExtendViewModel> GetStateList()
+        {
+            return _allBindingList?.ToList();
+        }
+
+        //鍊兼敼鍙樹簨浠�
+        private void gridView1_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
+        {
+            this.StateChangedEvent?.Invoke(_allBindingList?.ToList());
+        }
+
+
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListViewCtrl.resx b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/HydroPumpListExtendGridCtrl.resx
similarity index 68%
copy from WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListViewCtrl.resx
copy to WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/HydroPumpListExtendGridCtrl.resx
index 91d6a51..29f6747 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListViewCtrl.resx
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/HydroPumpListExtendGridCtrl.resx
@@ -117,37 +117,7 @@
   <resheader name="writer">
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
-  <metadata name="hydroPumpRunViewModelBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>122, 17</value>
-  </metadata>
-  <metadata name="image32.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+  <metadata name="hydroPumpListItemExtendViewModelBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>17, 17</value>
   </metadata>
-  <assembly alias="DevExpress.Utils.v23.2" name="DevExpress.Utils.v23.2, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
-  <data name="image32.ImageStream" type="DevExpress.Utils.ImageCollectionStreamer, DevExpress.Utils.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLlV0aWxzLnYyMy4yLCBWZXJzaW9uPTIzLjIu
-        NC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEMAwAAAFFT
-        eXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRv
-        a2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAAChEZXZFeHByZXNzLlV0aWxzLkltYWdlQ29sbGVjdGlvblN0
-        cmVhbWVyAgAAAAlJbWFnZVNpemUERGF0YQQHE1N5c3RlbS5EcmF3aW5nLlNpemUDAAAAAgIAAAAF/P//
-        /xNTeXN0ZW0uRHJhd2luZy5TaXplAgAAAAV3aWR0aAZoZWlnaHQAAAgIAwAAACAAAAAgAAAACQUAAAAP
-        BQAAAJEDAAACvgEAAIlQTkcNChoKAAAADUlIRFIAAAAgAAAAIAgGAAAAc3p69AAAAARnQU1BAACxjwv8
-        YQUAAAF1SURBVFhH7VXbbcMwDDRgF3AzRUfpKB2lf2myREbpKBmlFUVKJi2Sotx++oADEok8nqiHpxMn
-        RrHeXz4uX/Pj9TY/kcvPKNfr8k5yMazX9Q2L6oKjHDIAwZpI5X35Hu1E2AC0WxPgpNAMjO+bCRnorpxI
-        4QKX2/KpxRZ2DcCea4kaKaUBmtC70TUgV+C3lFJUWJ1wDcjVz8885uxtTnKg5bkGuGv4TcNkTDGRbgHE
-        wTyFVuyNw3+assHvOw0JWG2FQsUExrRmQTuLeMB7jYI0JNAaYIVqrsE0TzI2esFbwc2gtlqLlGKjigUM
-        lJbzAj71rgp0t4B/E3JsfPUhA7zA/mT7Ty12xPtohQ4hFqEEuob5Wa6dabkXzvGK0aKnghfemES8wp5g
-        gtTstF834LNngF/ZXuwhA5BD6Q1wG0ps4PAdMmC86XzlXpzAfxhADXn4vC4JHDGQD6j5FsC1DKy84JAB
-        g6H7vsefDKQuQNFwu0+cqJimX0b9nRk3FaMvAAAAAElFTkSuQmCCywEAAIlQTkcNChoKAAAADUlIRFIA
-        AAAgAAAAIAgGAAAAc3p69AAAAARnQU1BAACxjwv8YQUAAAGCSURBVFhH7VXBEcMwCMsoHaWjdISM0E06
-        SkfpKK3kwz5MADvuN7rT5YIFVohDtgsXzmLf9wf4Aj/C7wLvUm4OSLiB3NQrtsJ5AxSbZMs3eLYTcwYg
-        ZLu9Ao0iLcA99TNmxgYoMkkuRd4B8afVGeYGIOA79xIPlJQDsEYTUTeGBvQTpC2VFBdYjzoRG8CifvqP
-        xMJ3W5ISQOPlpQa066eEqzGvGL8C5txE2oCYNf6QpRgQte9dQh0Qj9rKjYoJXKnxzL5KkQwQ8YlKQQl1
-        QNwa0BvV3IhvKRNjJEa8btgMqtiQkhIDolpsaACsLe82Seh2tQNEo1eg/wlnx/CUAb1Bd7Jxn43a0hEw
-        +2lNHUI9/8tniCvHcnbAusK4p94z2j7rA7CoN65kkWzjuCCAdV0zb78Rz3JkwB1qLiBYMRBONqzpv+nU
-        4Vsx4M50xO2wyv9+BER/G8A9a9jDN57/BIUmcYY8oNEsYGz85BUQrxiIOP7eLZD0jwF2gQNort0XLjRs
-        2w9oZulV76wILQAAAABJRU5ErkJgggs=
-</value>
-  </data>
 </root>
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/HydroPumpListItemExtendViewModel.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/HydroPumpListItemExtendViewModel.cs
new file mode 100644
index 0000000..c09e196
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/HydroPumpListItemExtendViewModel.cs
@@ -0,0 +1,69 @@
+锘縩amespace Yw.WinFrmUI
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public class HydroPumpListItemExtendViewModel
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public HydroPumpListItemExtendViewModel(Yw.Model.HydroPumpInfo rhs, List<Yw.Model.HydroPumpInfo> allPumpList)
+        {
+            this.Code = rhs.Code;
+            this.Name = rhs.Name;
+            if (allPumpList != null && allPumpList.Count > 0)
+            {
+                var index = allPumpList.IndexOf(rhs);
+                this.Color = HydroPumpCurveColorHelper.GetRandomColor(index);
+            }
+            this.Hz = Math.Round(rhs.RatedHz * rhs.SpeedRatio, 1);
+            this.Extend = 100;
+            this.RunStatus = rhs.LinkStatus == Yw.Hydro.LinkStatus.Open;
+            this.Vmo = rhs;
+        }
+
+        /// <summary>
+        /// 缂栫爜
+        /// </summary>
+        [Display(Name = "缂栫爜")]
+        public string Code { get; set; }
+
+        /// <summary>
+        /// 鍚嶇О
+        /// </summary>
+        [Display(Name = "鍚嶇О")]
+        public string Name { get; set; }
+
+        /// <summary>
+        /// 棰滆壊
+        /// </summary>
+        [Display(Name = "棰滆壊")]
+        public Color Color { get; set; }
+
+        /// <summary>
+        /// 棰戠巼
+        /// </summary>
+        [Display(Name = "棰戠巼(hz)")]
+        public double Hz { get; set; }
+
+        /// <summary>
+        /// 寤堕暱
+        /// </summary>
+        [Display(Name = "寤堕暱(%)")]
+        public double Extend { get; set; }
+
+        /// <summary>
+        /// 杩愯鐘舵��
+        /// </summary>
+        [Display(Name = "杩愯鐘舵��")]
+        public bool RunStatus { get; set; }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public Yw.Model.HydroPumpInfo Vmo { get; set; }
+
+
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/03-query/HydroPumpQueryPointListGridCtrl.Designer.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/03-query/HydroPumpQueryPointListGridCtrl.Designer.cs
new file mode 100644
index 0000000..4badbe6
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/03-query/HydroPumpQueryPointListGridCtrl.Designer.cs
@@ -0,0 +1,132 @@
+锘縩amespace Yw.WinFrmUI
+{
+    partial class HydroPumpQueryPointListGridCtrl
+    {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            components = new Container();
+            gridControl1 = new DevExpress.XtraGrid.GridControl();
+            gridView1 = new DevExpress.XtraGrid.Views.Grid.GridView();
+            hydroPumpQueryPointViewModelBindingSource = new BindingSource(components);
+            colCode = new DevExpress.XtraGrid.Columns.GridColumn();
+            colName = new DevExpress.XtraGrid.Columns.GridColumn();
+            colQueryQ = new DevExpress.XtraGrid.Columns.GridColumn();
+            colQueryH = new DevExpress.XtraGrid.Columns.GridColumn();
+            colQueryP = new DevExpress.XtraGrid.Columns.GridColumn();
+            colQueryE = new DevExpress.XtraGrid.Columns.GridColumn();
+            ((ISupportInitialize)gridControl1).BeginInit();
+            ((ISupportInitialize)gridView1).BeginInit();
+            ((ISupportInitialize)hydroPumpQueryPointViewModelBindingSource).BeginInit();
+            SuspendLayout();
+            // 
+            // gridControl1
+            // 
+            gridControl1.DataSource = hydroPumpQueryPointViewModelBindingSource;
+            gridControl1.Dock = DockStyle.Fill;
+            gridControl1.Location = new Point(0, 0);
+            gridControl1.MainView = gridView1;
+            gridControl1.Name = "gridControl1";
+            gridControl1.Size = new Size(684, 445);
+            gridControl1.TabIndex = 0;
+            gridControl1.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] { gridView1 });
+            // 
+            // gridView1
+            // 
+            gridView1.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] { colCode, colName, colQueryQ, colQueryH, colQueryP, colQueryE });
+            gridView1.GridControl = gridControl1;
+            gridView1.Name = "gridView1";
+            // 
+            // hydroPumpQueryPointViewModelBindingSource
+            // 
+            hydroPumpQueryPointViewModelBindingSource.DataSource = typeof(HydroPumpQueryPointViewModel);
+            // 
+            // colCode
+            // 
+            colCode.FieldName = "Code";
+            colCode.Name = "colCode";
+            // 
+            // colName
+            // 
+            colName.FieldName = "Name";
+            colName.Name = "colName";
+            colName.Visible = true;
+            colName.VisibleIndex = 0;
+            // 
+            // colQueryQ
+            // 
+            colQueryQ.FieldName = "QueryQ";
+            colQueryQ.Name = "colQueryQ";
+            colQueryQ.Visible = true;
+            colQueryQ.VisibleIndex = 1;
+            // 
+            // colQueryH
+            // 
+            colQueryH.FieldName = "QueryH";
+            colQueryH.Name = "colQueryH";
+            colQueryH.Visible = true;
+            colQueryH.VisibleIndex = 2;
+            // 
+            // colQueryP
+            // 
+            colQueryP.FieldName = "QueryP";
+            colQueryP.Name = "colQueryP";
+            colQueryP.Visible = true;
+            colQueryP.VisibleIndex = 3;
+            // 
+            // colQueryE
+            // 
+            colQueryE.FieldName = "QueryE";
+            colQueryE.Name = "colQueryE";
+            colQueryE.Visible = true;
+            colQueryE.VisibleIndex = 4;
+            // 
+            // HydroPumpQueryPointListGridCtrl
+            // 
+            AutoScaleDimensions = new SizeF(7F, 14F);
+            AutoScaleMode = AutoScaleMode.Font;
+            Controls.Add(gridControl1);
+            Name = "HydroPumpQueryPointListGridCtrl";
+            Size = new Size(684, 445);
+            ((ISupportInitialize)gridControl1).EndInit();
+            ((ISupportInitialize)gridView1).EndInit();
+            ((ISupportInitialize)hydroPumpQueryPointViewModelBindingSource).EndInit();
+            ResumeLayout(false);
+        }
+
+        #endregion
+
+        private DevExpress.XtraGrid.GridControl gridControl1;
+        private DevExpress.XtraGrid.Views.Grid.GridView gridView1;
+        private BindingSource hydroPumpQueryPointViewModelBindingSource;
+        private DevExpress.XtraGrid.Columns.GridColumn colCode;
+        private DevExpress.XtraGrid.Columns.GridColumn colName;
+        private DevExpress.XtraGrid.Columns.GridColumn colQueryQ;
+        private DevExpress.XtraGrid.Columns.GridColumn colQueryH;
+        private DevExpress.XtraGrid.Columns.GridColumn colQueryP;
+        private DevExpress.XtraGrid.Columns.GridColumn colQueryE;
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/03-query/HydroPumpQueryPointListGridCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/03-query/HydroPumpQueryPointListGridCtrl.cs
new file mode 100644
index 0000000..904be0b
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/03-query/HydroPumpQueryPointListGridCtrl.cs
@@ -0,0 +1,36 @@
+锘縰sing DevExpress.Xpo.Helpers;
+using DevExpress.XtraEditors;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace Yw.WinFrmUI
+{
+    public partial class HydroPumpQueryPointListGridCtrl : DevExpress.XtraEditors.XtraUserControl
+    {
+        public HydroPumpQueryPointListGridCtrl()
+        {
+            InitializeComponent();
+            this.gridView1.SetNormalView();
+        }
+
+        private List<HydroPumpQueryPointViewModel> _allBindingList = null;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public void SetBindingData(List<HydroPumpQueryPointViewModel> allList)
+        {
+            _allBindingList = allList;
+            this.hydroPumpQueryPointViewModelBindingSource.DataSource = _allBindingList;
+            this.hydroPumpQueryPointViewModelBindingSource.ResetBindings(false);
+        }
+
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListViewCtrl.resx b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/03-query/HydroPumpQueryPointListGridCtrl.resx
similarity index 68%
copy from WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListViewCtrl.resx
copy to WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/03-query/HydroPumpQueryPointListGridCtrl.resx
index 91d6a51..18639be 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListViewCtrl.resx
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/03-query/HydroPumpQueryPointListGridCtrl.resx
@@ -117,37 +117,7 @@
   <resheader name="writer">
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
-  <metadata name="hydroPumpRunViewModelBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>122, 17</value>
-  </metadata>
-  <metadata name="image32.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+  <metadata name="hydroPumpQueryPointViewModelBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>17, 17</value>
   </metadata>
-  <assembly alias="DevExpress.Utils.v23.2" name="DevExpress.Utils.v23.2, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
-  <data name="image32.ImageStream" type="DevExpress.Utils.ImageCollectionStreamer, DevExpress.Utils.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLlV0aWxzLnYyMy4yLCBWZXJzaW9uPTIzLjIu
-        NC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEMAwAAAFFT
-        eXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRv
-        a2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAAChEZXZFeHByZXNzLlV0aWxzLkltYWdlQ29sbGVjdGlvblN0
-        cmVhbWVyAgAAAAlJbWFnZVNpemUERGF0YQQHE1N5c3RlbS5EcmF3aW5nLlNpemUDAAAAAgIAAAAF/P//
-        /xNTeXN0ZW0uRHJhd2luZy5TaXplAgAAAAV3aWR0aAZoZWlnaHQAAAgIAwAAACAAAAAgAAAACQUAAAAP
-        BQAAAJEDAAACvgEAAIlQTkcNChoKAAAADUlIRFIAAAAgAAAAIAgGAAAAc3p69AAAAARnQU1BAACxjwv8
-        YQUAAAF1SURBVFhH7VXbbcMwDDRgF3AzRUfpKB2lf2myREbpKBmlFUVKJi2Sotx++oADEok8nqiHpxMn
-        RrHeXz4uX/Pj9TY/kcvPKNfr8k5yMazX9Q2L6oKjHDIAwZpI5X35Hu1E2AC0WxPgpNAMjO+bCRnorpxI
-        4QKX2/KpxRZ2DcCea4kaKaUBmtC70TUgV+C3lFJUWJ1wDcjVz8885uxtTnKg5bkGuGv4TcNkTDGRbgHE
-        wTyFVuyNw3+assHvOw0JWG2FQsUExrRmQTuLeMB7jYI0JNAaYIVqrsE0TzI2esFbwc2gtlqLlGKjigUM
-        lJbzAj71rgp0t4B/E3JsfPUhA7zA/mT7Ty12xPtohQ4hFqEEuob5Wa6dabkXzvGK0aKnghfemES8wp5g
-        gtTstF834LNngF/ZXuwhA5BD6Q1wG0ps4PAdMmC86XzlXpzAfxhADXn4vC4JHDGQD6j5FsC1DKy84JAB
-        g6H7vsefDKQuQNFwu0+cqJimX0b9nRk3FaMvAAAAAElFTkSuQmCCywEAAIlQTkcNChoKAAAADUlIRFIA
-        AAAgAAAAIAgGAAAAc3p69AAAAARnQU1BAACxjwv8YQUAAAGCSURBVFhH7VXBEcMwCMsoHaWjdISM0E06
-        SkfpKK3kwz5MADvuN7rT5YIFVohDtgsXzmLf9wf4Aj/C7wLvUm4OSLiB3NQrtsJ5AxSbZMs3eLYTcwYg
-        ZLu9Ao0iLcA99TNmxgYoMkkuRd4B8afVGeYGIOA79xIPlJQDsEYTUTeGBvQTpC2VFBdYjzoRG8CifvqP
-        xMJ3W5ISQOPlpQa066eEqzGvGL8C5txE2oCYNf6QpRgQte9dQh0Qj9rKjYoJXKnxzL5KkQwQ8YlKQQl1
-        QNwa0BvV3IhvKRNjJEa8btgMqtiQkhIDolpsaACsLe82Seh2tQNEo1eg/wlnx/CUAb1Bd7Jxn43a0hEw
-        +2lNHUI9/8tniCvHcnbAusK4p94z2j7rA7CoN65kkWzjuCCAdV0zb78Rz3JkwB1qLiBYMRBONqzpv+nU
-        4Vsx4M50xO2wyv9+BER/G8A9a9jDN57/BIUmcYY8oNEsYGz85BUQrxiIOP7eLZD0jwF2gQNort0XLjRs
-        2w9oZulV76wILQAAAABJRU5ErkJgggs=
-</value>
-  </data>
 </root>
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/03-query/HydroPumpQueryPointViewModel.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/03-query/HydroPumpQueryPointViewModel.cs
new file mode 100644
index 0000000..1cf82ea
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/03-query/HydroPumpQueryPointViewModel.cs
@@ -0,0 +1,45 @@
+锘縩amespace Yw.WinFrmUI
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public class HydroPumpQueryPointViewModel
+    {
+        /// <summary>
+        /// 缂栫爜
+        /// </summary>
+        [Display(Name = "缂栫爜")]
+        public string Code { get; set; }
+
+        /// <summary>
+        /// 鍚嶇О
+        /// </summary>
+        [Display(Name = "鍚嶇О")]
+        public string Name { get; set; }
+
+        /// <summary>
+        /// 娴侀噺
+        /// </summary>
+        [Display(Name = "娴侀噺(m鲁/h)")]
+        public double? QueryQ { get; set; }
+
+        /// <summary>
+        /// 鎵▼
+        /// </summary>
+        [Display(Name = "鎵▼(m)")]
+        public double? QueryH { get; set; }
+
+        /// <summary>
+        /// 鍔熺巼
+        /// </summary>
+        [Display(Name = "鍔熺巼(kW)")]
+        public double? QueryP { get; set; }
+
+        /// <summary>
+        /// 鏁堢巼
+        /// </summary>
+        [Display(Name = "鏁堢巼(%)")]
+        public double? QueryE { get; set; }
+
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/04-design/HydroPumpDesignPointListGridCtrl.Designer.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/04-design/HydroPumpDesignPointListGridCtrl.Designer.cs
new file mode 100644
index 0000000..2f9f6a6
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/04-design/HydroPumpDesignPointListGridCtrl.Designer.cs
@@ -0,0 +1,132 @@
+锘縩amespace Yw.WinFrmUI
+{
+    partial class HydroPumpDesignPointListGridCtrl
+    {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            components = new Container();
+            gridControl1 = new DevExpress.XtraGrid.GridControl();
+            gridView1 = new DevExpress.XtraGrid.Views.Grid.GridView();
+            hydroPumpDesignPointViewModelBindingSource = new BindingSource(components);
+            colCode = new DevExpress.XtraGrid.Columns.GridColumn();
+            colName = new DevExpress.XtraGrid.Columns.GridColumn();
+            colDesignQ = new DevExpress.XtraGrid.Columns.GridColumn();
+            colDesignH = new DevExpress.XtraGrid.Columns.GridColumn();
+            colDesignP = new DevExpress.XtraGrid.Columns.GridColumn();
+            colDesignE = new DevExpress.XtraGrid.Columns.GridColumn();
+            ((ISupportInitialize)gridControl1).BeginInit();
+            ((ISupportInitialize)gridView1).BeginInit();
+            ((ISupportInitialize)hydroPumpDesignPointViewModelBindingSource).BeginInit();
+            SuspendLayout();
+            // 
+            // gridControl1
+            // 
+            gridControl1.DataSource = hydroPumpDesignPointViewModelBindingSource;
+            gridControl1.Dock = DockStyle.Fill;
+            gridControl1.Location = new Point(0, 0);
+            gridControl1.MainView = gridView1;
+            gridControl1.Name = "gridControl1";
+            gridControl1.Size = new Size(684, 445);
+            gridControl1.TabIndex = 0;
+            gridControl1.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] { gridView1 });
+            // 
+            // gridView1
+            // 
+            gridView1.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] { colCode, colName, colDesignQ, colDesignH, colDesignP, colDesignE });
+            gridView1.GridControl = gridControl1;
+            gridView1.Name = "gridView1";
+            // 
+            // hydroPumpDesignPointViewModelBindingSource
+            // 
+            hydroPumpDesignPointViewModelBindingSource.DataSource = typeof(HydroPumpDesignPointViewModel);
+            // 
+            // colCode
+            // 
+            colCode.FieldName = "Code";
+            colCode.Name = "colCode";
+            // 
+            // colName
+            // 
+            colName.FieldName = "Name";
+            colName.Name = "colName";
+            colName.Visible = true;
+            colName.VisibleIndex = 0;
+            // 
+            // colDesignQ
+            // 
+            colDesignQ.FieldName = "DesignQ";
+            colDesignQ.Name = "colDesignQ";
+            colDesignQ.Visible = true;
+            colDesignQ.VisibleIndex = 1;
+            // 
+            // colDesignH
+            // 
+            colDesignH.FieldName = "DesignH";
+            colDesignH.Name = "colDesignH";
+            colDesignH.Visible = true;
+            colDesignH.VisibleIndex = 2;
+            // 
+            // colDesignP
+            // 
+            colDesignP.FieldName = "DesignP";
+            colDesignP.Name = "colDesignP";
+            colDesignP.Visible = true;
+            colDesignP.VisibleIndex = 3;
+            // 
+            // colDesignE
+            // 
+            colDesignE.FieldName = "DesignE";
+            colDesignE.Name = "colDesignE";
+            colDesignE.Visible = true;
+            colDesignE.VisibleIndex = 4;
+            // 
+            // HydroPumpDesignPointListGridCtrl
+            // 
+            AutoScaleDimensions = new SizeF(7F, 14F);
+            AutoScaleMode = AutoScaleMode.Font;
+            Controls.Add(gridControl1);
+            Name = "HydroPumpDesignPointListGridCtrl";
+            Size = new Size(684, 445);
+            ((ISupportInitialize)gridControl1).EndInit();
+            ((ISupportInitialize)gridView1).EndInit();
+            ((ISupportInitialize)hydroPumpDesignPointViewModelBindingSource).EndInit();
+            ResumeLayout(false);
+        }
+
+        #endregion
+
+        private DevExpress.XtraGrid.GridControl gridControl1;
+        private DevExpress.XtraGrid.Views.Grid.GridView gridView1;
+        private BindingSource hydroPumpDesignPointViewModelBindingSource;
+        private DevExpress.XtraGrid.Columns.GridColumn colCode;
+        private DevExpress.XtraGrid.Columns.GridColumn colName;
+        private DevExpress.XtraGrid.Columns.GridColumn colDesignQ;
+        private DevExpress.XtraGrid.Columns.GridColumn colDesignH;
+        private DevExpress.XtraGrid.Columns.GridColumn colDesignP;
+        private DevExpress.XtraGrid.Columns.GridColumn colDesignE;
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/04-design/HydroPumpDesignPointListGridCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/04-design/HydroPumpDesignPointListGridCtrl.cs
new file mode 100644
index 0000000..acb4712
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/04-design/HydroPumpDesignPointListGridCtrl.cs
@@ -0,0 +1,37 @@
+锘縰sing DevExpress.Xpo.Helpers;
+using DevExpress.XtraEditors;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace Yw.WinFrmUI
+{
+    public partial class HydroPumpDesignPointListGridCtrl : DevExpress.XtraEditors.XtraUserControl
+    {
+        public HydroPumpDesignPointListGridCtrl()
+        {
+            InitializeComponent();
+            this.gridView1.SetNormalView();
+        }
+
+        private List<HydroPumpDesignPointViewModel> _allBindingList = null;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public void SetBindingData(List<HydroPumpDesignPointViewModel> allList)
+        {
+            _allBindingList = allList;
+            this.hydroPumpDesignPointViewModelBindingSource.DataSource = _allBindingList;
+            this.hydroPumpDesignPointViewModelBindingSource.ResetBindings(false);
+        }
+
+
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListViewCtrl.resx b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/04-design/HydroPumpDesignPointListGridCtrl.resx
similarity index 68%
copy from WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListViewCtrl.resx
copy to WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/04-design/HydroPumpDesignPointListGridCtrl.resx
index 91d6a51..eea59e9 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListViewCtrl.resx
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/04-design/HydroPumpDesignPointListGridCtrl.resx
@@ -117,37 +117,7 @@
   <resheader name="writer">
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
-  <metadata name="hydroPumpRunViewModelBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>122, 17</value>
-  </metadata>
-  <metadata name="image32.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+  <metadata name="hydroPumpDesignPointViewModelBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>17, 17</value>
   </metadata>
-  <assembly alias="DevExpress.Utils.v23.2" name="DevExpress.Utils.v23.2, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
-  <data name="image32.ImageStream" type="DevExpress.Utils.ImageCollectionStreamer, DevExpress.Utils.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLlV0aWxzLnYyMy4yLCBWZXJzaW9uPTIzLjIu
-        NC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEMAwAAAFFT
-        eXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRv
-        a2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAAChEZXZFeHByZXNzLlV0aWxzLkltYWdlQ29sbGVjdGlvblN0
-        cmVhbWVyAgAAAAlJbWFnZVNpemUERGF0YQQHE1N5c3RlbS5EcmF3aW5nLlNpemUDAAAAAgIAAAAF/P//
-        /xNTeXN0ZW0uRHJhd2luZy5TaXplAgAAAAV3aWR0aAZoZWlnaHQAAAgIAwAAACAAAAAgAAAACQUAAAAP
-        BQAAAJEDAAACvgEAAIlQTkcNChoKAAAADUlIRFIAAAAgAAAAIAgGAAAAc3p69AAAAARnQU1BAACxjwv8
-        YQUAAAF1SURBVFhH7VXbbcMwDDRgF3AzRUfpKB2lf2myREbpKBmlFUVKJi2Sotx++oADEok8nqiHpxMn
-        RrHeXz4uX/Pj9TY/kcvPKNfr8k5yMazX9Q2L6oKjHDIAwZpI5X35Hu1E2AC0WxPgpNAMjO+bCRnorpxI
-        4QKX2/KpxRZ2DcCea4kaKaUBmtC70TUgV+C3lFJUWJ1wDcjVz8885uxtTnKg5bkGuGv4TcNkTDGRbgHE
-        wTyFVuyNw3+assHvOw0JWG2FQsUExrRmQTuLeMB7jYI0JNAaYIVqrsE0TzI2esFbwc2gtlqLlGKjigUM
-        lJbzAj71rgp0t4B/E3JsfPUhA7zA/mT7Ty12xPtohQ4hFqEEuob5Wa6dabkXzvGK0aKnghfemES8wp5g
-        gtTstF834LNngF/ZXuwhA5BD6Q1wG0ps4PAdMmC86XzlXpzAfxhADXn4vC4JHDGQD6j5FsC1DKy84JAB
-        g6H7vsefDKQuQNFwu0+cqJimX0b9nRk3FaMvAAAAAElFTkSuQmCCywEAAIlQTkcNChoKAAAADUlIRFIA
-        AAAgAAAAIAgGAAAAc3p69AAAAARnQU1BAACxjwv8YQUAAAGCSURBVFhH7VXBEcMwCMsoHaWjdISM0E06
-        SkfpKK3kwz5MADvuN7rT5YIFVohDtgsXzmLf9wf4Aj/C7wLvUm4OSLiB3NQrtsJ5AxSbZMs3eLYTcwYg
-        ZLu9Ao0iLcA99TNmxgYoMkkuRd4B8afVGeYGIOA79xIPlJQDsEYTUTeGBvQTpC2VFBdYjzoRG8CifvqP
-        xMJ3W5ISQOPlpQa066eEqzGvGL8C5txE2oCYNf6QpRgQte9dQh0Qj9rKjYoJXKnxzL5KkQwQ8YlKQQl1
-        QNwa0BvV3IhvKRNjJEa8btgMqtiQkhIDolpsaACsLe82Seh2tQNEo1eg/wlnx/CUAb1Bd7Jxn43a0hEw
-        +2lNHUI9/8tniCvHcnbAusK4p94z2j7rA7CoN65kkWzjuCCAdV0zb78Rz3JkwB1qLiBYMRBONqzpv+nU
-        4Vsx4M50xO2wyv9+BER/G8A9a9jDN57/BIUmcYY8oNEsYGz85BUQrxiIOP7eLZD0jwF2gQNort0XLjRs
-        2w9oZulV76wILQAAAABJRU5ErkJgggs=
-</value>
-  </data>
 </root>
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/04-design/HydroPumpDesignPointViewModel.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/04-design/HydroPumpDesignPointViewModel.cs
new file mode 100644
index 0000000..a29bd91
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/04-design/HydroPumpDesignPointViewModel.cs
@@ -0,0 +1,45 @@
+锘縩amespace Yw.WinFrmUI
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public class HydroPumpDesignPointViewModel
+    {
+        /// <summary>
+        /// 缂栫爜
+        /// </summary>
+        [Display(Name = "缂栫爜")]
+        public string Code { get; set; }
+
+        /// <summary>
+        /// 鍚嶇О
+        /// </summary>
+        [Display(Name = "鍚嶇О")]
+        public string Name { get; set; }
+
+        /// <summary>
+        /// 娴侀噺
+        /// </summary>
+        [Display(Name = "娴侀噺(m鲁/h)")]
+        public double? DesignQ { get; set; }
+
+        /// <summary>
+        /// 鎵▼
+        /// </summary>
+        [Display(Name = "鎵▼(m)")]
+        public double? DesignH { get; set; }
+
+        /// <summary>
+        /// 鍔熺巼
+        /// </summary>
+        [Display(Name = "鍔熺巼(kW)")]
+        public double? DesignP { get; set; }
+
+        /// <summary>
+        /// 鏁堢巼
+        /// </summary>
+        [Display(Name = "鏁堢巼(%)")]
+        public double? DesignE { get; set; }
+
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/05-state/HydroPumpListItemStateViewModel.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/05-state/HydroPumpListItemStateViewModel.cs
new file mode 100644
index 0000000..c9b7edd
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/05-state/HydroPumpListItemStateViewModel.cs
@@ -0,0 +1,84 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Yw.WinFrmUI
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public class HydroPumpListItemStateViewModel
+    {
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public HydroPumpListItemStateViewModel() { }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public HydroPumpListItemStateViewModel(Yw.Model.HydroPumpInfo rhs)
+        {
+            this.Code = rhs.Code;
+            this.Name = rhs.Name;
+            if (rhs.LinkStatus == Yw.Hydro.PumpStatus.Open)
+            {
+                this.Image = Yw.WinFrmUI.Hydro.Core.Properties.Resources.pump_run_32;
+            }
+            else
+            {
+                this.Image = Yw.WinFrmUI.Hydro.Core.Properties.Resources.pump_shut_32;
+
+            }
+            this.RunStatus = rhs.LinkStatus == Yw.Hydro.PumpStatus.Open;
+            this.CurrentHz = Math.Round(rhs.RatedHz * rhs.SpeedRatio, 1);
+            this.Description = rhs.Description;
+
+            this.Vmo = rhs;
+        }
+
+        /// <summary>
+        /// 缂栫爜
+        /// </summary>
+        [Display(Name = "缂栫爜")]
+        public string Code { get; set; }
+
+        /// <summary>
+        /// 鍚嶇О
+        /// </summary>
+        [Display(Name = "鍚嶇О")]
+        public string Name { get; set; }
+
+        /// <summary>
+        /// 鍥剧墖
+        /// </summary>
+        [Display(Name = "鍥剧墖")]
+        public Image Image { get; set; }
+
+        /// <summary>
+        /// 杩愯鐘舵��
+        /// </summary>
+        [Display(Name = "杩愯鐘舵��")]
+        public bool RunStatus { get; set; }
+
+        /// <summary>
+        /// 棰戠巼
+        /// </summary>
+        [Display(Name = "棰戠巼")]
+        public double CurrentHz { get; set; }
+
+        /// <summary>
+        /// 璇存槑
+        /// </summary>
+        [Display(Name = "璇存槑")]
+        public string Description { get; set; }
+
+        /// <summary>
+        /// vmo
+        /// </summary>
+        public Yw.Model.HydroPumpInfo Vmo { get; set; }
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListViewCtrl.Designer.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/05-state/HydroPumpListStateEditCtrl.Designer.cs
similarity index 64%
copy from WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListViewCtrl.Designer.cs
copy to WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/05-state/HydroPumpListStateEditCtrl.Designer.cs
index 536d0c6..3282b73 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListViewCtrl.Designer.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/05-state/HydroPumpListStateEditCtrl.Designer.cs
@@ -1,6 +1,6 @@
 锘縩amespace Yw.WinFrmUI
 {
-    partial class HydroPumpRunListViewCtrl
+    partial class HydroPumpListStateEditCtrl
     {
         /// <summary> 
         /// Required designer variable.
@@ -37,52 +37,51 @@
             DevExpress.XtraEditors.TableLayout.TemplatedItemElement templatedItemElement2 = new DevExpress.XtraEditors.TableLayout.TemplatedItemElement();
             DevExpress.XtraEditors.TableLayout.TemplatedItemElement templatedItemElement3 = new DevExpress.XtraEditors.TableLayout.TemplatedItemElement();
             DevExpress.XtraEditors.TableLayout.TableRowDefinition tableRowDefinition1 = new DevExpress.XtraEditors.TableLayout.TableRowDefinition();
-            ComponentResourceManager resources = new ComponentResourceManager(typeof(HydroPumpRunListViewCtrl));
+            hydroPumpListItemStateViewModelBindingSource = new BindingSource(components);
             imageListBoxControl1 = new DevExpress.XtraEditors.ImageListBoxControl();
-            hydroPumpRunViewModelBindingSource = new BindingSource(components);
-            image32 = new DevExpress.Utils.ImageCollection(components);
+            ((ISupportInitialize)hydroPumpListItemStateViewModelBindingSource).BeginInit();
             ((ISupportInitialize)imageListBoxControl1).BeginInit();
-            ((ISupportInitialize)hydroPumpRunViewModelBindingSource).BeginInit();
-            ((ISupportInitialize)image32).BeginInit();
             SuspendLayout();
+            // 
+            // hydroPumpListItemStateViewModelBindingSource
+            // 
+            hydroPumpListItemStateViewModelBindingSource.DataSource = typeof(HydroPumpListItemStateViewModel);
             // 
             // imageListBoxControl1
             // 
-            imageListBoxControl1.DataSource = hydroPumpRunViewModelBindingSource;
-            imageListBoxControl1.DisplayMember = "Name";
+            imageListBoxControl1.DataSource = hydroPumpListItemStateViewModelBindingSource;
             imageListBoxControl1.Dock = DockStyle.Fill;
-            imageListBoxControl1.ImageIndexMember = "ImageIndex";
-            imageListBoxControl1.ImageList = image32;
-            imageListBoxControl1.ImageMember = "ImageIndex";
-            imageListBoxControl1.ItemHeight = 36;
+            imageListBoxControl1.ItemHeight = 34;
             imageListBoxControl1.Location = new Point(0, 0);
             imageListBoxControl1.Name = "imageListBoxControl1";
-            imageListBoxControl1.Size = new Size(285, 624);
+            imageListBoxControl1.Size = new Size(261, 673);
             imageListBoxControl1.TabIndex = 0;
+            tableColumnDefinition1.Length.Type = DevExpress.XtraEditors.TableLayout.TableDefinitionLengthType.Pixel;
             tableColumnDefinition1.Length.Value = 40D;
-            tableColumnDefinition2.Length.Value = 171D;
-            tableColumnDefinition3.Length.Value = 70D;
+            tableColumnDefinition2.Length.Value = 210D;
+            tableColumnDefinition3.Length.Type = DevExpress.XtraEditors.TableLayout.TableDefinitionLengthType.Pixel;
+            tableColumnDefinition3.Length.Value = 66D;
             itemTemplateBase1.Columns.Add(tableColumnDefinition1);
             itemTemplateBase1.Columns.Add(tableColumnDefinition2);
             itemTemplateBase1.Columns.Add(tableColumnDefinition3);
-            templatedItemElement1.ColumnIndex = 1;
-            templatedItemElement1.FieldName = "Name";
+            templatedItemElement1.FieldName = "Image";
             templatedItemElement1.ImageOptions.ImageAlignment = DevExpress.XtraEditors.TileItemContentAlignment.MiddleCenter;
             templatedItemElement1.ImageOptions.ImageScaleMode = DevExpress.XtraEditors.TileItemImageScaleMode.ZoomInside;
-            templatedItemElement1.Text = "Name";
-            templatedItemElement1.TextAlignment = DevExpress.XtraEditors.TileItemContentAlignment.MiddleLeft;
-            templatedItemElement2.Appearance.Normal.ForeColor = Color.Silver;
-            templatedItemElement2.Appearance.Normal.Options.UseForeColor = true;
-            templatedItemElement2.ColumnIndex = 2;
-            templatedItemElement2.FieldName = "CurrentHz";
+            templatedItemElement1.ImageOptions.ImageSize = new Size(32, 32);
+            templatedItemElement1.Text = "Image";
+            templatedItemElement1.TextAlignment = DevExpress.XtraEditors.TileItemContentAlignment.MiddleCenter;
+            templatedItemElement2.ColumnIndex = 1;
+            templatedItemElement2.FieldName = "Name";
             templatedItemElement2.ImageOptions.ImageAlignment = DevExpress.XtraEditors.TileItemContentAlignment.MiddleCenter;
             templatedItemElement2.ImageOptions.ImageScaleMode = DevExpress.XtraEditors.TileItemImageScaleMode.ZoomInside;
-            templatedItemElement2.Text = "CurrentHz";
-            templatedItemElement2.TextAlignment = DevExpress.XtraEditors.TileItemContentAlignment.MiddleCenter;
-            templatedItemElement3.FieldName = "Image";
+            templatedItemElement2.Text = "Name";
+            templatedItemElement2.TextAlignment = DevExpress.XtraEditors.TileItemContentAlignment.MiddleLeft;
+            templatedItemElement2.TextLocation = new Point(10, 0);
+            templatedItemElement3.ColumnIndex = 2;
+            templatedItemElement3.FieldName = "CurrentHz";
             templatedItemElement3.ImageOptions.ImageAlignment = DevExpress.XtraEditors.TileItemContentAlignment.MiddleCenter;
             templatedItemElement3.ImageOptions.ImageScaleMode = DevExpress.XtraEditors.TileItemImageScaleMode.ZoomInside;
-            templatedItemElement3.Text = "Image";
+            templatedItemElement3.Text = "CurrentHz";
             templatedItemElement3.TextAlignment = DevExpress.XtraEditors.TileItemContentAlignment.MiddleCenter;
             itemTemplateBase1.Elements.Add(templatedItemElement1);
             itemTemplateBase1.Elements.Add(templatedItemElement2);
@@ -90,37 +89,21 @@
             itemTemplateBase1.Name = "template1";
             itemTemplateBase1.Rows.Add(tableRowDefinition1);
             imageListBoxControl1.Templates.Add(itemTemplateBase1);
-            imageListBoxControl1.ValueMember = "Code";
-            imageListBoxControl1.SelectedValueChanged += imageListBoxControl1_SelectedValueChanged;
             // 
-            // hydroPumpRunViewModelBindingSource
-            // 
-            hydroPumpRunViewModelBindingSource.DataSource = typeof(HydroPumpRunViewModel);
-            // 
-            // image32
-            // 
-            image32.ImageSize = new Size(32, 32);
-            image32.ImageStream = (DevExpress.Utils.ImageCollectionStreamer)resources.GetObject("image32.ImageStream");
-            image32.Images.SetKeyName(0, "pump-run.png");
-            image32.Images.SetKeyName(1, "pump-shut.png");
-            // 
-            // HydroPumpRunListCtrl
+            // HydroPumpListStateEditCtrl
             // 
             AutoScaleDimensions = new SizeF(7F, 14F);
             AutoScaleMode = AutoScaleMode.Font;
             Controls.Add(imageListBoxControl1);
-            Name = "HydroPumpRunListCtrl";
-            Size = new Size(285, 624);
+            Name = "HydroPumpListStateEditCtrl";
+            Size = new Size(261, 673);
+            ((ISupportInitialize)hydroPumpListItemStateViewModelBindingSource).EndInit();
             ((ISupportInitialize)imageListBoxControl1).EndInit();
-            ((ISupportInitialize)hydroPumpRunViewModelBindingSource).EndInit();
-            ((ISupportInitialize)image32).EndInit();
             ResumeLayout(false);
         }
 
         #endregion
-
+        private BindingSource hydroPumpListItemStateViewModelBindingSource;
         private DevExpress.XtraEditors.ImageListBoxControl imageListBoxControl1;
-        private DevExpress.Utils.ImageCollection image32;
-        private BindingSource hydroPumpRunViewModelBindingSource;
     }
 }
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/05-state/HydroPumpListStateEditCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/05-state/HydroPumpListStateEditCtrl.cs
new file mode 100644
index 0000000..94f8932
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/05-state/HydroPumpListStateEditCtrl.cs
@@ -0,0 +1,54 @@
+锘縰sing DevExpress.Xpo.Helpers;
+using DevExpress.XtraEditors;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace Yw.WinFrmUI
+{
+    public partial class HydroPumpListStateEditCtrl : DevExpress.XtraEditors.XtraUserControl
+    {
+        public HydroPumpListStateEditCtrl()
+        {
+            InitializeComponent();
+        }
+
+        private BindingList<HydroPumpListItemStateViewModel> _allBindingList = null;
+
+        /// <summary>
+        /// 缁戝畾鏁版嵁
+        /// </summary>
+        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        {
+            SetBindingData(hydroInfo?.Pumps);
+        }
+
+        /// <summary>
+        /// 缁戝畾鏁版嵁
+        /// </summary>
+        public void SetBindingData(List<Yw.Model.HydroPumpInfo> allPumpList)
+        {
+            var list = allPumpList?.Select(x => new HydroPumpListItemStateViewModel(x)).ToList();
+            SetBindingData(list);
+        }
+
+        /// <summary>
+        /// 缁戝畾鏁版嵁
+        /// </summary>
+        public void SetBindingData(List<HydroPumpListItemStateViewModel> allStateList)
+        {
+            _allBindingList = new BindingList<HydroPumpListItemStateViewModel>();
+            allStateList?.ForEach(x => _allBindingList.Add(x));
+            this.hydroPumpListItemStateViewModelBindingSource.DataSource = _allBindingList;
+            this.hydroPumpListItemStateViewModelBindingSource.ResetBindings(false);
+        }
+
+
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListViewCtrl.resx b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/05-state/HydroPumpListStateEditCtrl.resx
similarity index 68%
copy from WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListViewCtrl.resx
copy to WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/05-state/HydroPumpListStateEditCtrl.resx
index 91d6a51..812d835 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListViewCtrl.resx
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/05-state/HydroPumpListStateEditCtrl.resx
@@ -117,37 +117,7 @@
   <resheader name="writer">
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
-  <metadata name="hydroPumpRunViewModelBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>122, 17</value>
-  </metadata>
-  <metadata name="image32.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+  <metadata name="hydroPumpListItemStateViewModelBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>17, 17</value>
   </metadata>
-  <assembly alias="DevExpress.Utils.v23.2" name="DevExpress.Utils.v23.2, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
-  <data name="image32.ImageStream" type="DevExpress.Utils.ImageCollectionStreamer, DevExpress.Utils.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLlV0aWxzLnYyMy4yLCBWZXJzaW9uPTIzLjIu
-        NC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEMAwAAAFFT
-        eXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRv
-        a2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAAChEZXZFeHByZXNzLlV0aWxzLkltYWdlQ29sbGVjdGlvblN0
-        cmVhbWVyAgAAAAlJbWFnZVNpemUERGF0YQQHE1N5c3RlbS5EcmF3aW5nLlNpemUDAAAAAgIAAAAF/P//
-        /xNTeXN0ZW0uRHJhd2luZy5TaXplAgAAAAV3aWR0aAZoZWlnaHQAAAgIAwAAACAAAAAgAAAACQUAAAAP
-        BQAAAJEDAAACvgEAAIlQTkcNChoKAAAADUlIRFIAAAAgAAAAIAgGAAAAc3p69AAAAARnQU1BAACxjwv8
-        YQUAAAF1SURBVFhH7VXbbcMwDDRgF3AzRUfpKB2lf2myREbpKBmlFUVKJi2Sotx++oADEok8nqiHpxMn
-        RrHeXz4uX/Pj9TY/kcvPKNfr8k5yMazX9Q2L6oKjHDIAwZpI5X35Hu1E2AC0WxPgpNAMjO+bCRnorpxI
-        4QKX2/KpxRZ2DcCea4kaKaUBmtC70TUgV+C3lFJUWJ1wDcjVz8885uxtTnKg5bkGuGv4TcNkTDGRbgHE
-        wTyFVuyNw3+assHvOw0JWG2FQsUExrRmQTuLeMB7jYI0JNAaYIVqrsE0TzI2esFbwc2gtlqLlGKjigUM
-        lJbzAj71rgp0t4B/E3JsfPUhA7zA/mT7Ty12xPtohQ4hFqEEuob5Wa6dabkXzvGK0aKnghfemES8wp5g
-        gtTstF834LNngF/ZXuwhA5BD6Q1wG0ps4PAdMmC86XzlXpzAfxhADXn4vC4JHDGQD6j5FsC1DKy84JAB
-        g6H7vsefDKQuQNFwu0+cqJimX0b9nRk3FaMvAAAAAElFTkSuQmCCywEAAIlQTkcNChoKAAAADUlIRFIA
-        AAAgAAAAIAgGAAAAc3p69AAAAARnQU1BAACxjwv8YQUAAAGCSURBVFhH7VXBEcMwCMsoHaWjdISM0E06
-        SkfpKK3kwz5MADvuN7rT5YIFVohDtgsXzmLf9wf4Aj/C7wLvUm4OSLiB3NQrtsJ5AxSbZMs3eLYTcwYg
-        ZLu9Ao0iLcA99TNmxgYoMkkuRd4B8afVGeYGIOA79xIPlJQDsEYTUTeGBvQTpC2VFBdYjzoRG8CifvqP
-        xMJ3W5ISQOPlpQa066eEqzGvGL8C5txE2oCYNf6QpRgQte9dQh0Qj9rKjYoJXKnxzL5KkQwQ8YlKQQl1
-        QNwa0BvV3IhvKRNjJEa8btgMqtiQkhIDolpsaACsLe82Seh2tQNEo1eg/wlnx/CUAb1Bd7Jxn43a0hEw
-        +2lNHUI9/8tniCvHcnbAusK4p94z2j7rA7CoN65kkWzjuCCAdV0zb78Rz3JkwB1qLiBYMRBONqzpv+nU
-        4Vsx4M50xO2wyv9+BER/G8A9a9jDN57/BIUmcYY8oNEsYGz85BUQrxiIOP7eLZD0jwF2gQNort0XLjRs
-        2w9oZulV76wILQAAAABJRU5ErkJgggs=
-</value>
-  </data>
 </root>
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/DataSources/Yw.WinFrmUI.HydroPumpDesignPointViewModel.datasource b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/DataSources/Yw.WinFrmUI.HydroPumpDesignPointViewModel.datasource
new file mode 100644
index 0000000..c938d12
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/DataSources/Yw.WinFrmUI.HydroPumpDesignPointViewModel.datasource
@@ -0,0 +1,10 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="HydroPumpDesignPointViewModel" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+  <TypeInfo>Yw.WinFrmUI.HydroPumpDesignPointViewModel, Yw.WinFrmUI.Hydro.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource>
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/DataSources/Yw.WinFrmUI.HydroPumpListItemExtendViewModel.datasource b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/DataSources/Yw.WinFrmUI.HydroPumpListItemExtendViewModel.datasource
new file mode 100644
index 0000000..ccba482
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/DataSources/Yw.WinFrmUI.HydroPumpListItemExtendViewModel.datasource
@@ -0,0 +1,10 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="HydroPumpListItemExtendViewModel" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+  <TypeInfo>Yw.WinFrmUI.HydroPumpListItemExtendViewModel, Yw.WinFrmUI.Hydro.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource>
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/DataSources/Yw.WinFrmUI.HydroPumpListItemStateViewModel.datasource b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/DataSources/Yw.WinFrmUI.HydroPumpListItemStateViewModel.datasource
new file mode 100644
index 0000000..ceb23fc
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/DataSources/Yw.WinFrmUI.HydroPumpListItemStateViewModel.datasource
@@ -0,0 +1,10 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="HydroPumpListItemStateViewModel" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+  <TypeInfo>Yw.WinFrmUI.HydroPumpListItemStateViewModel, Yw.WinFrmUI.Hydro.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource>
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/DataSources/Yw.WinFrmUI.HydroPumpListViewItemStateViewModel.datasource b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/DataSources/Yw.WinFrmUI.HydroPumpListViewItemStateViewModel.datasource
new file mode 100644
index 0000000..81cd803
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/DataSources/Yw.WinFrmUI.HydroPumpListViewItemStateViewModel.datasource
@@ -0,0 +1,10 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="HydroPumpListViewItemStateViewModel" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+  <TypeInfo>Yw.WinFrmUI.HydroPumpListViewItemStateViewModel, Yw.WinFrmUI.Hydro.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource>
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/DataSources/Yw.WinFrmUI.HydroPumpQueryPointViewModel.datasource b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/DataSources/Yw.WinFrmUI.HydroPumpQueryPointViewModel.datasource
new file mode 100644
index 0000000..ea35de6
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/DataSources/Yw.WinFrmUI.HydroPumpQueryPointViewModel.datasource
@@ -0,0 +1,10 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="HydroPumpQueryPointViewModel" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+  <TypeInfo>Yw.WinFrmUI.HydroPumpQueryPointViewModel, Yw.WinFrmUI.Hydro.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource>
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/DataSources/Yw.WinFrmUI.HydroPumpRunViewModel.datasource b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/DataSources/Yw.WinFrmUI.HydroPumpRunViewModel.datasource
deleted file mode 100644
index 19ac6cb..0000000
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/DataSources/Yw.WinFrmUI.HydroPumpRunViewModel.datasource
+++ /dev/null
@@ -1,10 +0,0 @@
-锘�<?xml version="1.0" encoding="utf-8"?>
-<!--
-    This file is automatically generated by Visual Studio. It is 
-    used to store generic object data source configuration information.  
-    Renaming the file extension or editing the content of this file may   
-    cause the file to be unrecognizable by the program.
--->
-<GenericObjectDataSource DisplayName="HydroPumpRunViewModel" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
-  <TypeInfo>Yw.WinFrmUI.HydroPumpRunViewModel, Yw.WinFrmUI.Hydro.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
-</GenericObjectDataSource>
\ No newline at end of file
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 b0195c1..2187414 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj
@@ -206,6 +206,9 @@
 		<Compile Update="18-loss\03-statistics\HydroSingleWorkingLossStatisticsDlg.cs">
 			<SubType>Form</SubType>
 		</Compile>
+		<Compile Update="19-pump\04-design\HydroPumpDesignPointListGridCtrl.cs">
+		  <SubType>UserControl</SubType>
+		</Compile>
 		<Compile Update="99-view\02-l2d\HydroL2dViewPage.cs">
 			<SubType>UserControl</SubType>
 		</Compile>
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj.user b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj.user
index 6c415b9..f2ef529 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj.user
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj.user
@@ -70,7 +70,16 @@
     <Compile Update="18-loss\03-statistics\HydroSingleWorkingLossStatisticsCtrl.cs">
       <SubType>UserControl</SubType>
     </Compile>
-    <Compile Update="19-pump\01-run\HydroPumpRunListViewCtrl.cs">
+    <Compile Update="19-pump\01-list\HydroPumpListStateViewCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Update="19-pump\02-extend\HydroPumpListExtendGridCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Update="19-pump\03-query\HydroPumpQueryPointListGridCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Update="19-pump\05-state\HydroPumpListStateEditCtrl.cs">
       <SubType>UserControl</SubType>
     </Compile>
     <Compile Update="20-energy\01-statistics\HydroEnergyStatisticsBarCtrl.cs">

--
Gitblit v1.9.3